1 /***************************************************************************
2  *      Mechanized Assault and Exploration Reloaded Projectfile            *
3  *                                                                         *
4  *   This program is free software; you can redistribute it and/or modify  *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This program is distributed in the hope that it will be useful,       *
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12  *   GNU General Public License for more details.                          *
13  *                                                                         *
14  *   You should have received a copy of the GNU General Public License     *
15  *   along with this program; if not, write to the                         *
16  *   Free Software Foundation, Inc.,                                       *
17  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18  ***************************************************************************/
19 
20 #ifndef ui_graphical_menu_windows_windowgamesettings_gamesettingsH
21 #define ui_graphical_menu_windows_windowgamesettings_gamesettingsH
22 
23 #include <string>
24 #include <chrono>
25 
26 #include "utility/signal/signal.h"
27 
28 class cNetMessage;
29 
30 enum class eGameSettingsResourceAmount
31 {
32 	Limited,
33 	Normal,
34 	High,
35 	TooMuch
36 };
37 
38 enum class eGameSettingsResourceDensity
39 {
40 	Sparse,
41 	Normal,
42 	Dense,
43 	TooMuch
44 };
45 
46 enum class eGameSettingsBridgeheadType
47 {
48 	Mobile,
49 	Definite,
50 };
51 
52 enum class eGameSettingsGameType
53 {
54 	Simultaneous,
55 	Turns,
56 	HotSeat
57 };
58 
59 enum class eGameSettingsVictoryCondition
60 {
61 	Turns,
62 	Points,
63 	Death
64 };
65 
66 std::string gameSettingsResourceAmountToString (eGameSettingsResourceAmount amount, bool translated = false);
67 eGameSettingsResourceAmount gameSettingsResourceAmountFromString (const std::string& string);
68 
69 std::string gameSettingsResourceDensityToString (eGameSettingsResourceDensity density, bool translated = false);
70 eGameSettingsResourceDensity gameSettingsResourceDensityFromString (const std::string& string);
71 
72 std::string gameSettingsBridgeheadTypeToString (eGameSettingsBridgeheadType type, bool translated = false);
73 eGameSettingsBridgeheadType gameSettingsBridgeheadTypeFromString (const std::string& string);
74 
75 std::string gameSettingsGameTypeToString (eGameSettingsGameType type, bool translated = false);
76 eGameSettingsGameType gameSettingsGameTypeString (const std::string& string);
77 
78 std::string gameSettingsVictoryConditionToString (eGameSettingsVictoryCondition condition, bool translated = false);
79 eGameSettingsVictoryCondition gameSettingsVictoryConditionFromString (const std::string& string);
80 
81 class cGameSettings
82 {
83 public:
84 	static const int defaultCreditsNone    = 0;
85 	static const int defaultCreditsLow     = 50;
86 	static const int defaultCreditsLimited = 100;
87 	static const int defaultCreditsNormal  = 150;
88 	static const int defaultCreditsHigh    = 200;
89 	static const int defaultCreditsMore    = 250;
90 
91 	static const int defaultVictoryTurnsOption0 = 100;
92 	static const int defaultVictoryTurnsOption1 = 200;
93 	static const int defaultVictoryTurnsOption2 = 400;
94 
95 	static const int defaultVictoryPointsOption0 = 100;
96 	static const int defaultVictoryPointsOption1 = 200;
97 	static const int defaultVictoryPointsOption2 = 400;
98 
99 	static const std::chrono::seconds defaultTurnLimitOption0;
100 	static const std::chrono::seconds defaultTurnLimitOption1;
101 	static const std::chrono::seconds defaultTurnLimitOption2;
102 	static const std::chrono::seconds defaultTurnLimitOption3;
103 	static const std::chrono::seconds defaultTurnLimitOption4;
104 	static const std::chrono::seconds defaultTurnLimitOption5;
105 
106 	static const std::chrono::seconds defaultEndTurnDeadlineOption0;
107 	static const std::chrono::seconds defaultEndTurnDeadlineOption1;
108 	static const std::chrono::seconds defaultEndTurnDeadlineOption2;
109 	static const std::chrono::seconds defaultEndTurnDeadlineOption3;
110 	static const std::chrono::seconds defaultEndTurnDeadlineOption4;
111 	static const std::chrono::seconds defaultEndTurnDeadlineOption5;
112 
113 	cGameSettings();
114 	cGameSettings (const cGameSettings& other);
115 
116 	cGameSettings& operator= (const cGameSettings& other);
117 
118 	eGameSettingsResourceAmount getMetalAmount() const;
119 	void setMetalAmount (eGameSettingsResourceAmount value);
120 
121 	eGameSettingsResourceAmount getOilAmount() const;
122 	void setOilAmount (eGameSettingsResourceAmount value);
123 
124 	eGameSettingsResourceAmount getGoldAmount() const;
125 	void setGoldAmount (eGameSettingsResourceAmount value);
126 
127 	eGameSettingsResourceDensity getResourceDensity() const;
128 	void setResourceDensity (eGameSettingsResourceDensity value);
129 
130 	eGameSettingsBridgeheadType getBridgeheadType() const;
131 	void setBridgeheadType (eGameSettingsBridgeheadType value);
132 
133 	eGameSettingsGameType getGameType() const;
134 	void setGameType (eGameSettingsGameType value);
135 
136 	bool getClansEnabled() const;
137 	void setClansEnabled (bool value);
138 
139 	unsigned int getStartCredits() const;
140 	void setStartCredits (unsigned int value);
141 
142 	eGameSettingsVictoryCondition getVictoryCondition() const;
143 	void setVictoryCondition (eGameSettingsVictoryCondition value);
144 
145 	unsigned int getVictoryTurns() const;
146 	void setVictoryTurns (unsigned int value);
147 
148 	unsigned int getVictoryPoints() const;
149 	void setVictoryPoints (unsigned int value);
150 
151 	const std::chrono::seconds& getTurnEndDeadline() const;
152 	void setTurnEndDeadline (const std::chrono::seconds& value);
153 
154 	bool isTurnEndDeadlineActive() const;
155 	void setTurnEndDeadlineActive (bool value);
156 
157 	const std::chrono::seconds& getTurnLimit() const;
158 	void setTurnLimit (const std::chrono::seconds& value);
159 
160 	bool isTurnLimitActive() const;
161 	void setTurnLimitActive (bool value);
162 
163 	void pushInto (cNetMessage& message) const;
164 	void popFrom (cNetMessage& message);
165 
166 	mutable cSignal<void ()> metalAmountChanged;
167 	mutable cSignal<void ()> oilAmountChanged;
168 	mutable cSignal<void ()> goldAmountChanged;
169 
170 	mutable cSignal<void ()> resourceDensityChanged;
171 
172 	mutable cSignal<void ()> bridgeheadTypeChanged;
173 
174 	mutable cSignal<void ()> gameTypeChanged;
175 
176 	mutable cSignal<void ()> clansEnabledChanged;
177 
178 	mutable cSignal<void ()> startCreditsChanged;
179 
180 	mutable cSignal<void ()> victoryConditionTypeChanged;
181 	mutable cSignal<void ()> victoryTurnsChanged;
182 	mutable cSignal<void ()> victoryPointsChanged;
183 
184 	mutable cSignal<void ()> turnEndDeadlineChanged;
185 	mutable cSignal<void ()> turnEndDeadlineActiveChanged;
186 
187 	mutable cSignal<void ()> turnLimitChanged;
188 	mutable cSignal<void ()> turnLimitActiveChanged;
189 private:
190 	eGameSettingsResourceAmount metalAmount;
191 	eGameSettingsResourceAmount oilAmount;
192 	eGameSettingsResourceAmount goldAmount;
193 
194 	eGameSettingsResourceDensity resourceDensity;
195 
196 	eGameSettingsBridgeheadType bridgeheadType;
197 
198 	eGameSettingsGameType gameType;
199 
200 	bool clansEnabled;
201 
202 	unsigned int startCredits;
203 
204 	eGameSettingsVictoryCondition victoryConditionType;
205 	unsigned int victoryTurns;
206 	unsigned int victoryPoints;
207 
208 	std::chrono::seconds turnEndDeadline;
209 	bool turnEndDeadlineActive;
210 
211 	std::chrono::seconds turnLimit;
212 	bool turnLimitActive;
213 };
214 
215 #endif // ui_graphical_menu_windows_windowgamesettings_gamesettingsH
216