2023-09-22 01:39:35 +02:00
|
|
|
/*
|
|
|
|
* 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;
|
2023-09-22 20:39:20 +02:00
|
|
|
class CMultiLineLabel;
|
2023-09-22 01:39:35 +02:00
|
|
|
class CAnimImage;
|
2023-09-22 20:39:20 +02:00
|
|
|
class CTextInput;
|
2023-09-22 01:39:35 +02:00
|
|
|
|
2023-09-23 00:21:36 +02:00
|
|
|
class HighScoreParameter
|
|
|
|
{
|
|
|
|
public:
|
2023-09-23 14:51:39 +02:00
|
|
|
int difficulty;
|
|
|
|
int day;
|
|
|
|
int townAmount;
|
|
|
|
bool usedCheat;
|
|
|
|
bool hasGrail;
|
|
|
|
bool allDefeated;
|
|
|
|
std::string campaign;
|
|
|
|
std::string land;
|
2023-09-23 00:21:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
class HighScoreCalculation
|
|
|
|
{
|
|
|
|
public:
|
2023-09-23 14:51:39 +02:00
|
|
|
std::vector<HighScoreParameter> parameters = std::vector<HighScoreParameter>();
|
|
|
|
bool isCampaign = false;
|
2023-09-23 01:36:01 +02:00
|
|
|
|
2023-09-23 14:51:39 +02:00
|
|
|
auto calculate();
|
|
|
|
static CreatureID getCreatureForPoints(int points, bool campaign);
|
2023-09-23 00:21:36 +02:00
|
|
|
};
|
|
|
|
|
2023-09-22 01:39:35 +02:00
|
|
|
class CHighScoreScreen : public CWindowObject
|
|
|
|
{
|
2023-09-23 13:14:45 +02:00
|
|
|
public:
|
2023-09-23 14:51:39 +02:00
|
|
|
enum HighScorePage { SCENARIO, CAMPAIGN };
|
2023-09-22 01:39:35 +02:00
|
|
|
|
2023-09-23 13:14:45 +02:00
|
|
|
private:
|
2023-09-23 14:51:39 +02:00
|
|
|
void addButtons();
|
|
|
|
void addHighScores();
|
|
|
|
|
|
|
|
void buttonCampaginClick();
|
|
|
|
void buttonStandardClick();
|
|
|
|
void buttonResetClick();
|
|
|
|
void buttonExitClick();
|
|
|
|
|
|
|
|
void showPopupWindow(const Point & cursorPosition) override;
|
|
|
|
|
|
|
|
HighScorePage highscorepage;
|
|
|
|
|
|
|
|
std::shared_ptr<CPicture> background;
|
|
|
|
std::vector<std::shared_ptr<CButton>> buttons;
|
|
|
|
std::vector<std::shared_ptr<CLabel>> texts;
|
|
|
|
std::vector<std::shared_ptr<CAnimImage>> images;
|
|
|
|
|
|
|
|
int highlighted;
|
2023-09-22 01:39:35 +02:00
|
|
|
public:
|
2023-09-23 13:14:45 +02:00
|
|
|
CHighScoreScreen(HighScorePage highscorepage = HighScorePage::SCENARIO, int highlighted = -1);
|
2023-09-22 01:39:35 +02:00
|
|
|
};
|
2023-09-22 20:39:20 +02:00
|
|
|
|
|
|
|
class CHighScoreInput : public CWindowObject
|
|
|
|
{
|
2023-09-23 14:51:39 +02:00
|
|
|
std::shared_ptr<CPicture> background;
|
|
|
|
std::shared_ptr<CMultiLineLabel> text;
|
|
|
|
std::shared_ptr<CButton> buttonOk;
|
2023-09-22 20:39:20 +02:00
|
|
|
std::shared_ptr<CButton> buttonCancel;
|
|
|
|
std::shared_ptr<CGStatusBar> statusBar;
|
2023-09-23 14:51:39 +02:00
|
|
|
std::shared_ptr<CTextInput> textInput;
|
2023-09-22 20:39:20 +02:00
|
|
|
|
2023-09-23 14:51:39 +02:00
|
|
|
std::function<void(std::string text)> ready;
|
|
|
|
|
|
|
|
void okay();
|
|
|
|
void abort();
|
2023-09-22 20:39:20 +02:00
|
|
|
public:
|
|
|
|
CHighScoreInput(std::function<void(std::string text)> readyCB);
|
|
|
|
};
|
|
|
|
|
|
|
|
class CHighScoreInputScreen : public CWindowObject
|
|
|
|
{
|
2023-09-23 14:51:39 +02:00
|
|
|
std::vector<std::shared_ptr<CMultiLineLabel>> texts;
|
|
|
|
std::shared_ptr<CHighScoreInput> input;
|
2023-09-22 21:45:12 +02:00
|
|
|
|
2023-09-23 14:51:39 +02:00
|
|
|
std::string video;
|
|
|
|
bool won;
|
|
|
|
HighScoreCalculation calc;
|
2023-09-22 20:39:20 +02:00
|
|
|
public:
|
2023-09-23 00:21:36 +02:00
|
|
|
CHighScoreInputScreen(bool won, HighScoreCalculation calc);
|
2023-09-22 20:39:20 +02:00
|
|
|
|
2023-09-23 14:51:39 +02:00
|
|
|
int addEntry(std::string text);
|
2023-09-22 20:39:20 +02:00
|
|
|
|
|
|
|
void show(Canvas & to) override;
|
|
|
|
void activate() override;
|
|
|
|
void deactivate() override;
|
|
|
|
void clickPressed(const Point & cursorPosition) override;
|
|
|
|
};
|