/* * CHighScoreScreen.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once #include "../windows/CWindowObject.h" class CButton; class CLabel; class CMultiLineLabel; class CAnimImage; class CTextInput; class VideoWidget; class TransparentFilledRectangle; class HighScoreParameter { public: int difficulty; int day; int townAmount; bool usedCheat; bool hasGrail; bool allDefeated; std::string campaignName; std::string scenarioName; std::string playerName; }; class HighScoreCalculation { public: std::vector parameters = std::vector(); bool isCampaign = false; auto calculate(); static CreatureID getCreatureForPoints(int points, bool campaign); }; class CHighScoreScreen : public CWindowObject { public: enum HighScorePage { SCENARIO, CAMPAIGN }; private: void addButtons(); void addHighScores(); void buttonCampaignClick(); void buttonScenarioClick(); void buttonResetClick(); void buttonExitClick(); void showPopupWindow(const Point & cursorPosition) override; HighScorePage highscorepage; std::shared_ptr background; std::vector> buttons; std::vector> texts; std::vector> images; const int screenRows = 11; int highlighted; public: CHighScoreScreen(HighScorePage highscorepage, int highlighted = -1); }; class CHighScoreInput : public CWindowObject { std::shared_ptr text; std::shared_ptr buttonOk; std::shared_ptr buttonCancel; std::shared_ptr statusBar; std::shared_ptr textInput; std::function ready; void okay(); void abort(); public: CHighScoreInput(std::string playerName, std::function readyCB); }; class CHighScoreInputScreen : public CWindowObject { std::vector> texts; std::shared_ptr input; std::shared_ptr background; std::shared_ptr videoPlayer; bool won; HighScoreCalculation calc; public: CHighScoreInputScreen(bool won, HighScoreCalculation calc); int addEntry(std::string text); void clickPressed(const Point & cursorPosition) override; void keyPressed(EShortcut key) override; };