1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-16 10:19:47 +02:00
vcmi/client/lobby/CSelectionBase.h

199 lines
5.1 KiB
C++
Raw Normal View History

/*
* 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;
2023-12-28 20:41:01 +02:00
class ExtraOptionsTab;
class SelectionTab;
class InfoCard;
class CChatBox;
2024-04-29 23:55:02 +02:00
class PvPBox;
2024-05-01 15:58:22 +02:00
class TownSelector;
class CLabel;
2024-04-30 23:12:55 +02:00
class CSlider;
class CFlagBox;
class CLabelGroup;
class TransparentFilledRectangle;
2024-04-30 21:52:04 +02:00
class FilledTexturePlayerColored;
2024-04-30 23:12:55 +02:00
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;
2023-12-28 20:41:01 +02:00
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;
2023-12-28 20:41:01 +02:00
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;
2023-10-21 16:49:50 +02:00
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;
2024-04-29 23:55:02 +02:00
std::shared_ptr<PvPBox> pvpBox;
public:
2024-04-30 21:52:04 +02:00
bool showChat;
std::shared_ptr<CChatBox> chat;
std::shared_ptr<CFlagBox> flagbox;
std::shared_ptr<CToggleGroup> iconDifficulty;
InfoCard();
void disableLabelRedraws();
void changeSelection();
2024-04-30 21:52:04 +02:00
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;
2023-10-01 16:40:26 +02:00
bool captureThisKey(EShortcut key) override;
void addNewMessage(const std::string & text);
};
2024-04-29 23:55:02 +02:00
class PvPBox : public CIntObject
{
2024-04-30 21:52:04 +02:00
std::shared_ptr<FilledTexturePlayerColored> backgroundTexture;
std::shared_ptr<TransparentFilledRectangle> backgroundBorder;
2024-05-01 15:58:22 +02:00
std::shared_ptr<TownSelector> townSelector;
2024-04-30 23:12:55 +02:00
2024-04-29 23:55:02 +02:00
std::shared_ptr<CButton> buttonFlipCoin;
2024-04-30 01:52:49 +02:00
std::shared_ptr<CButton> buttonRandomTown;
std::shared_ptr<CButton> buttonRandomTownVs;
2024-04-30 21:52:04 +02:00
public:
2024-04-29 23:55:02 +02:00
PvPBox(const Rect & rect);
};
2024-05-01 15:58:22 +02:00
class TownSelector : public CIntObject
2024-04-30 23:12:55 +02:00
{
std::map<FactionID, std::shared_ptr<CAnimImage>> towns;
std::map<FactionID, std::shared_ptr<LRClickableArea>> townsArea;
std::shared_ptr<CSlider> slider;
2024-05-01 00:49:33 +02:00
void sliderMove(int slidPos);
void updateListItems();
2024-04-30 23:12:55 +02:00
public:
2024-05-01 00:49:33 +02:00
std::map<FactionID, bool> townsEnabled;
2024-05-01 15:58:22 +02:00
TownSelector(const Point & loc);
2024-04-30 23:12:55 +02:00
};
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;