GigaPasjans
Loading...
Searching...
No Matches
Solitaire.h
1// Wykonane przez Piotra ChudziƄskiego w dniu 10.04.2025
2#pragma once
3#include <kalium/AudioSystem.h>
4#include <phosphorus/GameBootstrapper.h>
5#include <phosphorus/IGame.h>
6#include "Screens/Screen.h"
7
8namespace Game
9{
13 enum class GameState : uint8
14 {
15 Uninitialized,
16 Playing,
17 Replaying
18 };
19
23 enum class Difficulty : uint8
24 {
25 Easy,
26 Medium,
27 Hard
28 };
29
33 enum class ScoringMode : uint32
34 {
35 Microsoft = 0,
36 ClassicEasy,
37 VegasStyle,
38 SpeedRun,
39 Hardcore,
40 Alternative
41 };
42
43 enum class GenerateMode : uint8
44 {
45 Predefined = 0,
46 Solve = 1
47 };
48
52 class SolitaireSessionSettings : public Phosphorus::GameObject
53 {
54 protected:
56 GameObject *clone() override { return new SolitaireSessionSettings(); }
57
58 public:
63
68
70
71 SolitaireSessionSettings() :
72 ScoringMode("Punktacja", ScoringMode::Microsoft), Difficulty("Poziom", Difficulty::Easy),
73 GenerateMode("GenerateMode", GenerateMode::Predefined)
74 {
76 ScoringMode.SetDisplayName("session.scoring");
77 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, Microsoft);
78 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, ClassicEasy);
79 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, VegasStyle);
80 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, SpeedRun);
81 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, Hardcore);
82 DEFINE_ENUM_VALUE(ScoringMode, ScoringMode, Alternative);
83
85 Difficulty.SetDisplayName("session.difficulty");
86 Difficulty.Bind(Difficulty::Easy, L"1");
87 Difficulty.Bind(Difficulty::Medium, L"2");
88 Difficulty.Bind(Difficulty::Hard, L"3");
89
90 addParameter(&GenerateMode);
91 GenerateMode.SetDisplayName("session.generate");
92 GenerateMode.Bind(GenerateMode::Predefined, _TW("generate.predefined"));
93 GenerateMode.Bind(GenerateMode::Solve, _TW("generate.solve"));
94 }
95
96
98 String GetIdentifer() const override { return "SessionSettings"; }
99 };
100
104 class SolitaireStatistics : public Phosphorus::GameObject
105 {
106 protected:
108 GameObject *clone() override { return new SolitaireStatistics(); }
109
110 public:
114 Phosphorus::IntParameter RevertedInteractions;
115
119 Phosphorus::IntParameter StockViewedCards;
120
124 Phosphorus::Int64Parameter TimePlayed;
125
129 Phosphorus::IntParameter Score;
130
131 SolitaireStatistics() :
132 RevertedInteractions("RevertedInteractions", 0), StockViewedCards("StockViewedCards", 0),
133 TimePlayed("TimePlayed", 0), Score("Score", 0)
134 {
139 }
140
142 String GetIdentifer() const override { return "Statistics"; }
143 };
144
145 enum Language
146 {
147 Polish,
148 English
149 };
150
154 class SolitaireSettings : public Phosphorus::GameObject
155 {
156 private:
158 GameObject *clone() override { return new SolitaireSettings(); }
159
160 public:
164 Phosphorus::BoolParameter Audio;
165
170
171 SolitaireSettings() : Audio("Audio", true), Language("Language", Language::English)
172 {
175
176 Language.SetDisplayName("generic.language");
177 Language.Bind(Language::Polish, L"Polski");
178 Language.Bind(Language::English, L"English");
179 }
180
182 String GetIdentifer() const override { return "SolitaireSettings"; }
183 };
184
188 class Solitaire : public Phosphorus::IGame, public Andromenda::IActionProvider
189 {
190 private:
194 std::stack<IScreen *> m_ScreenStack;
195
199 void updateScreenState();
200
204 Kalium::AudioSystem m_AudioSystem;
205
209 IScreen *m_PrevPeekScreen;
210
211 public:
215 GameState GameState = GameState::Uninitialized;
216
221
226
231 {
232 return dynamic_cast<SolitaireSettings *>(Phosphorus::GameInstance->GameSettings);
233 }
234
239
241 IGame(options, nullptr), m_AudioSystem(m_VfsManager), m_PrevPeekScreen(nullptr)
242 {
243 m_Surface = new Andromenda::Surface(std::bind(&Solitaire::OnSurfaceCallback, this, std::placeholders::_1),
244 std::bind(&Solitaire::OnRender, this));
245 };
246
247 ~Solitaire();
248
252 void Run() override;
253
257 void OnSurfaceCallback(const String &id) override;
258
262 void OnRender() override;
263
267 void PushScreen(IScreen *screen);
268
272 void PopScreen(int32 count = 1);
273
277 void PlayOneShot(const String &path);
278
282 void SetTitle(const WideString &title);
283
287 void OnWin();
288
292 void OnLoadFromFile();
293
297 void OnNewGame();
298
303
307 void ProvideActions(Andromenda::ActionRegistry &registry) override;
308 };
309} // namespace Game
Represent registry of Action objects.
Definition ActionRegistry.h:74
Represents an object that can provide actions.
Definition IActionProvider.h:12
The renderer of component registry.
Definition Surface.h:28
Represents object that registers components .
Definition Screen.h:57
Main game class managing the Solitaire session.
Definition Solitaire.h:189
void PopScreen(int32 count=1)
Pops one or more screens from the stack.
Definition Solitaire.cpp:139
GameState GameState
Current game state.
Definition Solitaire.h:215
Phosphorus::ProductInfo GetProductInfo() override
Returns metadata about the game product.
Definition Solitaire.cpp:31
static SolitaireSettings * GetSettings()
Returns a pointer to global user settings.
Definition Solitaire.h:230
void Run() override
Starts the game loop.
Definition Solitaire.cpp:54
void OnRender() override
Renders the game frame.
Definition Solitaire.cpp:103
void PlayOneShot(const String &path)
Plays a sound from the given file path.
Definition Solitaire.cpp:127
void OnSurfaceCallback(const String &id) override
Called when a UI surface interaction occurs.
Definition Solitaire.cpp:97
void OnWin()
Called when the game is won.
Definition Solitaire.cpp:150
SolitaireSessionSettings * SessionSettings
Pointer to session settings object.
Definition Solitaire.h:225
Phosphorus::VfsManager & GetVfsManager()
Returns virtual file system manager.
Definition Solitaire.cpp:159
SolitaireStatistics * Statistics
Pointer to gameplay statistics object.
Definition Solitaire.h:220
void OnLoadFromFile()
Loads a saved game session from file.
Definition Solitaire.cpp:169
void OnNewGame()
Starts a new game session.
Definition Solitaire.cpp:161
void PushScreen(IScreen *screen)
Pushes a new screen onto the stack.
Definition Solitaire.cpp:133
void SetTitle(const WideString &title)
Sets the window or UI title.
Definition Solitaire.cpp:148
void ProvideActions(Andromenda::ActionRegistry &registry) override
Provides UI and input actions to the action registry.
Definition Solitaire.cpp:175
Holds user-defined session settings like scoring and difficulty.
Definition Solitaire.h:53
GameObject * clone() override
Definition Solitaire.h:56
Phosphorus::EnumParameter< Difficulty > Difficulty
Selected difficulty parameter.
Definition Solitaire.h:67
Phosphorus::EnumParameter< ScoringMode > ScoringMode
Selected scoring mode parameter.
Definition Solitaire.h:62
String GetIdentifer() const override
Definition Solitaire.h:98
Holds user preferences such as audio settings.
Definition Solitaire.h:155
String GetIdentifer() const override
Definition Solitaire.h:182
Phosphorus::BoolParameter Audio
Enables or disables audio playback.
Definition Solitaire.h:164
Phosphorus::EnumParameter< Language > Language
Language of game.
Definition Solitaire.h:169
Stores gameplay statistics such as score and time.
Definition Solitaire.h:105
GameObject * clone() override
Definition Solitaire.h:108
Phosphorus::IntParameter StockViewedCards
Number of cards viewed from the stock.
Definition Solitaire.h:119
String GetIdentifer() const override
Definition Solitaire.h:142
Phosphorus::IntParameter Score
Current score in the session.
Definition Solitaire.h:129
Phosphorus::IntParameter RevertedInteractions
Number of undo actions performed.
Definition Solitaire.h:114
Phosphorus::Int64Parameter TimePlayed
Total time played in milliseconds.
Definition Solitaire.h:124
Definition AudioSystem.h:11
Templated enum parameter. Derived from BaseEnumParameter.
Definition GameObject.h:216
Represents named set of parameters which can be serialized.
Definition GameObject.h:274
void addParameter(IBaseParameter *parameter)
Adds parameter to the list.
Definition GameObject.h:304
Represents serializable GameObjectRegistry with rendering, asset manager.
Definition IGame.h:42
VfsManager m_VfsManager
Main game asset manager.
Definition IGame.h:63
Andromenda::Surface * m_Surface
Main game renderer.
Definition IGame.h:57
Virtual file storage manager.
Definition VfsManager.h:16
Represents a mutable sequence of characters, providing various member functions for string manipulati...
Definition String.h:16
Represents a mutable sequence of utf-16 characters, providing various member functions for string man...
Definition WideString.h:14
Game launch options.
Definition GameOptions.h:11
Game product info.
Definition IGame.h:17