Pioneer
Loading...
Searching...
No Matches
Pi.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _PI_H
5#define _PI_H
6
7#include "Random.h"
8#include "MathUtil.h"
10#include "gameconsts.h"
11
12#include <map>
13#include <string>
14#include <vector>
15
16namespace Input {
17 class Manager;
18} //namespace Input
19
20namespace PiGui {
21 class Instance;
22} //namespace PiGui
23
24class Game;
25class GameConfig;
26class Intro;
27class JobSet;
28class LuaConsole;
29class LuaNameGen;
30class LuaTimer;
31class ModelCache;
33class Player;
34class SystemPath;
35class TransferPlanner;
36class View;
37class SDLGraphics;
38class LuaSerializer;
39
40#if ENABLE_SERVER_AGENT
41class ServerAgent;
42#endif
43
44namespace Graphics {
45 class Renderer;
46} // namespace Graphics
47
48namespace SceneGraph {
49 class Model;
50}
51
52namespace Sound {
53 class MusicPlayer;
54}
55
57public:
59 planets(0),
60 cities(0) {}
62 int cities;
63};
64
65class Pi {
66public:
67 Pi() = delete;
68
69 class App final : public GuiApplication {
70 public:
71 // TODO: headless mode should be part of a different, process-wide inter
72 bool HeadlessMode() { return m_noGui; }
73
74 void SetStartPath(const SystemPath &startPath);
75
76 // Returns a pointer to the async JobSet for the current startup loading step.
77 // The current load step will not complete until all ordered jobs have finished.
78 // NOTE: this queue runs on a different thread.
80
81 // Returns a pointer to the async JobSet for the entire startup loading screen.
82 // Loading will not finish until all ordered jobs have finished.
83 // NOTE: this queue runs on a different thread.
85
86 protected:
87 // for compatibility, while we're moving Pi's internals into App
88 friend class Pi;
89
90 // Pi-internal lifecycle classes
91 friend class MainMenu;
92 friend class GameLoop;
93 friend class TombstoneLoop;
94
95 App() :
96 GuiApplication("Pioneer") {}
97
98 void OnStartup() override;
99 void OnShutdown() override;
100
101 void PreUpdate() override;
102 void PostUpdate() override;
103
104 void RunJobs();
105
106 void HandleRequests();
107
108 private:
109 // msgs/requests that can be posted which the game processes at the end of a game loop in HandleRequests
110 enum class InternalRequests {
111 END_GAME = 0,
112 QUIT_GAME,
113 DETAIL_LEVEL_CHANGED // FIXME: right idea, wrong place
114 };
115
116 std::vector<InternalRequests> internalRequests;
117
118 bool m_noGui;
119
121 RefCountedPtr<Lifecycle> m_mainMenu;
122 RefCountedPtr<Lifecycle> m_gameLoop;
123 };
124
125public:
126 static void Init(const std::map<std::string, std::string> &options, bool no_gui = false);
127 static void Uninit();
128
129 static void StartGame(Game *game);
130
131 static void RequestEndGame(); // request that the game is ended as soon as safely possible
132 static void RequestQuit();
133
134 static void OnChangeDetailLevel();
135 static float GetFrameTime() { return frameTime; }
136 static float GetGameTickAlpha() { return gameTickAlpha; }
137 // for internal use, don't modify unless you know what you're doing
138 static void SetGameTickAlpha(float alpha) { gameTickAlpha = alpha; }
139
140 static void SetShowDebugInfo(bool enabled) { showDebugInfo = enabled; };
142
143 // FIXME: hacked-in singleton pattern, find a better way to locate the application
144 static App *GetApp() { return m_instance; }
145
146 static bool IsNavTunnelDisplayed() { return navTunnelDisplayed; }
147 static void SetNavTunnelDisplayed(bool state) { navTunnelDisplayed = state; }
148 static bool AreSpeedLinesDisplayed() { return speedLinesDisplayed; }
149 static void SetSpeedLinesDisplayed(bool state) { speedLinesDisplayed = state; }
150 static bool AreHudTrailsDisplayed() { return hudTrailsDisplayed; }
151 static void SetHudTrailsDisplayed(bool state) { hudTrailsDisplayed = state; }
152
153 static std::string GetSaveDir();
154 static SceneGraph::Model *FindModel(const std::string &, bool allowPlaceholder = true);
155
156 static const char SAVE_DIR_NAME[];
157
160
162
163#if ENABLE_SERVER_AGENT
164 static ServerAgent *serverAgent;
165#endif
166
168
169 static Random rng;
170 static int statSceneTris;
171 static int statNumPatches;
172
173 static void SetView(View *v);
174 static View *GetView() { return currentView; }
175
176 static void SetAmountBackgroundStars(const float pc)
177 {
178 amountOfBackgroundStarsDisplayed = Clamp(pc, 0.0f, 1.0f);
179 bRefreshBackgroundStars = true;
180 }
181 static float GetAmountBackgroundStars() { return amountOfBackgroundStarsDisplayed; }
182 static void SetStarFieldStarSizeFactor(const float pc)
183 {
184 starFieldStarSizeFactor = Clamp(pc, 0.0f, 1.0f);
185 bRefreshBackgroundStars = true;
186 }
187 static float GetStarFieldStarSizeFactor() { return starFieldStarSizeFactor; }
189 {
190 const bool bRet = bRefreshBackgroundStars;
191 bRefreshBackgroundStars = false;
192 return bRet;
193 }
194
195 /* Only use #if WITH_DEVKEYS */
196 static bool showDebugInfo;
197
199 static Player *player;
201 static std::unique_ptr<LuaConsole> luaConsole;
202 static Sound::MusicPlayer &GetMusicPlayer() { return musicPlayer; }
205 static Intro *intro;
206 static SDLGraphics *sdl;
207
208 static Game *game;
209
212
215
216 static bool DrawGUI;
217
218private:
219 static void HandleKeyDown(SDL_Keysym *key);
220
221 // private members
222
223 static bool menuDone;
224
225 static View *currentView;
226
231 static float gameTickAlpha;
232 static float frameTime;
233
234 static Sound::MusicPlayer musicPlayer;
235
236 static bool navTunnelDisplayed;
237 static bool speedLinesDisplayed;
238 static bool hudTrailsDisplayed;
239 static bool bRefreshBackgroundStars;
240 static float amountOfBackgroundStarsDisplayed;
241 static float starFieldStarSizeFactor;
242
243 static bool isRecordingVideo;
244 static FILE *ffmpegFile;
245
246private:
247 // for compatibility, while we're moving Pi's internals into App
248 friend class App;
249
250 static App *m_instance;
251};
252
253#endif /* _PI_H */
const T & Clamp(const T &x, const T &min, const T &max)
Definition: MathUtil.h:15
JobQueue * GetSyncJobQueue()
Definition: Application.cpp:88
JobQueue * GetAsyncJobQueue()
Definition: Application.cpp:93
Definition: Pi.h:56
int cities
Definition: Pi.h:62
int planets
Definition: Pi.h:61
DetailLevel()
Definition: Pi.h:58
Definition: GameConfig.h:9
Definition: Pi.cpp:202
Definition: Game.h:38
Definition: Renderer.h:45
Definition: GuiApplication.h:27
Definition: Input.h:124
Definition: Intro.h:12
Definition: JobQueue.h:108
Definition: JobQueue.h:157
Definition: LuaConsole.h:16
Definition: LuaNameGen.h:14
Definition: LuaSerializer.h:14
Definition: LuaTimer.h:13
Definition: Pi.cpp:183
Definition: ModelCache.h:21
Definition: ObjectViewerView.h:13
Definition: PiGui.h:140
Definition: Pi.h:69
bool HeadlessMode()
Definition: Pi.h:72
App()
Definition: Pi.h:95
void OnShutdown() override
Definition: Pi.cpp:411
void HandleRequests()
Definition: Pi.cpp:823
void RunJobs()
JobSet * GetAsyncStartupQueue() const
Definition: Pi.cpp:479
void SetStartPath(const SystemPath &startPath)
Definition: Pi.cpp:269
JobSet * GetCurrentLoadStepQueue() const
Definition: Pi.cpp:484
void PreUpdate() override
Definition: Pi.cpp:857
void PostUpdate() override
Definition: Pi.cpp:863
void OnStartup() override
Definition: Pi.cpp:313
Definition: Pi.h:65
static bool showDebugInfo
Definition: Pi.h:196
static LuaNameGen * luaNameGen
Definition: Pi.h:161
static void SetAmountBackgroundStars(const float pc)
Definition: Pi.h:176
static void RequestEndGame()
Definition: Pi.cpp:1209
Pi()=delete
static void StartGame(Game *game)
Definition: Pi.cpp:720
static bool DrawGUI
Definition: Pi.h:216
static GameConfig * config
Definition: Pi.h:211
static std::string GetSaveDir()
Definition: Pi.cpp:1203
static ModelCache * modelCache
Definition: Pi.h:204
static bool AreHudTrailsDisplayed()
Definition: Pi.h:150
static JobQueue * GetAsyncJobQueue()
Definition: Pi.h:213
static void RequestQuit()
Definition: Pi.cpp:1214
static bool AreSpeedLinesDisplayed()
Definition: Pi.h:148
static int statNumPatches
Definition: Pi.h:171
static Graphics::Renderer * renderer
Definition: Pi.h:203
static SDLGraphics * sdl
Definition: Pi.h:206
static float GetGameTickAlpha()
Definition: Pi.h:136
static void SetHudTrailsDisplayed(bool state)
Definition: Pi.h:151
static Random rng
Definition: Pi.h:169
static void SetShowDebugInfo(bool enabled)
Definition: Pi.h:140
static void Uninit()
Definition: Pi.cpp:464
static Input::Manager * input
Definition: Pi.h:198
static Game * game
Definition: Pi.h:208
static void SetNavTunnelDisplayed(bool state)
Definition: Pi.h:147
static void SetSpeedLinesDisplayed(bool state)
Definition: Pi.h:149
static const char SAVE_DIR_NAME[]
Definition: Pi.h:156
static void OnChangeDetailLevel()
Definition: Pi.cpp:1231
static float GetFrameTime()
Definition: Pi.h:135
static Player * player
Definition: Pi.h:199
static LuaSerializer * luaSerializer
Definition: Pi.h:158
static JobQueue * GetSyncJobQueue()
Definition: Pi.h:214
static bool IsNavTunnelDisplayed()
Definition: Pi.h:146
static float GetStarFieldStarSizeFactor()
Definition: Pi.h:187
static PiGui::Instance * pigui
Definition: Pi.h:167
static float GetAmountBackgroundStars()
Definition: Pi.h:181
static LuaTimer * luaTimer
Definition: Pi.h:159
static TransferPlanner * planner
Definition: Pi.h:200
static bool MustRefreshBackgroundClearFlag()
Definition: Pi.h:188
static Sound::MusicPlayer & GetMusicPlayer()
Definition: Pi.h:202
static void SetGameTickAlpha(float alpha)
Definition: Pi.h:138
static void Init(const std::map< std::string, std::string > &options, bool no_gui=false)
Definition: Pi.cpp:254
static std::unique_ptr< LuaConsole > luaConsole
Definition: Pi.h:201
static View * GetView()
Definition: Pi.h:174
static App * GetApp()
Definition: Pi.h:144
static DetailLevel detail
Definition: Pi.h:210
static void SetStarFieldStarSizeFactor(const float pc)
Definition: Pi.h:182
static Intro * intro
Definition: Pi.h:205
static void ToggleShowDebugInfo()
Definition: Pi.h:141
static int statSceneTris
Definition: Pi.h:170
static void SetView(View *v)
Definition: Pi.cpp:1223
static SceneGraph::Model * FindModel(const std::string &, bool allowPlaceholder=true)
Definition: Pi.cpp:1182
Definition: Player.h:16
Definition: Random.h:29
Definition: RefCounted.h:36
Definition: Model.h:87
Definition: SoundMusic.h:22
Definition: SystemPath.h:13
Definition: Pi.cpp:234
Definition: TransferPlanner.h:8
Definition: View.h:20
Definition: Background.h:14
Definition: GuiApplication.h:14
Definition: GuiApplication.h:18
Definition: CityOnPlanet.h:32
Definition: Pi.h:52