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