Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
game_internal.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include "game.h"
8
9#include <AnimatedMeshSceneNode.h>
10#include <optional>
11#include <vector>
12#include "camera.h"
13#include "client.h"
14#include "client/clientevent.h"
17#include "clientdynamicinfo.h"
18#include "clouds.h"
19#include "gui/touchcontrols.h"
20#include "irr_ptr.h"
22#include "log_internal.h"
23#include "sky.h"
24#include "util/pointedthing.h"
25
26/* DO NOT INCLUDE THIS FROM OUTSIDE GAME.CPP */
27
28class Game;
29class GameUI;
30class SoundMaker;
31class Server;
32class NodeMetadata;
33class ProfilerGraph;
34class EventManager;
35class GUIChatConsole;
37
38const static float object_hit_delay = 0.2;
39
40const static u16 bbox_debug_flag = scene::EDS_BBOX_ALL;
41
42/* The reason the following structs are not anonymous structs within the
43 * class is that they are not used by the majority of member functions and
44 * many functions that do require objects of thse types do not modify them
45 * (so they can be passed as a const qualified parameter)
46 */
47
80
85
86using PausedNodesList = std::vector<std::pair<irr_ptr<scene::AnimatedMeshSceneNode>, float>>;
87
88/* This is not intended to be a public class. If a public class becomes
89 * desirable then it may be better to create another 'wrapper' class that
90 * hides most of the stuff in this class (nothing in this class is required
91 * by any other file) but exposes the public methods/data only.
92 */
93class Game {
94public:
95 Game();
96 ~Game();
97
98 bool startup(volatile std::sig_atomic_t *kill,
100 RenderingEngine *rendering_engine,
101 const GameStartData &game_params,
102 std::string &error_message,
103 bool *reconnect,
105
106 void run();
107 void shutdown();
108
109 Client *getClient() { return client; }
110
111 // Pre-calculated value
113
114protected:
115
116 // Basic initialisation
117 bool init(const std::string &map_dir, const std::string &address,
118 u16 port, const SubgameSpec &gamespec);
119 bool initSound();
120 bool createServer(const std::string &map_dir,
121 const SubgameSpec &gamespec, u16 port);
123
124 // Client creation
125 bool createClient(const GameStartData &start_data);
126 bool initGui();
127
128 // Client connection
129 bool connectToServer(const GameStartData &start_data,
130 bool *connect_ok, bool *aborted);
131 bool getServerContent(bool *aborted);
132
133 // Main loop
134
135 void updateInteractTimers(f32 dtime);
136 bool checkConnection();
137 void processQueues();
138 void updateProfilers(const RunStats &stats, const FpsControl &draw_times, f32 dtime);
139 void updateDebugState();
140 void updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime);
142
143 // Input related
144 void processUserInput(f32 dtime);
145 void processKeyInput();
146 void processItemSelection(u16 *new_playeritem);
148
149 void dropSelectedItem(bool single_item = false);
150 void openConsole(float scale, const wchar_t *line=NULL);
151 void toggleFreeMove();
152 void toggleFreeMoveAlt();
153 void togglePitchMove();
154 void toggleFast();
155 void toggleNoClip();
156 void toggleCinematic();
157 void toggleBlockBounds();
158 void toggleAutoforward();
159
160 void toggleMinimap(bool shift_pressed);
161 void toggleFog();
162 void toggleDebug();
163 void toggleUpdateCamera();
164
165 void increaseViewRange();
166 void decreaseViewRange();
167 void toggleFullViewRange();
168 void checkZoomEnabled();
169
170 void updateCameraDirection(CameraOrientation *cam, float dtime);
171 void updateCameraOrientation(CameraOrientation *cam, float dtime);
172 bool getTogglableKeyState(GameKeyType key, bool toggling_enabled, bool prev_key_state);
173 void updatePlayerControl(const CameraOrientation &cam);
174 void updatePauseState();
175 void step(f32 dtime);
177 void updateCameraMode(); // call after changing it
178 void updateCameraOffset();
179 void updateCamera(f32 dtime);
180 void updateSound(f32 dtime);
181 void processPlayerInteraction(f32 dtime, bool show_hud);
197 const core::line3d<f32> &shootline, bool liquids_pointable,
198 const std::optional<Pointabilities> &pointabilities,
199 bool look_for_object, const v3s16 &camera_offset);
200 void handlePointingAtNothing(const ItemStack &playerItem);
201 void handlePointingAtNode(const PointedThing &pointed,
202 const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime);
203 void handlePointingAtObject(const PointedThing &pointed, const ItemStack &playeritem,
204 const ItemStack &hand_item, const v3f &player_position, bool show_debug);
205 void handleDigging(const PointedThing &pointed, const v3s16 &nodepos,
206 const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime);
207 void updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
208 const CameraOrientation &cam);
209 void updateClouds(float dtime);
210 void updateShadows();
211 void drawScene(ProfilerGraph *graph, RunStats *stats);
212
213 // Misc
214 void showOverlayMessage(const char *msg, float dtime, int percent,
215 float *indef_pos = nullptr);
216
217 inline bool fogEnabled()
218 {
219 // Client setting only takes effect if fog distance unlimited or debug priv
220 if (sky->getFogDistance() < 0 || client->checkPrivilege("debug"))
221 return m_cache_enable_fog;
222 return true;
223 }
224
225 static void settingChangedCallback(const std::string &setting_name, void *data);
226 void readSettings();
227
228 inline bool isKeyDown(GameKeyType k)
229 {
230 return input->isKeyDown(k);
231 }
232 inline bool wasKeyDown(GameKeyType k)
233 {
234 return input->wasKeyDown(k);
235 }
237 {
238 return input->wasKeyPressed(k);
239 }
241 {
242 return input->wasKeyReleased(k);
243 }
244
245#ifdef __ANDROID__
246 void handleAndroidChatInput();
247#endif
248
249private:
250 struct Flags {
253 int debug_state = 0;
254 };
255
256 void pauseAnimation();
257 void resumeAnimation();
258
259 // ClientEvent handlers
268 CameraOrientation *cam);
277 CameraOrientation *cam);
280
281 void updateChat(f32 dtime);
282
283 bool nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item,
284 const v3s16 &nodepos, const v3s16 &neighborpos, const PointedThing &pointed,
285 const NodeMetadata *meta);
287
288 f32 getSensitivityScaleFactor() const;
289
290 InputHandler *input = nullptr;
291
292 Client *client = nullptr;
293 Server *server = nullptr;
294
297
300
301 // When created, these will be filled with data received from the server
304 std::unique_ptr<ItemVisualsManager> m_item_visuals_manager;
305
306 std::unique_ptr<ISoundManager> sound_manager;
307 std::unique_ptr<SoundMaker> soundmaker;
308
311
314
315 std::unique_ptr<GameUI> m_game_ui;
316 irr_ptr<GUIChatConsole> gui_chat_console;
318 Camera *camera = nullptr;
319 irr_ptr<Clouds> clouds;
320 irr_ptr<Sky> sky;
321 Hud *hud = nullptr;
322 Minimap *mapper = nullptr;
324
325 // Map server hud ids to client hud ids
326 std::unordered_map<u32, u32> m_hud_server_to_client;
327
330
331 /* 'cache'
332 This class does take ownership/responsibily for cleaning up etc of any of
333 these items (e.g. device)
334 */
335 IrrlichtDevice *device;
337 video::IVideoDriver *driver;
338 scene::ISceneManager *smgr;
339 volatile std::sig_atomic_t *kill;
340 std::string *error_message;
343
345 /* End 'cache' */
346
348
349 /*
350 * TODO: Local caching of settings is not optimal and should at some stage
351 * be updated to use a global settings object for getting thse values
352 * (as opposed to the this local caching). This can be addressed in
353 * a later release.
354 */
367
371
374 bool m_game_focused = false;
375
377
378 // if true, (almost) the whole game is paused
379 // this happens in pause menu in singleplayer
380 bool m_is_paused = false;
381
383 bool isTouchShootlineUsed() const;
384#ifdef __ANDROID__
385 bool m_android_chat_open;
386#endif
387
389};
Definition camera.h:61
Definition log_internal.h:141
Definition chat.h:270
Definition clientobject.h:27
Definition client.h:106
Definition event_manager.h:12
Definition guiChatConsole.h:16
Definition gameui.h:28
Definition game_internal.h:93
void updateDebugState()
Definition game.cpp:1219
void updateChat(f32 dtime)
Definition game.cpp:2483
void toggleFast()
Definition game.cpp:1659
bool wasKeyReleased(GameKeyType k)
Definition game_internal.h:240
InputHandler * input
Definition game_internal.h:290
bool isTouchShootlineUsed() const
Definition game.cpp:1962
f32 m_repeat_place_time
Definition game_internal.h:364
PointedThing updatePointedThing(const core::line3d< f32 > &shootline, bool liquids_pointable, const std::optional< Pointabilities > &pointabilities, bool look_for_object, const v3s16 &camera_offset)
Definition game.cpp:2788
void handleClientEvent_CloudParams(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2455
void handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2241
void pauseAnimation()
Definition game.cpp:2123
void processPlayerInteraction(f32 dtime, bool show_hud)
Definition game.cpp:2625
void run()
Definition game.cpp:477
IntervalLimiter profiler_interval
Definition game_internal.h:347
void decreaseViewRange()
Definition game.cpp:1864
void handleClientEvent_ShowCSMFormSpec(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2216
void handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2163
void handleClientEvent_UpdateCamera(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2466
bool m_game_focused
Definition game_internal.h:374
int crack_animation_length
Definition game_internal.h:112
bool getServerContent(bool *aborted)
Definition game.cpp:1093
Hud * hud
Definition game_internal.h:321
bool m_cache_enable_noclip
Definition game_internal.h:360
void updateProfilerGraphs(ProfilerGraph *graph)
Definition game.cpp:3553
bool isKeyDown(GameKeyType k)
Definition game_internal.h:228
void updateCameraOffset()
Definition game.cpp:2569
bool m_invert_mouse
Definition game_internal.h:368
bool createServer(const std::string &map_dir, const SubgameSpec &gamespec, u16 port)
Definition game.cpp:731
bool wasKeyPressed(GameKeyType k)
Definition game_internal.h:236
bool connectToServer(const GameStartData &start_data, bool *connect_ok, bool *aborted)
Definition game.cpp:945
MapDrawControl * draw_control
Definition game_internal.h:317
ChatBackend * chat_backend
Definition game_internal.h:309
void toggleUpdateCamera()
Definition game.cpp:1831
void processClientEvents(CameraOrientation *cam)
Definition game.cpp:2473
void toggleCinematic()
Definition game.cpp:1695
GameRunData runData
Definition game_internal.h:328
void updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime)
Definition game.cpp:1286
bool shouldShowTouchControls()
Definition game.cpp:914
Minimap * mapper
Definition game_internal.h:322
void updateSound(f32 dtime)
Definition game.cpp:2602
IWritableTextureSource * texture_src
Definition game_internal.h:298
IrrlichtDevice * device
Definition game_internal.h:335
Flags m_flags
Definition game_internal.h:329
bool simple_singleplayer_mode
Definition game_internal.h:344
bool m_first_loop_after_window_activation
Definition game_internal.h:372
void handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2346
EventManager * eventmgr
Definition game_internal.h:312
irr_ptr< Clouds > clouds
Definition game_internal.h:319
bool getTogglableKeyState(GameKeyType key, bool toggling_enabled, bool prev_key_state)
Definition game.cpp:2003
void toggleNoClip()
Definition game.cpp:1679
bool m_cache_enable_free_move
Definition game_internal.h:361
bool m_does_lost_focus_pause_game
Definition game_internal.h:376
void handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2436
void handleClientEvent_DeathscreenLegacy(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2197
void handleClientEvent_OverrideDayNightRatio(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2447
void increaseViewRange()
Definition game.cpp:1842
IWritableShaderSource * shader_src
Definition game_internal.h:299
void handleDigging(const PointedThing &pointed, const v3s16 &nodepos, const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime)
Definition game.cpp:3224
void updateCameraOrientation(CameraOrientation *cam, float dtime)
Definition game.cpp:1968
bool checkConnection()
Definition game.cpp:1201
void updatePlayerControl(const CameraOrientation &cam)
Definition game.cpp:2012
void handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2202
irr_ptr< GUIChatConsole > gui_chat_console
Definition game_internal.h:316
f32 getSensitivityScaleFactor() const
Definition game.cpp:1952
bool startup(volatile std::sig_atomic_t *kill, InputHandler *input, RenderingEngine *rendering_engine, const GameStartData &game_params, std::string &error_message, bool *reconnect, ChatBackend *chat_backend)
Definition game.cpp:422
void processKeyInput()
Definition game.cpp:1401
bool nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighborpos, const PointedThing &pointed, const NodeMetadata *meta)
Definition game.cpp:2951
void toggleAutoforward()
Definition game.cpp:1730
PausedNodesList paused_animated_nodes
Definition game_internal.h:342
f32 m_cache_cam_smoothing
Definition game_internal.h:366
void handleClientEvent_SetSun(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2416
void togglePitchMove()
Definition game.cpp:1646
GameFormSpec m_game_formspec
Definition game_internal.h:323
float dynamic_info_send_timer
Definition game_internal.h:296
void readSettings()
Definition game.cpp:3685
std::unique_ptr< SoundMaker > soundmaker
Definition game_internal.h:307
CaptureLogOutput m_chat_log_buf
Definition game_internal.h:310
bool m_cache_enable_joysticks
Definition game_internal.h:358
void updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, const CameraOrientation &cam)
Definition game.cpp:3354
bool initGui()
Definition game.cpp:925
f32 m_repeat_dig_time
Definition game_internal.h:365
ClientDynamicInfo client_display_info
Definition game_internal.h:295
irr_ptr< Sky > sky
Definition game_internal.h:320
QuicktuneShortcutter * quicktune
Definition game_internal.h:313
bool fogEnabled()
Definition game_internal.h:217
video::IVideoDriver * driver
Definition game_internal.h:337
void toggleMinimap(bool shift_pressed)
Definition game.cpp:1741
std::unordered_map< u32, u32 > m_hud_server_to_client
Definition game_internal.h:326
void processItemSelection(u16 *new_playeritem)
Definition game.cpp:1514
RenderingEngine * m_rendering_engine
Definition game_internal.h:336
bool m_invert_hotbar_mouse_wheel
Definition game_internal.h:370
bool createClient(const GameStartData &start_data)
Definition game.cpp:814
void handlePointingAtNothing(const ItemStack &playerItem)
Definition game.cpp:2886
void copyServerClientCache()
Definition game.cpp:794
bool m_is_paused
Definition game_internal.h:380
void handleClientEvent_PlayerForceMove(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2191
void processQueues()
Definition game.cpp:1213
void handlePointingAtNode(const PointedThing &pointed, const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime)
Definition game.cpp:2895
NodeDefManager * nodedef_manager
Definition game_internal.h:303
void handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2274
bool wasKeyDown(GameKeyType k)
Definition game_internal.h:232
std::string * error_message
Definition game_internal.h:340
bool m_cache_enable_fog
Definition game_internal.h:359
void handlePointingAtObject(const PointedThing &pointed, const ItemStack &playeritem, const ItemStack &hand_item, const v3f &player_position, bool show_debug)
Definition game.cpp:3171
void updateInteractTimers(f32 dtime)
Definition game.cpp:1187
void toggleFreeMoveAlt()
Definition game.cpp:1630
void toggleDebug()
Definition game.cpp:1784
std::unique_ptr< ISoundManager > sound_manager
Definition game_internal.h:306
void updateProfilers(const RunStats &stats, const FpsControl &draw_times, f32 dtime)
Definition game.cpp:1247
static void settingChangedCallback(const std::string &setting_name, void *data)
Definition game.cpp:3680
bool init(const std::string &map_dir, const std::string &address, u16 port, const SubgameSpec &gamespec)
Definition game.cpp:670
void showOverlayMessage(const char *msg, float dtime, int percent, float *indef_pos=nullptr)
Definition game.cpp:3674
void handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2287
static const ClientEventHandler clientEventHandler[CLIENTEVENT_MAX]
Definition game_internal.h:2135
void updatePauseState()
Definition game.cpp:2064
void handleClientEvent_None(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2158
void handleClientEvent_SetMoon(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2427
void toggleBlockBounds()
Definition game.cpp:1706
void checkZoomEnabled()
Definition game.cpp:1901
bool m_camera_offset_changed
Definition game_internal.h:373
bool m_cache_toggle_sneak_key
Definition game_internal.h:356
IWritableItemDefManager * itemdef_manager
Definition game_internal.h:302
bool m_cache_toggle_aux1_key
Definition game_internal.h:357
bool initSound()
Definition game.cpp:706
void updateClouds(float dtime)
Definition game.cpp:3525
Client * getClient()
Definition game_internal.h:109
void toggleFullViewRange()
Definition game.cpp:1886
void step(f32 dtime)
Definition game.cpp:2079
void updateCameraMode()
Definition game.cpp:2553
void resumeAnimation()
Definition game.cpp:2128
void handleClientEvent_ShowPauseMenuFormSpec(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2225
Camera * camera
Definition game_internal.h:318
Game()
Definition game.cpp:376
void handleClientEvent_HandleParticleEvent(ClientEvent *event, CameraOrientation *cam)
Definition game.cpp:2234
volatile std::sig_atomic_t * kill
Definition game_internal.h:339
void toggleFog()
Definition game.cpp:1770
bool m_touch_simulate_aux1
Definition game_internal.h:382
void dropSelectedItem(bool single_item=false)
Definition game.cpp:1566
f32 m_cache_mouse_sensitivity
Definition game_internal.h:362
bool m_cache_doubletap_jump
Definition game_internal.h:355
~Game()
Definition game.cpp:396
float m_shutdown_progress
Definition game_internal.h:388
void updateShadows()
Definition game.cpp:3563
void processUserInput(f32 dtime)
Definition game.cpp:1341
void updateCamera(f32 dtime)
Definition game.cpp:2524
scene::ISceneManager * smgr
Definition game_internal.h:338
std::unique_ptr< GameUI > m_game_ui
Definition game_internal.h:315
void shutdown()
Definition game.cpp:602
Client * client
Definition game_internal.h:292
f32 m_cache_joystick_frustum_sensitivity
Definition game_internal.h:363
void toggleFreeMove()
Definition game.cpp:1614
std::unique_ptr< ItemVisualsManager > m_item_visuals_manager
Definition game_internal.h:304
bool * reconnect_requested
Definition game_internal.h:341
void openConsole(float scale, const wchar_t *line=NULL)
Definition game.cpp:1576
bool m_enable_hotbar_mouse_wheel
Definition game_internal.h:369
void updateCameraDirection(CameraOrientation *cam, float dtime)
Definition game.cpp:1908
void drawScene(ProfilerGraph *graph, RunStats *stats)
Definition game.cpp:3590
Definition hud.h:35
Definition itemdef.h:165
Definition shader.h:293
Definition texturesource.h:120
Definition inputhandler.h:137
virtual bool isKeyDown(GameKeyType k)=0
virtual bool wasKeyPressed(GameKeyType k)=0
virtual bool wasKeyDown(GameKeyType k)=0
virtual bool wasKeyReleased(GameKeyType k)=0
Definition numeric.h:386
T
Definition keys.h:11
Definition minimap.h:118
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:509
Definition nodemetadata.h:25
Definition profilergraph.h:19
Definition quicktune_shortcutter.h:10
Definition renderingengine.h:64
Definition server.h:178
Definition sound_maker.h:35
@ CLIENTEVENT_MAX
Definition clientevent.h:40
static const float object_hit_delay
Definition game_internal.h:38
std::vector< std::pair< irr_ptr< scene::AnimatedMeshSceneNode >, float > > PausedNodesList
Definition game_internal.h:86
static const u16 bbox_debug_flag
Definition game_internal.h:40
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
Definition activeobjectmgr.cpp:11
Definition activeobjectmgr.cpp:11
Definition game.h:31
Definition clientdynamicinfo.h:12
Definition game_internal.h:82
void(Game::* handler)(ClientEvent *, CameraOrientation *)
Definition game_internal.h:83
Definition clientevent.h:69
Definition renderingengine.h:40
Definition game_formspec.h:25
Definition game_internal.h:48
ClientActiveObject * selected_object
Definition game_internal.h:64
bool btn_down_for_dig
Definition game_internal.h:54
bool digging_blocked
Definition game_internal.h:56
PointedThing pointed_old
Definition game_internal.h:51
u16 new_playeritem
Definition game_internal.h:50
v3f update_draw_list_last_cam_dir
Definition game_internal.h:76
bool dig_instantly
Definition game_internal.h:55
bool punching
Definition game_internal.h:53
float repeat_place_timer
Definition game_internal.h:61
float jump_timer_down
Definition game_internal.h:67
float damage_flash
Definition game_internal.h:70
float nodig_delay_timer
Definition game_internal.h:58
float jump_timer_down_before
Definition game_internal.h:68
float object_hit_delay_timer
Definition game_internal.h:62
float update_draw_list_timer
Definition game_internal.h:71
float jump_timer_up
Definition game_internal.h:66
f32 fog_range
Definition game_internal.h:74
float touch_blocks_timer
Definition game_internal.h:72
float dig_time
Definition game_internal.h:59
u16 dig_index
Definition game_internal.h:49
bool digging
Definition game_internal.h:52
float time_of_day_smooth
Definition game_internal.h:78
float dig_time_complete
Definition game_internal.h:60
float time_from_last_punch
Definition game_internal.h:63
bool reset_jump_timer
Definition game_internal.h:57
Definition gameparams.h:30
Definition game_internal.h:250
bool disable_camera_update
Definition game_internal.h:251
int debug_state
0 = no debug text active, see toggleDebug() for the rest
Definition game_internal.h:253
Definition itemdef.h:83
Definition inventory.h:21
Definition clientmap.h:14
An active object or node which is selected by a ray on the map.
Definition pointedthing.h:22
Definition game.h:25
Definition subgames.h:14