mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-10 09:50:17 +02:00
200 lines
5.1 KiB
C++
200 lines
5.1 KiB
C++
/*
|
|
* CSelectionBase.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 "../mainmenu/CMainMenu.h"
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
class CMapInfo;
|
|
struct StartInfo;
|
|
struct PlayerInfo;
|
|
|
|
VCMI_LIB_NAMESPACE_END
|
|
|
|
class CButton;
|
|
class CTextBox;
|
|
class CTextInput;
|
|
class CAnimImage;
|
|
class CToggleGroup;
|
|
class RandomMapTab;
|
|
class OptionsTab;
|
|
class TurnOptionsTab;
|
|
class ExtraOptionsTab;
|
|
class SelectionTab;
|
|
class InfoCard;
|
|
class CChatBox;
|
|
class PvPBox;
|
|
class TownSelector;
|
|
class CLabel;
|
|
class CSlider;
|
|
class CFlagBox;
|
|
class CLabelGroup;
|
|
class TransparentFilledRectangle;
|
|
class FilledTexturePlayerColored;
|
|
class LRClickableArea;
|
|
|
|
class ISelectionScreenInfo
|
|
{
|
|
public:
|
|
ESelectionScreen screenType;
|
|
|
|
ISelectionScreenInfo(ESelectionScreen ScreenType = ESelectionScreen::unknown);
|
|
virtual ~ISelectionScreenInfo();
|
|
virtual const CMapInfo * getMapInfo() = 0;
|
|
virtual const StartInfo * getStartInfo() = 0;
|
|
|
|
virtual int getCurrentDifficulty();
|
|
virtual PlayerInfo getPlayerInfo(PlayerColor color);
|
|
|
|
};
|
|
|
|
/// The actual map selection screen which consists of the options and selection tab
|
|
class CSelectionBase : public CWindowObject, public ISelectionScreenInfo
|
|
{
|
|
public:
|
|
std::shared_ptr<InfoCard> card;
|
|
|
|
std::shared_ptr<CButton> buttonSelect;
|
|
std::shared_ptr<CButton> buttonRMG;
|
|
std::shared_ptr<CButton> buttonOptions;
|
|
std::shared_ptr<CButton> buttonTurnOptions;
|
|
std::shared_ptr<CButton> buttonExtraOptions;
|
|
std::shared_ptr<CButton> buttonStart;
|
|
std::shared_ptr<CButton> buttonBack;
|
|
std::shared_ptr<CButton> buttonSimturns;
|
|
|
|
std::shared_ptr<SelectionTab> tabSel;
|
|
std::shared_ptr<OptionsTab> tabOpt;
|
|
std::shared_ptr<TurnOptionsTab> tabTurnOptions;
|
|
std::shared_ptr<ExtraOptionsTab> tabExtraOptions;
|
|
std::shared_ptr<RandomMapTab> tabRand;
|
|
std::shared_ptr<CIntObject> curTab;
|
|
|
|
CSelectionBase(ESelectionScreen type);
|
|
virtual void toggleTab(std::shared_ptr<CIntObject> tab);
|
|
};
|
|
|
|
class InfoCard : public CIntObject
|
|
{
|
|
std::shared_ptr<CPicture> playerListBg;
|
|
std::shared_ptr<CPicture> background;
|
|
|
|
std::shared_ptr<CAnimImage> iconsVictoryCondition;
|
|
std::shared_ptr<CAnimImage> iconsLossCondition;
|
|
std::shared_ptr<CAnimImage> iconsMapSizes;
|
|
|
|
std::shared_ptr<CLabel> labelSaveDate;
|
|
std::shared_ptr<CLabel> labelMapSize;
|
|
std::shared_ptr<CLabel> labelScenarioName;
|
|
std::shared_ptr<CLabel> labelScenarioDescription;
|
|
std::shared_ptr<CLabel> labelVictoryCondition;
|
|
std::shared_ptr<CLabel> labelLossCondition;
|
|
std::shared_ptr<CLabel> labelMapDiff;
|
|
std::shared_ptr<CLabel> labelPlayerDifficulty;
|
|
std::shared_ptr<CLabel> labelRating;
|
|
std::shared_ptr<CLabel> labelCampaignDescription;
|
|
|
|
std::shared_ptr<CLabel> mapName;
|
|
std::shared_ptr<CTextBox> mapDescription;
|
|
std::shared_ptr<CLabel> labelDifficulty;
|
|
std::shared_ptr<CLabel> labelDifficultyPercent;
|
|
std::shared_ptr<CLabel> labelVictoryConditionText;
|
|
std::shared_ptr<CLabel> labelLossConditionText;
|
|
|
|
std::shared_ptr<CLabelGroup> labelGroupPlayers;
|
|
std::shared_ptr<CButton> buttonInvitePlayers;
|
|
std::shared_ptr<CButton> buttonOpenGlobalLobby;
|
|
|
|
std::shared_ptr<PvPBox> pvpBox;
|
|
public:
|
|
|
|
bool showChat;
|
|
std::shared_ptr<CChatBox> chat;
|
|
std::shared_ptr<CFlagBox> flagbox;
|
|
|
|
std::shared_ptr<CToggleGroup> iconDifficulty;
|
|
|
|
InfoCard();
|
|
void disableLabelRedraws();
|
|
void changeSelection();
|
|
void toggleChat();
|
|
void setChat(bool activateChat);
|
|
};
|
|
|
|
class CChatBox : public CIntObject
|
|
{
|
|
public:
|
|
std::shared_ptr<CTextBox> chatHistory;
|
|
std::shared_ptr<CTextInput> inputBox;
|
|
std::shared_ptr<TransparentFilledRectangle> inputBackground;
|
|
|
|
CChatBox(const Rect & rect);
|
|
|
|
void keyPressed(EShortcut key) override;
|
|
bool captureThisKey(EShortcut key) override;
|
|
void addNewMessage(const std::string & text);
|
|
};
|
|
|
|
class PvPBox : public CIntObject
|
|
{
|
|
std::shared_ptr<FilledTexturePlayerColored> backgroundTexture;
|
|
std::shared_ptr<TransparentFilledRectangle> backgroundBorder;
|
|
|
|
std::shared_ptr<TownSelector> townSelector;
|
|
|
|
std::shared_ptr<CButton> buttonFlipCoin;
|
|
std::shared_ptr<CButton> buttonRandomTown;
|
|
std::shared_ptr<CButton> buttonRandomTownVs;
|
|
std::shared_ptr<CButton> buttonHandicap;
|
|
public:
|
|
PvPBox(const Rect & rect);
|
|
};
|
|
|
|
class TownSelector : public CIntObject
|
|
{
|
|
std::map<FactionID, std::shared_ptr<CAnimImage>> towns;
|
|
std::map<FactionID, std::shared_ptr<LRClickableArea>> townsArea;
|
|
std::shared_ptr<CSlider> slider;
|
|
|
|
void sliderMove(int slidPos);
|
|
void updateListItems();
|
|
|
|
public:
|
|
std::map<FactionID, bool> townsEnabled;
|
|
|
|
TownSelector(const Point & loc);
|
|
};
|
|
|
|
class CFlagBox : public CIntObject
|
|
{
|
|
std::shared_ptr<CLabel> labelAllies;
|
|
std::shared_ptr<CLabel> labelEnemies;
|
|
std::vector<std::shared_ptr<CAnimImage>> flagsAllies;
|
|
std::vector<std::shared_ptr<CAnimImage>> flagsEnemies;
|
|
|
|
public:
|
|
CFlagBox(const Rect & rect);
|
|
void recreate();
|
|
void showPopupWindow(const Point & cursorPosition) override;
|
|
void showTeamsPopup();
|
|
|
|
class CFlagBoxTooltipBox : public CWindowObject
|
|
{
|
|
std::shared_ptr<CLabel> labelTeamAlignment;
|
|
std::shared_ptr<CLabelGroup> labelGroupTeams;
|
|
std::vector<std::shared_ptr<CAnimImage>> iconsFlags;
|
|
public:
|
|
CFlagBoxTooltipBox();
|
|
};
|
|
};
|
|
|
|
extern ISelectionScreenInfo * SEL;
|