diff options
Diffstat (limited to 'src/client/game.cpp')
-rw-r--r-- | src/client/game.cpp | 1398 |
1 files changed, 706 insertions, 692 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp index e56101436..479484ae9 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/clientevent.h" #include "client/gameui.h" #include "client/inputhandler.h" -#include "client/tile.h" // For TextureSource +#include "client/tile.h" // For TextureSource #include "client/keys.h" #include "client/joystick_controller.h" #include "clientmap.h" @@ -52,7 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gui/profilergraph.h" #include "mapblock.h" #include "minimap.h" -#include "nodedef.h" // Needed for determining pointing to nodes +#include "nodedef.h" // Needed for determining pointing to nodes #include "nodemetadata.h" #include "particles.h" #include "porting.h" @@ -73,49 +73,60 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "hud.h" #if USE_SOUND -#include "client/sound_openal.h" + #include "client/sound_openal.h" #else -#include "client/sound.h" + #include "client/sound.h" #endif -Game::Game() : m_chat_log_buf(g_logger), m_game_ui(new GameUI()) -{ - g_settings->registerChangedCallback( - "doubletap_jump", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "enable_clouds", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "doubletap_joysticks", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "enable_particles", &settingChangedCallback, this); - g_settings->registerChangedCallback("enable_fog", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "mouse_sensitivity", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "joystick_frustum_sensitivity", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "repeat_rightclick_time", &settingChangedCallback, this); - g_settings->registerChangedCallback("noclip", &settingChangedCallback, this); - g_settings->registerChangedCallback("free_move", &settingChangedCallback, this); - g_settings->registerChangedCallback("cinematic", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "cinematic_camera_smoothing", &settingChangedCallback, this); - g_settings->registerChangedCallback( - "camera_smoothing", &settingChangedCallback, this); - g_settings->registerChangedCallback("freecam", &freecamChangedCallback, this); - g_settings->registerChangedCallback("xray", &updateAllMapBlocksCallback, this); - g_settings->registerChangedCallback( - "xray_nodes", &updateAllMapBlocksCallback, this); - g_settings->registerChangedCallback( - "fullbright", &updateAllMapBlocksCallback, this); - +Game::Game() : + m_chat_log_buf(g_logger), + m_game_ui(new GameUI()) +{ + g_settings->registerChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->registerChangedCallback("doubletap_joysticks", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->registerChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->registerChangedCallback("joystick_frustum_sensitivity", + &settingChangedCallback, this); + g_settings->registerChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); + g_settings->registerChangedCallback("noclip", + &settingChangedCallback, this); + g_settings->registerChangedCallback("free_move", + &settingChangedCallback, this); + g_settings->registerChangedCallback("cinematic", + &settingChangedCallback, this); + g_settings->registerChangedCallback("cinematic_camera_smoothing", + &settingChangedCallback, this); + g_settings->registerChangedCallback("camera_smoothing", + &settingChangedCallback, this); + g_settings->registerChangedCallback("freecam", + &freecamChangedCallback, this); + g_settings->registerChangedCallback("xray", + &updateAllMapBlocksCallback, this); + g_settings->registerChangedCallback("xray_nodes", + &updateAllMapBlocksCallback, this); + g_settings->registerChangedCallback("fullbright", + &updateAllMapBlocksCallback, this); + readSettings(); #ifdef __ANDROID__ - m_cache_hold_aux1 = false; // This is initialised properly later + m_cache_hold_aux1 = false; // This is initialised properly later #endif + } + + /**************************************************************************** MinetestApp Public ****************************************************************************/ @@ -141,44 +152,53 @@ Game::~Game() extendedResourceCleanup(); - g_settings->deregisterChangedCallback( - "doubletap_jump", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "enable_clouds", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "enable_particles", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "enable_fog", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "mouse_sensitivity", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "repeat_rightclick_time", &settingChangedCallback, this); - g_settings->deregisterChangedCallback("noclip", &settingChangedCallback, this); - g_settings->deregisterChangedCallback("free_move", &settingChangedCallback, this); - g_settings->deregisterChangedCallback("cinematic", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "cinematic_camera_smoothing", &settingChangedCallback, this); - g_settings->deregisterChangedCallback( - "camera_smoothing", &settingChangedCallback, this); - g_settings->deregisterChangedCallback("freecam", &freecamChangedCallback, this); - g_settings->deregisterChangedCallback("xray", &updateAllMapBlocksCallback, this); - g_settings->deregisterChangedCallback( - "xray_nodes", &updateAllMapBlocksCallback, this); - g_settings->deregisterChangedCallback( - "fullbright", &updateAllMapBlocksCallback, this); -} - -bool Game::startup(bool *kill, InputHandler *input, const GameStartData &start_data, - std::string &error_message, bool *reconnect, ChatBackend *chat_backend) + g_settings->deregisterChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("noclip", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("free_move", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("cinematic", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("cinematic_camera_smoothing", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("camera_smoothing", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("freecam", + &freecamChangedCallback, this); + g_settings->deregisterChangedCallback("xray", + &updateAllMapBlocksCallback, this); + g_settings->deregisterChangedCallback("xray_nodes", + &updateAllMapBlocksCallback, this); + g_settings->deregisterChangedCallback("fullbright", + &updateAllMapBlocksCallback, this); +} + +bool Game::startup(bool *kill, + InputHandler *input, + const GameStartData &start_data, + std::string &error_message, + bool *reconnect, + ChatBackend *chat_backend) { // "cache" - this->device = RenderingEngine::get_raw_device(); - this->kill = kill; - this->error_message = &error_message; + this->device = RenderingEngine::get_raw_device(); + this->kill = kill; + this->error_message = &error_message; this->reconnect_requested = reconnect; - this->input = input; - this->chat_backend = chat_backend; + this->input = input; + this->chat_backend = chat_backend; this->simple_singleplayer_mode = start_data.isSinglePlayer(); input->keycache.populate(); @@ -186,8 +206,8 @@ bool Game::startup(bool *kill, InputHandler *input, const GameStartData &start_d driver = device->getVideoDriver(); smgr = RenderingEngine::get_scene_manager(); - RenderingEngine::get_scene_manager()->getParameters()->setAttribute( - scene::OBJ_LOADER_IGNORE_MATERIAL_FILES, true); + RenderingEngine::get_scene_manager()->getParameters()-> + setAttribute(scene::OBJ_LOADER_IGNORE_MATERIAL_FILES, true); // Reinit runData runData = GameRunData(); @@ -201,8 +221,8 @@ bool Game::startup(bool *kill, InputHandler *input, const GameStartData &start_d g_client_translations->clear(); // address can change if simple_singleplayer_mode - if (!init(start_data.world_spec.path, start_data.address, start_data.socket_port, - start_data.game_spec)) + if (!init(start_data.world_spec.path, start_data.address, + start_data.socket_port, start_data.game_spec)) return false; if (!createClient(start_data)) @@ -213,13 +233,14 @@ bool Game::startup(bool *kill, InputHandler *input, const GameStartData &start_d return true; } + void Game::run() { ProfilerGraph graph; - RunStats stats = {0}; - FpsControl draw_times = {0}; + RunStats stats = { 0 }; + FpsControl draw_times = { 0 }; f32 dtime; // in seconds - + /* Clear the profiler */ Profiler::GraphValues dummyvalues; g_profiler->graphGet(dummyvalues); @@ -229,25 +250,24 @@ void Game::run() set_light_table(g_settings->getFloat("display_gamma")); #ifdef __ANDROID__ - m_cache_hold_aux1 = g_settings->getBool("fast_move") && - client->checkPrivilege("fast"); + m_cache_hold_aux1 = g_settings->getBool("fast_move") + && client->checkPrivilege("fast"); #endif - irr::core::dimension2d<u32> previous_screen_size( - g_settings->getU16("screen_w"), g_settings->getU16("screen_h")); + irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"), + g_settings->getU16("screen_h")); - while (RenderingEngine::run() && - !(*kill || g_gamecallback->shutdown_requested || - (server && server->isShutdownRequested()))) { + while (RenderingEngine::run() + && !(*kill || g_gamecallback->shutdown_requested + || (server && server->isShutdownRequested()))) { const irr::core::dimension2d<u32> ¤t_screen_size = - RenderingEngine::get_video_driver()->getScreenSize(); + RenderingEngine::get_video_driver()->getScreenSize(); // Verify if window size has changed and save it if it's the case // Ensure evaluating settings->getBool after verifying screensize // First condition is cheaper if (previous_screen_size != current_screen_size && - current_screen_size != - irr::core::dimension2d<u32>(0, 0) && + current_screen_size != irr::core::dimension2d<u32>(0,0) && g_settings->getBool("autosave_screensize")) { g_settings->setU16("screen_w", current_screen_size.Width); g_settings->setU16("screen_h", current_screen_size.Height); @@ -278,32 +298,30 @@ void Game::run() processUserInput(dtime); // Update camera before player movement to avoid camera lag of one frame updateCameraDirection(&cam_view_target, dtime); - cam_view.camera_yaw += - (cam_view_target.camera_yaw - cam_view.camera_yaw) * - m_cache_cam_smoothing; - cam_view.camera_pitch += - (cam_view_target.camera_pitch - cam_view.camera_pitch) * - m_cache_cam_smoothing; + cam_view.camera_yaw += (cam_view_target.camera_yaw - + cam_view.camera_yaw) * m_cache_cam_smoothing; + cam_view.camera_pitch += (cam_view_target.camera_pitch - + cam_view.camera_pitch) * m_cache_cam_smoothing; updatePlayerControl(cam_view); step(&dtime); processClientEvents(&cam_view_target); updateCamera(draw_times.busy_time, dtime); updateSound(dtime); processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud, - m_game_ui->m_flags.show_debug); + m_game_ui->m_flags.show_debug); updateFrame(&graph, &stats, dtime, cam_view); updateProfilerGraphs(&graph); // Update if minimap has been disabled by the server m_game_ui->m_flags.show_minimap &= client->shouldShowMinimap(); - if (m_does_lost_focus_pause_game && !device->isWindowFocused() && - !isMenuActive()) { + if (m_does_lost_focus_pause_game && !device->isWindowFocused() && !isMenuActive()) { showPauseMenu(); } } } + void Game::shutdown() { RenderingEngine::finalize(); @@ -358,13 +376,17 @@ void Game::shutdown() } } + /****************************************************************************/ /**************************************************************************** Startup ****************************************************************************/ /****************************************************************************/ -bool Game::init(const std::string &map_dir, const std::string &address, u16 port, +bool Game::init( + const std::string &map_dir, + const std::string &address, + u16 port, const SubgameSpec &gamespec) { texture_src = createTextureSource(); @@ -379,8 +401,8 @@ bool Game::init(const std::string &map_dir, const std::string &address, u16 port eventmgr = new EventManager(); quicktune = new QuicktuneShortcutter(); - if (!(texture_src && shader_src && itemdef_manager && nodedef_manager && - eventmgr && quicktune)) + if (!(texture_src && shader_src && itemdef_manager && nodedef_manager + && eventmgr && quicktune)) return false; if (!initSound()) @@ -400,8 +422,7 @@ bool Game::initSound() #if USE_SOUND if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) { infostream << "Attempting to use OpenAL audio" << std::endl; - sound = createOpenALSoundManager( - g_sound_manager_singleton.get(), &soundfetcher); + sound = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher); if (!sound) infostream << "Failed to initialize OpenAL audio" << std::endl; } else @@ -423,8 +444,8 @@ bool Game::initSound() return true; } -bool Game::createSingleplayerServer( - const std::string &map_dir, const SubgameSpec &gamespec, u16 port) +bool Game::createSingleplayerServer(const std::string &map_dir, + const SubgameSpec &gamespec, u16 port) { showOverlayMessage(N_("Creating server..."), 0, 5); @@ -432,7 +453,7 @@ bool Game::createSingleplayerServer( Address bind_addr(0, 0, 0, 0, port); if (g_settings->getBool("ipv6_server")) { - bind_addr.setAddress((IPv6AddressBytes *)NULL); + bind_addr.setAddress((IPv6AddressBytes *) NULL); } try { @@ -444,14 +465,14 @@ bool Game::createSingleplayerServer( } if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) { - *error_message = "Unable to listen on " + bind_addr.serializeString() + - " because IPv6 is disabled"; + *error_message = "Unable to listen on " + + bind_addr.serializeString() + + " because IPv6 is disabled"; errorstream << *error_message << std::endl; return false; } - server = new Server( - map_dir, gamespec, simple_singleplayer_mode, bind_addr, false); + server = new Server(map_dir, gamespec, simple_singleplayer_mode, bind_addr, false); server->start(); return true; @@ -493,9 +514,8 @@ bool Game::createClient(const GameStartData &start_data) return false; } - GameGlobalShaderConstantSetterFactory *scsf = - new GameGlobalShaderConstantSetterFactory(&m_flags.force_fog_off, - &runData.fog_range, client); + GameGlobalShaderConstantSetterFactory *scsf = new GameGlobalShaderConstantSetterFactory( + &m_flags.force_fog_off, &runData.fog_range, client); shader_src->addShaderConstantSetterFactory(scsf); // Update cached textures, meshes and materials @@ -523,7 +543,7 @@ bool Game::createClient(const GameStartData &start_data) */ sky = new Sky(-1, texture_src); scsf->setSky(sky); - skybox = NULL; // This is used/set later on in the main run loop + skybox = NULL; // This is used/set later on in the main run loop if (!sky) { *error_message = "Memory allocation error sky"; @@ -587,15 +607,15 @@ bool Game::initGui() chat_backend->applySettings(); // Chat backend and console - gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), -1, - chat_backend, client, &g_menumgr); + gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), + -1, chat_backend, client, &g_menumgr); if (!gui_chat_console) { *error_message = "Could not allocate memory for chat console"; errorstream << *error_message << std::endl; return false; } - + m_cheat_menu = new CheatMenu(client); if (!m_cheat_menu) { @@ -614,10 +634,10 @@ bool Game::initGui() return true; } -bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, - bool *connection_aborted) +bool Game::connectToServer(const GameStartData &start_data, + bool *connect_ok, bool *connection_aborted) { - *connect_ok = false; // Let's not be overly optimistic + *connect_ok = false; // Let's not be overly optimistic *connection_aborted = false; bool local_server_mode = false; @@ -629,7 +649,7 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, connect_address.Resolve(start_data.address.c_str()); if (connect_address.isZero()) { // i.e. INADDR_ANY, IN6ADDR_ANY - // connect_address.Resolve("localhost"); + //connect_address.Resolve("localhost"); if (connect_address.isIPv6()) { IPv6AddressBytes addr_bytes; addr_bytes.bytes[15] = 1; @@ -647,14 +667,15 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) { *error_message = "Unable to connect to " + - connect_address.serializeString() + - " because IPv6 is disabled"; + connect_address.serializeString() + + " because IPv6 is disabled"; errorstream << *error_message << std::endl; return false; } - client = new Client(start_data.name.c_str(), start_data.password, - start_data.address, *draw_control, texture_src, shader_src, + client = new Client(start_data.name.c_str(), + start_data.password, start_data.address, + *draw_control, texture_src, shader_src, itemdef_manager, nodedef_manager, sound, eventmgr, connect_address.isIPv6(), m_game_ui.get()); @@ -667,7 +688,8 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, connect_address.print(&infostream); infostream << std::endl; - client->connect(connect_address, simple_singleplayer_mode || local_server_mode); + client->connect(connect_address, + simple_singleplayer_mode || local_server_mode); /* Wait for server to accept connection @@ -676,7 +698,7 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, try { input->clear(); - FpsControl fps_control = {0}; + FpsControl fps_control = { 0 }; f32 dtime; f32 wait_time = 0; // in seconds @@ -703,8 +725,8 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, break; if (client->accessDenied()) { - *error_message = "Access denied. Reason: " + - client->accessDeniedReason(); + *error_message = "Access denied. Reason: " + + client->accessDeniedReason(); *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; break; @@ -719,22 +741,16 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, if (client->m_is_registration_confirmation_state) { if (registration_confirmation_shown) { // Keep drawing the GUI - RenderingEngine::draw_menu_scene( - guienv, dtime, true); + RenderingEngine::draw_menu_scene(guienv, dtime, true); } else { registration_confirmation_shown = true; - (new GUIConfirmRegistration(guienv, - guienv->getRootGUIElement(), -1, - &g_menumgr, client, - start_data.name, - start_data.password, - connection_aborted, texture_src)) - ->drop(); + (new GUIConfirmRegistration(guienv, guienv->getRootGUIElement(), -1, + &g_menumgr, client, start_data.name, start_data.password, + connection_aborted, texture_src))->drop(); } } else { wait_time += dtime; - // Only time out if we aren't waiting for the server we - // started + // Only time out if we aren't waiting for the server we started if (!start_data.isSinglePlayer() && wait_time > 10) { *error_message = "Connection timed out."; errorstream << *error_message << std::endl; @@ -742,8 +758,7 @@ bool Game::connectToServer(const GameStartData &start_data, bool *connect_ok, } // Update status - showOverlayMessage( - N_("Connecting to server..."), dtime, 20); + showOverlayMessage(N_("Connecting to server..."), dtime, 20); } } } catch (con::PeerNotFoundException &e) { @@ -759,7 +774,7 @@ bool Game::getServerContent(bool *aborted) { input->clear(); - FpsControl fps_control = {0}; + FpsControl fps_control = { 0 }; f32 dtime; // in seconds fps_control.last_time = RenderingEngine::get_timer_time(); @@ -802,26 +817,24 @@ bool Game::getServerContent(bool *aborted) if (!client->itemdefReceived()) { const wchar_t *text = wgettext("Item definitions..."); progress = 25; - RenderingEngine::draw_load_screen( - text, guienv, texture_src, dtime, progress); + RenderingEngine::draw_load_screen(text, guienv, texture_src, + dtime, progress); delete[] text; } else if (!client->nodedefReceived()) { const wchar_t *text = wgettext("Node definitions..."); progress = 30; - RenderingEngine::draw_load_screen( - text, guienv, texture_src, dtime, progress); + RenderingEngine::draw_load_screen(text, guienv, texture_src, + dtime, progress); delete[] text; } else { std::stringstream message; std::fixed(message); message.precision(0); - message << gettext("Media...") << " " - << (client->mediaReceiveProgress() * 100) << "%"; + message << gettext("Media...") << " " << (client->mediaReceiveProgress()*100) << "%"; message.precision(2); if ((USE_CURL == 0) || - (!g_settings->getBool( - "enable_remote_media_server"))) { + (!g_settings->getBool("enable_remote_media_server"))) { float cur = client->getCurRate(); std::string cur_unit = gettext("KiB/s"); @@ -834,14 +847,15 @@ bool Game::getServerContent(bool *aborted) } progress = 30 + client->mediaReceiveProgress() * 35 + 0.5; - RenderingEngine::draw_load_screen(utf8_to_wide(message.str()), - guienv, texture_src, dtime, progress); + RenderingEngine::draw_load_screen(utf8_to_wide(message.str()), guienv, + texture_src, dtime, progress); } } return true; } + /****************************************************************************/ /**************************************************************************** Run @@ -859,12 +873,14 @@ inline void Game::updateInteractTimers(f32 dtime) runData.time_from_last_punch += dtime; } + /* returns false if game should exit, otherwise true */ inline bool Game::checkConnection() { if (client->accessDenied()) { - *error_message = "Access denied. Reason: " + client->accessDeniedReason(); + *error_message = "Access denied. Reason: " + + client->accessDeniedReason(); *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; return false; @@ -873,6 +889,7 @@ inline bool Game::checkConnection() return true; } + /* returns false if game should exit, otherwise true */ inline bool Game::handleCallbacks() @@ -883,21 +900,20 @@ inline bool Game::handleCallbacks() } if (g_gamecallback->changepassword_requested) { - (new GUIPasswordChange( - guienv, guiroot, -1, &g_menumgr, client, texture_src)) - ->drop(); + (new GUIPasswordChange(guienv, guiroot, -1, + &g_menumgr, client, texture_src))->drop(); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { - (new GUIVolumeChange(guienv, guiroot, -1, &g_menumgr, texture_src)) - ->drop(); + (new GUIVolumeChange(guienv, guiroot, -1, + &g_menumgr, texture_src))->drop(); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { - (new GUIKeyChangeMenu(guienv, guiroot, -1, &g_menumgr, texture_src)) - ->drop(); + (new GUIKeyChangeMenu(guienv, guiroot, -1, + &g_menumgr, texture_src))->drop(); g_gamecallback->keyconfig_requested = false; } @@ -909,6 +925,7 @@ inline bool Game::handleCallbacks() return true; } + void Game::processQueues() { texture_src->processQueue(); @@ -916,9 +933,12 @@ void Game::processQueues() shader_src->processQueue(); } -void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times, f32 dtime) + +void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times, + f32 dtime) { - float profiler_print_interval = g_settings->getFloat("profiler_print_interval"); + float profiler_print_interval = + g_settings->getFloat("profiler_print_interval"); bool print_to_log = true; if (profiler_print_interval == 0) { @@ -937,14 +957,15 @@ void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times, } // Update update graphs - g_profiler->graphAdd( - "Time non-rendering [ms]", draw_times.busy_time - stats.drawtime); + g_profiler->graphAdd("Time non-rendering [ms]", + draw_times.busy_time - stats.drawtime); g_profiler->graphAdd("Sleep [ms]", draw_times.sleep_time); g_profiler->graphAdd("FPS", 1.0f / dtime); } -void Game::updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime) +void Game::updateStats(RunStats *stats, const FpsControl &draw_times, + f32 dtime) { f32 jitter; @@ -992,6 +1013,8 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime) } } + + /**************************************************************************** Input handling ****************************************************************************/ @@ -999,8 +1022,7 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime) void Game::processUserInput(f32 dtime) { // Reset input if window not active or some menu is active - if (!device->isWindowActive() || isMenuActive() || - guienv->hasFocus(gui_chat_console)) { + if (!device->isWindowActive() || isMenuActive() || guienv->hasFocus(gui_chat_console)) { input->clear(); #ifdef HAVE_TOUCHSCREENGUI g_touchscreengui->hide(); @@ -1037,6 +1059,7 @@ void Game::processUserInput(f32 dtime) processItemSelection(&runData.new_playeritem); } + void Game::processKeyInput() { if (wasKeyDown(KeyType::DROP)) { @@ -1065,11 +1088,9 @@ void Game::processKeyInput() if (client->modsLoaded()) openConsole(0.2, L"."); else - m_game_ui->showStatusText( - wgettext("Client side scripting is disabled")); + m_game_ui->showStatusText(wgettext("Client side scripting is disabled")); } else if (wasKeyDown(KeyType::CONSOLE)) { - openConsole(core::clamp( - g_settings->getFloat("console_height"), 0.1f, 1.0f)); + openConsole(core::clamp(g_settings->getFloat("console_height"), 0.1f, 1.0f)); } else if (wasKeyDown(KeyType::FREEMOVE)) { toggleFreeMove(); } else if (wasKeyDown(KeyType::JUMP)) { @@ -1112,14 +1133,11 @@ void Game::processKeyInput() } } else if (wasKeyDown(KeyType::INC_VOLUME)) { if (g_settings->getBool("enable_sound")) { - float new_volume = rangelim( - g_settings->getFloat("sound_volume") + 0.1f, 0.0f, - 1.0f); + float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f); wchar_t buf[100]; g_settings->setFloat("sound_volume", new_volume); const wchar_t *str = wgettext("Volume changed to %d%%"); - swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, - myround(new_volume * 100)); + swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); delete[] str; m_game_ui->showStatusText(buf); } else { @@ -1127,24 +1145,20 @@ void Game::processKeyInput() } } else if (wasKeyDown(KeyType::DEC_VOLUME)) { if (g_settings->getBool("enable_sound")) { - float new_volume = rangelim( - g_settings->getFloat("sound_volume") - 0.1f, 0.0f, - 1.0f); + float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f); wchar_t buf[100]; g_settings->setFloat("sound_volume", new_volume); const wchar_t *str = wgettext("Volume changed to %d%%"); - swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, - myround(new_volume * 100)); + swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); delete[] str; m_game_ui->showStatusText(buf); } else { m_game_ui->showTranslatedStatusText("Sound system is disabled"); } #else - } else if (wasKeyDown(KeyType::MUTE) || wasKeyDown(KeyType::INC_VOLUME) || - wasKeyDown(KeyType::DEC_VOLUME)) { - m_game_ui->showTranslatedStatusText( - "Sound system is not supported on this build"); + } else if (wasKeyDown(KeyType::MUTE) || wasKeyDown(KeyType::INC_VOLUME) + || wasKeyDown(KeyType::DEC_VOLUME)) { + m_game_ui->showTranslatedStatusText("Sound system is not supported on this build"); #endif } else if (wasKeyDown(KeyType::CINEMATIC)) { toggleCinematic(); @@ -1203,7 +1217,8 @@ void Game::processItemSelection(u16 *new_playeritem) *new_playeritem = player->getWieldIndex(); s32 wheel = input->getMouseWheel(); - u16 max_item = MYMIN(PLAYER_INVENTORY_SIZE - 1, player->hud_hotbar_itemcount - 1); + u16 max_item = MYMIN(PLAYER_INVENTORY_SIZE - 1, + player->hud_hotbar_itemcount - 1); s32 dir = wheel; @@ -1226,13 +1241,14 @@ void Game::processItemSelection(u16 *new_playeritem) /* Item selection using hotbar slot keys */ for (u16 i = 0; i <= max_item; i++) { - if (wasKeyDown((GameKeyType)(KeyType::SLOT_1 + i))) { + if (wasKeyDown((GameKeyType) (KeyType::SLOT_1 + i))) { *new_playeritem = i; break; } } } + void Game::dropSelectedItem(bool single_item) { IDropAction *a = new IDropAction(); @@ -1243,6 +1259,7 @@ void Game::dropSelectedItem(bool single_item) client->inventoryAction(a); } + void Game::openInventory() { /* @@ -1261,13 +1278,12 @@ void Game::openInventory() InventoryLocation inventoryloc; inventoryloc.setCurrentPlayer(); - if (!client->modsLoaded() || - !client->getScript()->on_inventory_open( - fs_src->m_client->getInventory(inventoryloc))) { + if (!client->modsLoaded() + || !client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) { TextDest *txt_dst = new TextDestPlayerInventory(client); auto *&formspec = m_game_ui->updateFormspec(""); GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src, - txt_dst, client->getFormspecPrepend()); + txt_dst, client->getFormspecPrepend()); formspec->setFormSpec(fs_src->getForm(), inventoryloc); } @@ -1285,6 +1301,7 @@ void Game::openEnderchest() client->getScript()->open_enderchest(); } + void Game::openConsole(float scale, const wchar_t *line) { assert(scale > 0.0f && scale <= 1.0f); @@ -1314,6 +1331,7 @@ void Game::handleAndroidChatInput() } #endif + void Game::toggleFreeMove() { bool free_move = !g_settings->getBool("free_move"); @@ -1323,8 +1341,7 @@ void Game::toggleFreeMove() if (client->checkPrivilege("fly")) { m_game_ui->showTranslatedStatusText("Fly mode enabled"); } else { - m_game_ui->showTranslatedStatusText( - "Fly mode enabled (note: no 'fly' privilege)"); + m_game_ui->showTranslatedStatusText("Fly mode enabled (note: no 'fly' privilege)"); } } else { m_game_ui->showTranslatedStatusText("Fly mode disabled"); @@ -1339,6 +1356,7 @@ void Game::toggleFreeMoveAlt() runData.reset_jump_timer = true; } + void Game::togglePitchMove() { bool pitch_move = !g_settings->getBool("pitch_move"); @@ -1351,6 +1369,7 @@ void Game::togglePitchMove() } } + void Game::toggleFast() { bool fast_move = !g_settings->getBool("fast_move"); @@ -1361,8 +1380,7 @@ void Game::toggleFast() if (has_fast_privs) { m_game_ui->showTranslatedStatusText("Fast mode enabled"); } else { - m_game_ui->showTranslatedStatusText( - "Fast mode enabled (note: no 'fast' privilege)"); + m_game_ui->showTranslatedStatusText("Fast mode enabled (note: no 'fast' privilege)"); } } else { m_game_ui->showTranslatedStatusText("Fast mode disabled"); @@ -1373,6 +1391,7 @@ void Game::toggleFast() #endif } + void Game::toggleNoClip() { bool noclip = !g_settings->getBool("noclip"); @@ -1382,8 +1401,7 @@ void Game::toggleNoClip() if (client->checkPrivilege("noclip")) { m_game_ui->showTranslatedStatusText("Noclip mode enabled"); } else { - m_game_ui->showTranslatedStatusText("Noclip mode enabled (note: " - "no 'noclip' privilege)"); + m_game_ui->showTranslatedStatusText("Noclip mode enabled (note: no 'noclip' privilege)"); } } else { m_game_ui->showTranslatedStatusText("Noclip mode disabled"); @@ -1392,7 +1410,7 @@ void Game::toggleNoClip() void Game::toggleKillaura() { - bool killaura = !g_settings->getBool("killaura"); + bool killaura = ! g_settings->getBool("killaura"); g_settings->set("killaura", bool_to_cstr(killaura)); if (killaura) { @@ -1404,7 +1422,7 @@ void Game::toggleKillaura() void Game::toggleFreecam() { - bool freecam = !g_settings->getBool("freecam"); + bool freecam = ! g_settings->getBool("freecam"); g_settings->set("freecam", bool_to_cstr(freecam)); if (freecam) { @@ -1416,7 +1434,7 @@ void Game::toggleFreecam() void Game::toggleScaffold() { - bool scaffold = !g_settings->getBool("scaffold"); + bool scaffold = ! g_settings->getBool("scaffold"); g_settings->set("scaffold", bool_to_cstr(scaffold)); if (scaffold) { @@ -1428,7 +1446,7 @@ void Game::toggleScaffold() void Game::toggleNextItem() { - bool next_item = !g_settings->getBool("next_item"); + bool next_item = ! g_settings->getBool("next_item"); g_settings->set("next_item", bool_to_cstr(next_item)); if (next_item) { @@ -1463,8 +1481,7 @@ void Game::toggleAutoforward() void Game::toggleMinimap(bool shift_pressed) { - if (!mapper || !m_game_ui->m_flags.show_hud || - !g_settings->getBool("enable_minimap")) + if (!mapper || !m_game_ui->m_flags.show_hud || !g_settings->getBool("enable_minimap")) return; if (shift_pressed) { @@ -1485,32 +1502,31 @@ void Game::toggleMinimap(bool shift_pressed) m_game_ui->m_flags.show_minimap = true; switch (mode) { - case MINIMAP_MODE_SURFACEx1: - m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x1"); - break; - case MINIMAP_MODE_SURFACEx2: - m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x2"); - break; - case MINIMAP_MODE_SURFACEx4: - m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x4"); - break; - case MINIMAP_MODE_RADARx1: - m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x1"); - break; - case MINIMAP_MODE_RADARx2: - m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x2"); - break; - case MINIMAP_MODE_RADARx4: - m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x4"); - break; - default: - mode = MINIMAP_MODE_OFF; - m_game_ui->m_flags.show_minimap = false; - if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) - m_game_ui->showTranslatedStatusText("Minimap hidden"); - else - m_game_ui->showTranslatedStatusText( - "Minimap currently disabled by game or mod"); + case MINIMAP_MODE_SURFACEx1: + m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x1"); + break; + case MINIMAP_MODE_SURFACEx2: + m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x2"); + break; + case MINIMAP_MODE_SURFACEx4: + m_game_ui->showTranslatedStatusText("Minimap in surface mode, Zoom x4"); + break; + case MINIMAP_MODE_RADARx1: + m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x1"); + break; + case MINIMAP_MODE_RADARx2: + m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x2"); + break; + case MINIMAP_MODE_RADARx4: + m_game_ui->showTranslatedStatusText("Minimap in radar mode, Zoom x4"); + break; + default: + mode = MINIMAP_MODE_OFF; + m_game_ui->m_flags.show_minimap = false; + if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) + m_game_ui->showTranslatedStatusText("Minimap hidden"); + else + m_game_ui->showTranslatedStatusText("Minimap currently disabled by game or mod"); } mapper->setMinimapMode(mode); @@ -1526,6 +1542,7 @@ void Game::toggleFog() m_game_ui->showTranslatedStatusText("Fog enabled"); } + void Game::toggleDebug() { // Initial / 4x toggle: Chat only @@ -1537,8 +1554,7 @@ void Game::toggleDebug() m_game_ui->m_flags.show_profiler_graph = false; draw_control->show_wireframe = false; m_game_ui->showTranslatedStatusText("Debug info shown"); - } else if (!m_game_ui->m_flags.show_profiler_graph && - !draw_control->show_wireframe) { + } else if (!m_game_ui->m_flags.show_profiler_graph && !draw_control->show_wireframe) { m_game_ui->m_flags.show_profiler_graph = true; m_game_ui->showTranslatedStatusText("Profiler graph shown"); } else if (!draw_control->show_wireframe && client->checkPrivilege("debug")) { @@ -1550,15 +1566,14 @@ void Game::toggleDebug() m_game_ui->m_flags.show_profiler_graph = false; draw_control->show_wireframe = false; if (client->checkPrivilege("debug")) { - m_game_ui->showTranslatedStatusText("Debug info, profiler graph, " - "and wireframe hidden"); + m_game_ui->showTranslatedStatusText("Debug info, profiler graph, and wireframe hidden"); } else { - m_game_ui->showTranslatedStatusText( - "Debug info and profiler graph hidden"); + m_game_ui->showTranslatedStatusText("Debug info and profiler graph hidden"); } } } + void Game::toggleUpdateCamera() { if (g_settings->getBool("freecam")) @@ -1570,6 +1585,7 @@ void Game::toggleUpdateCamera() m_game_ui->showTranslatedStatusText("Camera update enabled"); } + void Game::increaseViewRange() { s16 range = g_settings->getS16("viewing_range"); @@ -1593,6 +1609,7 @@ void Game::increaseViewRange() g_settings->set("viewing_range", itos(range_new)); } + void Game::decreaseViewRange() { s16 range = g_settings->getS16("viewing_range"); @@ -1615,6 +1632,7 @@ void Game::decreaseViewRange() g_settings->set("viewing_range", itos(range_new)); } + void Game::toggleFullViewRange() { draw_control->range_all = !draw_control->range_all; @@ -1624,18 +1642,19 @@ void Game::toggleFullViewRange() m_game_ui->showTranslatedStatusText("Disabled unlimited viewing range"); } + void Game::checkZoomEnabled() { LocalPlayer *player = client->getEnv().getLocalPlayer(); if (player->getZoomFOV() < 0.001f || player->getFov().fov > 0.0f) - m_game_ui->showTranslatedStatusText( - "Zoom currently disabled by game or mod"); + m_game_ui->showTranslatedStatusText("Zoom currently disabled by game or mod"); } + void Game::updateCameraDirection(CameraOrientation *cam, float dtime) { - if ((device->isWindowActive() && device->isWindowFocused() && !isMenuActive()) || - input->isRandom()) { + if ((device->isWindowActive() && device->isWindowFocused() + && !isMenuActive()) || input->isRandom()) { #ifndef __ANDROID__ if (!input->isRandom()) { @@ -1649,7 +1668,7 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime) m_first_loop_after_window_activation = false; input->setMousePos(driver->getScreenSize().Width / 2, - driver->getScreenSize().Height / 2); + driver->getScreenSize().Height / 2); } else { updateCameraOrientation(cam, dtime); } @@ -1663,6 +1682,7 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime) #endif m_first_loop_after_window_activation = true; + } } @@ -1670,20 +1690,18 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) { #ifdef HAVE_TOUCHSCREENGUI if (g_touchscreengui) { - cam->camera_yaw += g_touchscreengui->getYawChange(); - cam->camera_pitch = g_touchscreengui->getPitch(); + cam->camera_yaw += g_touchscreengui->getYawChange(); + cam->camera_pitch = g_touchscreengui->getPitch(); } else { #endif - v2s32 center(driver->getScreenSize().Width / 2, - driver->getScreenSize().Height / 2); + v2s32 center(driver->getScreenSize().Width / 2, driver->getScreenSize().Height / 2); v2s32 dist = input->getMousePos() - center; - if (m_invert_mouse || - camera->getCameraMode() == CAMERA_MODE_THIRD_FRONT) { + if (m_invert_mouse || camera->getCameraMode() == CAMERA_MODE_THIRD_FRONT) { dist.Y = -dist.Y; } - cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity; + cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity; cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity; if (dist.X != 0 || dist.Y != 0) @@ -1694,45 +1712,51 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) if (m_cache_enable_joysticks) { f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime; - cam->camera_yaw -= input->joystick.getAxisWithoutDead( - JA_FRUSTUM_HORIZONTAL) * - c; - cam->camera_pitch += - input->joystick.getAxisWithoutDead(JA_FRUSTUM_VERTICAL) * - c; + cam->camera_yaw -= input->joystick.getAxisWithoutDead(JA_FRUSTUM_HORIZONTAL) * c; + cam->camera_pitch += input->joystick.getAxisWithoutDead(JA_FRUSTUM_VERTICAL) * c; } cam->camera_pitch = rangelim(cam->camera_pitch, -89.5, 89.5); } + void Game::updatePlayerControl(const CameraOrientation &cam) { - // TimeTaker tt("update player control", NULL, PRECISION_NANO); + //TimeTaker tt("update player control", NULL, PRECISION_NANO); // DO NOT use the isKeyDown method for the forward, backward, left, right // buttons, as the code that uses the controls needs to be able to // distinguish between the two in order to know when to use joysticks. - PlayerControl control(input->isKeyDown(KeyType::FORWARD), - input->isKeyDown(KeyType::BACKWARD), - input->isKeyDown(KeyType::LEFT), input->isKeyDown(KeyType::RIGHT), - isKeyDown(KeyType::JUMP), isKeyDown(KeyType::SPECIAL1), - isKeyDown(KeyType::SNEAK), isKeyDown(KeyType::ZOOM), - input->getLeftState(), input->getRightState(), cam.camera_pitch, - cam.camera_yaw, - input->joystick.getAxisWithoutDead(JA_SIDEWARD_MOVE), - input->joystick.getAxisWithoutDead(JA_FORWARD_MOVE)); - - u32 keypress_bits = (((u32)(isKeyDown(KeyType::FORWARD) & 0x1) << 0) | - ((u32)(isKeyDown(KeyType::BACKWARD) & 0x1) << 1) | - ((u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) | - ((u32)(isKeyDown(KeyType::RIGHT) & 0x1) << 3) | - ((u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) | - ((u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) | - ((u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) | - ((u32)(input->getLeftState() & 0x1) << 7) | - ((u32)(input->getRightState() & 0x1) << 8) | - ((u32)(isKeyDown(KeyType::ZOOM) & 0x1) << 9)); + PlayerControl control( + input->isKeyDown(KeyType::FORWARD), + input->isKeyDown(KeyType::BACKWARD), + input->isKeyDown(KeyType::LEFT), + input->isKeyDown(KeyType::RIGHT), + isKeyDown(KeyType::JUMP), + isKeyDown(KeyType::SPECIAL1), + isKeyDown(KeyType::SNEAK), + isKeyDown(KeyType::ZOOM), + input->getLeftState(), + input->getRightState(), + cam.camera_pitch, + cam.camera_yaw, + input->joystick.getAxisWithoutDead(JA_SIDEWARD_MOVE), + input->joystick.getAxisWithoutDead(JA_FORWARD_MOVE) + ); + + u32 keypress_bits = ( + ( (u32)(isKeyDown(KeyType::FORWARD) & 0x1) << 0) | + ( (u32)(isKeyDown(KeyType::BACKWARD) & 0x1) << 1) | + ( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) | + ( (u32)(isKeyDown(KeyType::RIGHT) & 0x1) << 3) | + ( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) | + ( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) | + ( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) | + ( (u32)(input->getLeftState() & 0x1) << 7) | + ( (u32)(input->getRightState() & 0x1) << 8) | + ( (u32)(isKeyDown(KeyType::ZOOM) & 0x1) << 9) + ); #ifdef ANDROID /* For Android, simulate holding down AUX1 (fast move) if the user has @@ -1764,15 +1788,17 @@ void Game::updatePlayerControl(const CameraOrientation &cam) client->setPlayerControl(control); player->keyPressed = keypress_bits; - // tt.stop(); + //tt.stop(); } + inline void Game::step(f32 *dtime) { - bool can_be_and_is_paused = (simple_singleplayer_mode && g_menumgr.pausesGame()); + bool can_be_and_is_paused = + (simple_singleplayer_mode && g_menumgr.pausesGame()); if (can_be_and_is_paused) { // This is for a singleplayer server - *dtime = 0; // No time passes + *dtime = 0; // No time passes } else { if (server) server->step(*dtime); @@ -1782,24 +1808,24 @@ inline void Game::step(f32 *dtime) } const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = { - {&Game::handleClientEvent_None}, - {&Game::handleClientEvent_PlayerDamage}, - {&Game::handleClientEvent_PlayerForceMove}, - {&Game::handleClientEvent_Deathscreen}, - {&Game::handleClientEvent_ShowFormSpec}, - {&Game::handleClientEvent_ShowLocalFormSpec}, - {&Game::handleClientEvent_HandleParticleEvent}, - {&Game::handleClientEvent_HandleParticleEvent}, - {&Game::handleClientEvent_HandleParticleEvent}, - {&Game::handleClientEvent_HudAdd}, - {&Game::handleClientEvent_HudRemove}, - {&Game::handleClientEvent_HudChange}, - {&Game::handleClientEvent_SetSky}, - {&Game::handleClientEvent_SetSun}, - {&Game::handleClientEvent_SetMoon}, - {&Game::handleClientEvent_SetStars}, - {&Game::handleClientEvent_OverrideDayNigthRatio}, - {&Game::handleClientEvent_CloudParams}, + {&Game::handleClientEvent_None}, + {&Game::handleClientEvent_PlayerDamage}, + {&Game::handleClientEvent_PlayerForceMove}, + {&Game::handleClientEvent_Deathscreen}, + {&Game::handleClientEvent_ShowFormSpec}, + {&Game::handleClientEvent_ShowLocalFormSpec}, + {&Game::handleClientEvent_HandleParticleEvent}, + {&Game::handleClientEvent_HandleParticleEvent}, + {&Game::handleClientEvent_HandleParticleEvent}, + {&Game::handleClientEvent_HudAdd}, + {&Game::handleClientEvent_HudRemove}, + {&Game::handleClientEvent_HudChange}, + {&Game::handleClientEvent_SetSky}, + {&Game::handleClientEvent_SetSun}, + {&Game::handleClientEvent_SetMoon}, + {&Game::handleClientEvent_SetStars}, + {&Game::handleClientEvent_OverrideDayNigthRatio}, + {&Game::handleClientEvent_CloudParams}, }; void Game::handleClientEvent_None(ClientEvent *event, CameraOrientation *cam) @@ -1821,7 +1847,7 @@ void Game::handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation player->hurt_tilt_timer = 1.5f; player->hurt_tilt_strength = - rangelim(event->player_damage.amount / 4.0f, 1.0f, 4.0f); + rangelim(event->player_damage.amount / 4.0f, 1.0f, 4.0f); } // Play damage sound @@ -1854,21 +1880,19 @@ void Game::handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation { if (event->show_formspec.formspec->empty()) { auto formspec = m_game_ui->getFormspecGUI(); - if (formspec && (event->show_formspec.formname->empty() || - *(event->show_formspec.formname) == - m_game_ui->getFormspecName())) { + if (formspec && (event->show_formspec.formname->empty() + || *(event->show_formspec.formname) == m_game_ui->getFormspecName())) { formspec->quitMenu(); } } else { FormspecFormSource *fs_src = - new FormspecFormSource(*(event->show_formspec.formspec)); - TextDestPlayerInventory *txt_dst = new TextDestPlayerInventory( - client, *(event->show_formspec.formname)); + new FormspecFormSource(*(event->show_formspec.formspec)); + TextDestPlayerInventory *txt_dst = + new TextDestPlayerInventory(client, *(event->show_formspec.formname)); - auto *&formspec = m_game_ui->updateFormspec( - *(event->show_formspec.formname)); - GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src, - txt_dst, client->getFormspecPrepend()); + auto *&formspec = m_game_ui->updateFormspec(*(event->show_formspec.formname)); + GUIFormSpecMenu::create(formspec, client, &input->joystick, + fs_src, txt_dst, client->getFormspecPrepend()); } delete event->show_formspec.formspec; @@ -1877,10 +1901,9 @@ void Game::handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation void Game::handleClientEvent_ShowLocalFormSpec(ClientEvent *event, CameraOrientation *cam) { - FormspecFormSource *fs_src = - new FormspecFormSource(*event->show_formspec.formspec); + FormspecFormSource *fs_src = new FormspecFormSource(*event->show_formspec.formspec); LocalFormspecHandler *txt_dst = - new LocalFormspecHandler(*event->show_formspec.formname, client); + new LocalFormspecHandler(*event->show_formspec.formname, client); GUIFormSpecMenu::create(m_game_ui->getFormspecGUI(), client, &input->joystick, fs_src, txt_dst, client->getFormspecPrepend()); @@ -1888,8 +1911,8 @@ void Game::handleClientEvent_ShowLocalFormSpec(ClientEvent *event, CameraOrienta delete event->show_formspec.formname; } -void Game::handleClientEvent_HandleParticleEvent( - ClientEvent *event, CameraOrientation *cam) +void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event, + CameraOrientation *cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); client->getParticleManager()->handleParticleEvent(event, client, player); @@ -1917,20 +1940,20 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam) } HudElement *e = new HudElement; - e->type = (HudElementType)event->hudadd.type; - e->pos = *event->hudadd.pos; - e->name = *event->hudadd.name; - e->scale = *event->hudadd.scale; - e->text = *event->hudadd.text; + e->type = (HudElementType)event->hudadd.type; + e->pos = *event->hudadd.pos; + e->name = *event->hudadd.name; + e->scale = *event->hudadd.scale; + e->text = *event->hudadd.text; e->number = event->hudadd.number; - e->item = event->hudadd.item; - e->dir = event->hudadd.dir; - e->align = *event->hudadd.align; + e->item = event->hudadd.item; + e->dir = event->hudadd.dir; + e->align = *event->hudadd.align; e->offset = *event->hudadd.offset; e->world_pos = *event->hudadd.world_pos; e->size = *event->hudadd.size; e->z_index = event->hudadd.z_index; - e->text2 = *event->hudadd.text2; + e->text2 = *event->hudadd.text2; hud_server_to_client[server_id] = player->addHud(e); delete event->hudadd.pos; @@ -1967,57 +1990,57 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca } switch (event->hudchange.stat) { - case HUD_STAT_POS: - e->pos = *event->hudchange.v2fdata; - break; + case HUD_STAT_POS: + e->pos = *event->hudchange.v2fdata; + break; - case HUD_STAT_NAME: - e->name = *event->hudchange.sdata; - break; + case HUD_STAT_NAME: + e->name = *event->hudchange.sdata; + break; - case HUD_STAT_SCALE: - e->scale = *event->hudchange.v2fdata; - break; + case HUD_STAT_SCALE: + e->scale = *event->hudchange.v2fdata; + break; - case HUD_STAT_TEXT: - e->text = *event->hudchange.sdata; - break; + case HUD_STAT_TEXT: + e->text = *event->hudchange.sdata; + break; - case HUD_STAT_NUMBER: - e->number = event->hudchange.data; - break; + case HUD_STAT_NUMBER: + e->number = event->hudchange.data; + break; - case HUD_STAT_ITEM: - e->item = event->hudchange.data; - break; + case HUD_STAT_ITEM: + e->item = event->hudchange.data; + break; - case HUD_STAT_DIR: - e->dir = event->hudchange.data; - break; + case HUD_STAT_DIR: + e->dir = event->hudchange.data; + break; - case HUD_STAT_ALIGN: - e->align = *event->hudchange.v2fdata; - break; + case HUD_STAT_ALIGN: + e->align = *event->hudchange.v2fdata; + break; - case HUD_STAT_OFFSET: - e->offset = *event->hudchange.v2fdata; - break; + case HUD_STAT_OFFSET: + e->offset = *event->hudchange.v2fdata; + break; - case HUD_STAT_WORLD_POS: - e->world_pos = *event->hudchange.v3fdata; - break; + case HUD_STAT_WORLD_POS: + e->world_pos = *event->hudchange.v3fdata; + break; - case HUD_STAT_SIZE: - e->size = *event->hudchange.v2s32data; - break; + case HUD_STAT_SIZE: + e->size = *event->hudchange.v2s32data; + break; - case HUD_STAT_Z_INDEX: - e->z_index = event->hudchange.data; - break; + case HUD_STAT_Z_INDEX: + e->z_index = event->hudchange.data; + break; - case HUD_STAT_TEXT2: - e->text2 = *event->hudchange.sdata; - break; + case HUD_STAT_TEXT2: + e->text2 = *event->hudchange.sdata; + break; } delete event->hudchange.v3fdata; @@ -2044,9 +2067,11 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam) sky->setVisible(true); // Update mesh based skybox colours if applicable. sky->setSkyColors(event->set_sky->sky_color); - sky->setHorizonTint(event->set_sky->fog_sun_tint, - event->set_sky->fog_moon_tint, - event->set_sky->fog_tint_type); + sky->setHorizonTint( + event->set_sky->fog_sun_tint, + event->set_sky->fog_moon_tint, + event->set_sky->fog_tint_type + ); } else if (event->set_sky->type == "skybox" && event->set_sky->textures.size() == 6) { // Disable the dyanmic mesh skybox: @@ -2054,23 +2079,27 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam) // Set fog colors: sky->setFallbackBgColor(event->set_sky->bgcolor); // Set sunrise and sunset fog tinting: - sky->setHorizonTint(event->set_sky->fog_sun_tint, - event->set_sky->fog_moon_tint, - event->set_sky->fog_tint_type); + sky->setHorizonTint( + event->set_sky->fog_sun_tint, + event->set_sky->fog_moon_tint, + event->set_sky->fog_tint_type + ); // Add textures to skybox. for (int i = 0; i < 6; i++) - sky->addTextureToSkybox( - event->set_sky->textures[i], i, texture_src); + sky->addTextureToSkybox(event->set_sky->textures[i], i, texture_src); } else { // Handle everything else as plain color. if (event->set_sky->type != "plain") - infostream << "Unknown sky type: " << (event->set_sky->type) - << std::endl; + infostream << "Unknown sky type: " + << (event->set_sky->type) << std::endl; sky->setVisible(false); sky->setFallbackBgColor(event->set_sky->bgcolor); // Disable directional sun/moon tinting on plain or invalid skyboxes. - sky->setHorizonTint(event->set_sky->bgcolor, event->set_sky->bgcolor, - "custom"); + sky->setHorizonTint( + event->set_sky->bgcolor, + event->set_sky->bgcolor, + "custom" + ); } delete event->set_sky; } @@ -2078,8 +2107,8 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam) void Game::handleClientEvent_SetSun(ClientEvent *event, CameraOrientation *cam) { sky->setSunVisible(event->sun_params->visible); - sky->setSunTexture(event->sun_params->texture, event->sun_params->tonemap, - texture_src); + sky->setSunTexture(event->sun_params->texture, + event->sun_params->tonemap, texture_src); sky->setSunScale(event->sun_params->scale); sky->setSunriseVisible(event->sun_params->sunrise_visible); sky->setSunriseTexture(event->sun_params->sunrise, texture_src); @@ -2089,8 +2118,8 @@ void Game::handleClientEvent_SetSun(ClientEvent *event, CameraOrientation *cam) void Game::handleClientEvent_SetMoon(ClientEvent *event, CameraOrientation *cam) { sky->setMoonVisible(event->moon_params->visible); - sky->setMoonTexture(event->moon_params->texture, event->moon_params->tonemap, - texture_src); + sky->setMoonTexture(event->moon_params->texture, + event->moon_params->tonemap, texture_src); sky->setMoonScale(event->moon_params->scale); delete event->moon_params; } @@ -2104,12 +2133,12 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam delete event->star_params; } -void Game::handleClientEvent_OverrideDayNigthRatio( - ClientEvent *event, CameraOrientation *cam) +void Game::handleClientEvent_OverrideDayNigthRatio(ClientEvent *event, + CameraOrientation *cam) { client->getEnv().setDayNightRatioOverride( - event->override_day_night_ratio.do_override, - event->override_day_night_ratio.ratio_f * 1000.0f); + event->override_day_night_ratio.do_override, + event->override_day_night_ratio.ratio_f * 1000.0f); } void Game::handleClientEvent_CloudParams(ClientEvent *event, CameraOrientation *cam) @@ -2129,9 +2158,8 @@ void Game::processClientEvents(CameraOrientation *cam) { while (client->hasClientEvents()) { std::unique_ptr<ClientEvent> event(client->getClientEvent()); - FATAL_ERROR_IF(event->type >= CLIENTEVENT_MAX, - "Invalid clientevent type"); - const ClientEventHandler &evHandler = clientEventHandler[event->type]; + FATAL_ERROR_IF(event->type >= CLIENTEVENT_MAX, "Invalid clientevent type"); + const ClientEventHandler& evHandler = clientEventHandler[event->type]; (this->*evHandler.handler)(event.get(), cam); } } @@ -2153,7 +2181,7 @@ void Game::updateChat(f32 dtime, const v2u32 &screensize) // Display all messages in a static text element m_game_ui->setChatText(chat_backend->getRecentChat(), - chat_backend->getRecentBuffer().getLineCount()); + chat_backend->getRecentBuffer().getLineCount()); } void Game::updateCamera(u32 busy_time, f32 dtime) @@ -2173,11 +2201,11 @@ void Game::updateCamera(u32 busy_time, f32 dtime) } ToolCapabilities playeritem_toolcap = - playeritem.getToolCapabilities(itemdef_manager); + playeritem.getToolCapabilities(itemdef_manager); v3s16 old_camera_offset = camera->getOffset(); - if (wasKeyDown(KeyType::CAMERA_MODE) && !g_settings->getBool("freecam")) { + if (wasKeyDown(KeyType::CAMERA_MODE) && ! g_settings->getBool("freecam")) { camera->toggleCameraMode(); updatePlayerCAOVisibility(); } @@ -2216,20 +2244,18 @@ void Game::updatePlayerCAOVisibility() GenericCAO *playercao = player->getCAO(); if (!playercao) return; - playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || - g_settings->getBool("freecam")); - playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || - g_settings->getBool("freecam")); + playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || g_settings->getBool("freecam")); + playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || g_settings->getBool("freecam")); } void Game::updateSound(f32 dtime) { // Update sound listener v3s16 camera_offset = camera->getOffset(); - sound->updateListener(camera->getCameraNode()->getPosition() + - intToFloat(camera_offset, BS), - v3f(0, 0, 0), // velocity - camera->getDirection(), camera->getCameraNode()->getUpVector()); + sound->updateListener(camera->getCameraNode()->getPosition() + intToFloat(camera_offset, BS), + v3f(0, 0, 0), // velocity + camera->getDirection(), + camera->getCameraNode()->getUpVector()); bool mute_sound = g_settings->getBool("mute_sound"); if (mute_sound) { @@ -2259,12 +2285,13 @@ void Game::updateSound(f32 dtime) soundmaker->m_player_step_sound = nodedef_manager->get(n).sound_footstep; } + void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) { LocalPlayer *player = client->getEnv().getLocalPlayer(); const v3f camera_direction = camera->getDirection(); - const v3s16 camera_offset = camera->getOffset(); + const v3s16 camera_offset = camera->getOffset(); /* Calculate what block is the crosshair pointing to @@ -2275,7 +2302,7 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) const ItemDefinition &selected_def = selected_item.getDefinition(itemdef_manager); f32 d = getToolRange(selected_def, hand_item.getDefinition(itemdef_manager)); - + if (g_settings->getBool("increase_tool_range")) d += 2; if (g_settings->getBool("increase_tool_range_plus")) @@ -2305,17 +2332,18 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) if ((g_settings->getBool("touchtarget")) && (g_touchscreengui)) { shootline = g_touchscreengui->getShootline(); // Scale shootline to the acual distance the player can reach - shootline.end = shootline.start + - shootline.getVector().normalize() * BS * d; + shootline.end = shootline.start + + shootline.getVector().normalize() * BS * d; shootline.start += intToFloat(camera_offset, BS); shootline.end += intToFloat(camera_offset, BS); } #endif - PointedThing pointed = - updatePointedThing(shootline, selected_def.liquids_pointable, - !runData.ldown_for_dig, camera_offset); + PointedThing pointed = updatePointedThing(shootline, + selected_def.liquids_pointable, + !runData.ldown_for_dig, + camera_offset); if (pointed != runData.pointed_old) { infostream << "Pointing at " << pointed.dump() << std::endl; @@ -2335,19 +2363,18 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) if (runData.digging) { if (input->getLeftReleased()) { infostream << "Left button released" - << " (stopped digging)" << std::endl; + << " (stopped digging)" << std::endl; runData.digging = false; } else if (pointed != runData.pointed_old) { - if (pointed.type == POINTEDTHING_NODE && - runData.pointed_old.type == POINTEDTHING_NODE && - pointed.node_undersurface == - runData.pointed_old - .node_undersurface) { + if (pointed.type == POINTEDTHING_NODE + && runData.pointed_old.type == POINTEDTHING_NODE + && pointed.node_undersurface + == runData.pointed_old.node_undersurface) { // Still pointing to the same node, but a different face. // Don't reset. } else { infostream << "Pointing away from node" - << " (stopped digging)" << std::endl; + << " (stopped digging)" << std::endl; runData.digging = false; hud->updateSelectionMesh(camera_offset); } @@ -2373,22 +2400,19 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) soundmaker->m_player_leftpunch_sound.name = ""; // Prepare for repeating, unless we're not supposed to - if ((input->getRightState() || g_settings->getBool("autoplace")) && - !g_settings->getBool("safe_dig_and_place")) + if ((input->getRightState() || g_settings->getBool("autoplace")) && !g_settings->getBool("safe_dig_and_place")) runData.repeat_rightclick_timer += dtime; else runData.repeat_rightclick_timer = 0; if (selected_def.usable && input->getLeftState()) { - if (input->getLeftClicked() && - (!client->modsLoaded() || - !client->getScript()->on_item_use( - selected_item, pointed))) + if (input->getLeftClicked() && (!client->modsLoaded() + || !client->getScript()->on_item_use(selected_item, pointed))) client->interact(INTERACT_USE, pointed); } else if (pointed.type == POINTEDTHING_NODE) { handlePointingAtNode(pointed, selected_item, hand_item, dtime); } else if (pointed.type == POINTEDTHING_OBJECT) { - v3f player_position = player->getPosition(); + v3f player_position = player->getPosition(); handlePointingAtObject(pointed, tool_item, player_position, show_debug); } else if (input->getLeftState()) { // When button is held down in air, show continuous animation @@ -2412,14 +2436,18 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) input->resetRightReleased(); } -PointedThing Game::updatePointedThing(const core::line3d<f32> &shootline, - bool liquids_pointable, bool look_for_object, const v3s16 &camera_offset) + +PointedThing Game::updatePointedThing( + const core::line3d<f32> &shootline, + bool liquids_pointable, + bool look_for_object, + const v3s16 &camera_offset) { std::vector<aabb3f> *selectionboxes = hud->getSelectionBoxes(); selectionboxes->clear(); hud->setSelectedFaceNormal(v3f(0.0, 0.0, 0.0)); - static thread_local const bool show_entity_selectionbox = - g_settings->getBool("show_entity_selectionbox"); + static thread_local const bool show_entity_selectionbox = g_settings->getBool( + "show_entity_selectionbox"); ClientEnvironment &env = client->getEnv(); ClientMap &map = env.getClientMap(); @@ -2427,20 +2455,16 @@ PointedThing Game::updatePointedThing(const core::line3d<f32> &shootline, runData.selected_object = NULL; hud->pointing_at_object = false; - RaycastState s(shootline, look_for_object, liquids_pointable, - !g_settings->getBool("dont_point_nodes")); + RaycastState s(shootline, look_for_object, liquids_pointable, ! g_settings->getBool("dont_point_nodes")); PointedThing result; env.continueRaycast(&s, &result); if (result.type == POINTEDTHING_OBJECT) { hud->pointing_at_object = true; - runData.selected_object = - client->getEnv().getActiveObject(result.object_id); + runData.selected_object = client->getEnv().getActiveObject(result.object_id); aabb3f selection_box; - if (show_entity_selectionbox && - runData.selected_object->doShowSelectionBox() && - runData.selected_object->getSelectionBox( - &selection_box)) { + if (show_entity_selectionbox && runData.selected_object->doShowSelectionBox() && + runData.selected_object->getSelectionBox(&selection_box)) { v3f pos = runData.selected_object->getPosition(); selectionboxes->push_back(aabb3f(selection_box)); hud->setSelectionPos(pos, camera_offset); @@ -2450,21 +2474,22 @@ PointedThing Game::updatePointedThing(const core::line3d<f32> &shootline, MapNode n = map.getNode(result.node_undersurface); std::vector<aabb3f> boxes; n.getSelectionBoxes(nodedef, &boxes, - n.getNeighbors(result.node_undersurface, &map)); + n.getNeighbors(result.node_undersurface, &map)); f32 d = 0.002 * BS; for (std::vector<aabb3f>::const_iterator i = boxes.begin(); - i != boxes.end(); ++i) { + i != boxes.end(); ++i) { aabb3f box = *i; box.MinEdge -= v3f(d, d, d); box.MaxEdge += v3f(d, d, d); selectionboxes->push_back(box); } - hud->setSelectionPos( - intToFloat(result.node_undersurface, BS), camera_offset); - hud->setSelectedFaceNormal(v3f(result.intersection_normal.X, - result.intersection_normal.Y, - result.intersection_normal.Z)); + hud->setSelectionPos(intToFloat(result.node_undersurface, BS), + camera_offset); + hud->setSelectedFaceNormal(v3f( + result.intersection_normal.X, + result.intersection_normal.Y, + result.intersection_normal.Z)); } // Update selection mesh light level and vertex colors @@ -2490,15 +2515,13 @@ PointedThing Game::updatePointedThing(const core::line3d<f32> &shootline, // Modify final color a bit with time u32 timer = porting::getTimeMs() % 5000; - float timerf = (float)(irr::core::PI * ((timer / 2500.0) - 0.5)); + float timerf = (float) (irr::core::PI * ((timer / 2500.0) - 0.5)); float sin_r = 0.08f * std::sin(timerf); float sin_g = 0.08f * std::sin(timerf + irr::core::PI * 0.5f); float sin_b = 0.08f * std::sin(timerf + irr::core::PI); c.setRed(core::clamp(core::round32(c.getRed() * (0.8 + sin_r)), 0, 255)); - c.setGreen(core::clamp( - core::round32(c.getGreen() * (0.8 + sin_g)), 0, 255)); - c.setBlue(core::clamp( - core::round32(c.getBlue() * (0.8 + sin_b)), 0, 255)); + c.setGreen(core::clamp(core::round32(c.getGreen() * (0.8 + sin_g)), 0, 255)); + c.setBlue(core::clamp(core::round32(c.getBlue() * (0.8 + sin_b)), 0, 255)); // Set mesh final color hud->setSelectionMeshColor(c); @@ -2514,8 +2537,9 @@ void Game::handlePointingAtNothing(const ItemStack &playerItem) client->interact(INTERACT_ACTIVATE, fauxPointed); } + void Game::handlePointingAtNode(const PointedThing &pointed, - const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime) + const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime) { v3s16 nodepos = pointed.node_undersurface; v3s16 neighbourpos = pointed.node_abovesurface; @@ -2526,10 +2550,10 @@ void Game::handlePointingAtNode(const PointedThing &pointed, ClientMap &map = client->getEnv().getClientMap(); - if (((runData.nodig_delay_timer <= 0.0 || g_settings->getBool("fastdig")) && - (input->getLeftState() || g_settings->getBool("autodig")) && - !runData.digging_blocked && - client->checkPrivilege("interact"))) { + if (((runData.nodig_delay_timer <= 0.0 || g_settings->getBool("fastdig")) && (input->getLeftState() || g_settings->getBool("autodig")) + && !runData.digging_blocked + && client->checkPrivilege("interact")) + ) { handleDigging(pointed, nodepos, selected_item, hand_item, dtime); } @@ -2537,30 +2561,25 @@ void Game::handlePointingAtNode(const PointedThing &pointed, NodeMetadata *meta = map.getNodeMetadata(nodepos); if (meta) { - m_game_ui->setInfoText(unescape_translate( - utf8_to_wide(meta->getString("infotext")))); + m_game_ui->setInfoText(unescape_translate(utf8_to_wide( + meta->getString("infotext")))); } else { MapNode n = map.getNode(nodepos); if (nodedef_manager->get(n).tiledef[0].name == "unknown_node.png") { - m_game_ui->setInfoText( - L"Unknown node: " + - utf8_to_wide(nodedef_manager->get(n).name)); + m_game_ui->setInfoText(L"Unknown node: " + + utf8_to_wide(nodedef_manager->get(n).name)); } } - if ((input->getRightState() || g_settings->getBool("autoplace")) && + if ((input->getRightState() || g_settings->getBool("autoplace")) && (input->getRightClicked() || - (runData.repeat_rightclick_timer >= - (g_settings->getBool("fastplace") - ? 0 - : m_repeat_right_click_time))) && + (runData.repeat_rightclick_timer >= (g_settings->getBool("fastplace") ? 0 : m_repeat_right_click_time))) && client->checkPrivilege("interact")) { runData.repeat_rightclick_timer = 0; infostream << "Ground right-clicked" << std::endl; - camera->setDigging( - 1); // right click animation (always shown for feedback) + camera->setDigging(1); // right click animation (always shown for feedback) soundmaker->m_player_rightpunch_sound = SimpleSoundSpec(); @@ -2569,8 +2588,8 @@ void Game::handlePointingAtNode(const PointedThing &pointed, // And also set the sound and send the interact // But first check for meta formspec and rightclickable auto &def = selected_item.getDefinition(itemdef_manager); - bool placed = nodePlacement( - def, selected_item, nodepos, neighbourpos, pointed, meta); + bool placed = nodePlacement(def, selected_item, nodepos, neighbourpos, + pointed, meta); if (placed && client->modsLoaded()) client->getScript()->on_placenode(pointed, def); @@ -2578,9 +2597,8 @@ void Game::handlePointingAtNode(const PointedThing &pointed, } bool Game::nodePlacement(const ItemDefinition &selected_def, - const ItemStack &selected_item, const v3s16 &nodepos, - const v3s16 &neighbourpos, const PointedThing &pointed, - const NodeMetadata *meta) + const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos, + const PointedThing &pointed, const NodeMetadata *meta) { std::string prediction = selected_def.node_placement_prediction; const NodeDefManager *nodedef = client->ndef(); @@ -2595,8 +2613,8 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, } // formspec in meta - if (meta && !meta->getString("formspec").empty() && !input->isRandom() && - !isKeyDown(KeyType::SNEAK)) { + if (meta && !meta->getString("formspec").empty() && !input->isRandom() + && !isKeyDown(KeyType::SNEAK)) { // on_rightclick callbacks are called anyway if (nodedef_manager->get(map.getNode(nodepos)).rightclickable) client->interact(INTERACT_PLACE, pointed); @@ -2607,12 +2625,12 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, inventoryloc.setNodeMeta(nodepos); NodeMetadataFormSource *fs_src = new NodeMetadataFormSource( - &client->getEnv().getClientMap(), nodepos); + &client->getEnv().getClientMap(), nodepos); TextDest *txt_dst = new TextDestNodeMetadata(nodepos, client); auto *&formspec = m_game_ui->updateFormspec(""); GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src, - txt_dst, client->getFormspecPrepend()); + txt_dst, client->getFormspecPrepend()); formspec->setFormSpec(meta->getString("formspec"), inventoryloc); return false; @@ -2620,14 +2638,15 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, // on_rightclick callback if (prediction.empty() || (nodedef->get(node).rightclickable && - !isKeyDown(KeyType::SNEAK))) { + !isKeyDown(KeyType::SNEAK))) { // Report to server client->interact(INTERACT_PLACE, pointed); return false; } - verbosestream << "Node placement prediction for " << selected_def.name << " is " - << prediction << std::endl; + verbosestream << "Node placement prediction for " + << selected_def.name << " is " + << prediction << std::endl; v3s16 p = neighbourpos; // Place inside node itself if buildable_to @@ -2651,8 +2670,9 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, if (!found) { errorstream << "Node placement prediction failed for " - << selected_def.name << " (places " << prediction - << ") - Name not known" << std::endl; + << selected_def.name << " (places " + << prediction + << ") - Name not known" << std::endl; // Handle this as if prediction was empty // Report to server client->interact(INTERACT_PLACE, pointed); @@ -2679,9 +2699,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, if (predicted_f.param_type_2 == CPT2_FACEDIR || predicted_f.param_type_2 == CPT2_COLORED_FACEDIR) { - v3s16 dir = nodepos - - floatToInt(client->getEnv().getLocalPlayer()->getPosition(), - BS); + v3s16 dir = nodepos - floatToInt(client->getEnv().getLocalPlayer()->getPosition(), BS); if (abs(dir.X) > abs(dir.Z)) { param2 = dir.X < 0 ? 3 : 1; @@ -2692,15 +2710,15 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, assert(param2 <= 5); - // Check attachment if node is in group attached_node - if (((ItemGroupList)predicted_f.groups)["attached_node"] != 0) { + //Check attachment if node is in group attached_node + if (((ItemGroupList) predicted_f.groups)["attached_node"] != 0) { static v3s16 wallmounted_dirs[8] = { - v3s16(0, 1, 0), - v3s16(0, -1, 0), - v3s16(1, 0, 0), - v3s16(-1, 0, 0), - v3s16(0, 0, 1), - v3s16(0, 0, -1), + v3s16(0, 1, 0), + v3s16(0, -1, 0), + v3s16(1, 0, 0), + v3s16(-1, 0, 0), + v3s16(0, 0, 1), + v3s16(0, 0, -1), }; v3s16 pp; @@ -2718,11 +2736,11 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, } // Apply color - if ((predicted_f.param_type_2 == CPT2_COLOR || - predicted_f.param_type_2 == CPT2_COLORED_FACEDIR || - predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED)) { - const std::string &indexstr = - selected_item.metadata.getString("palette_index", 0); + if ((predicted_f.param_type_2 == CPT2_COLOR + || predicted_f.param_type_2 == CPT2_COLORED_FACEDIR + || predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED)) { + const std::string &indexstr = selected_item.metadata.getString( + "palette_index", 0); if (!indexstr.empty()) { s32 index = mystoi(indexstr); if (predicted_f.param_type_2 == CPT2_COLOR) { @@ -2747,13 +2765,10 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, // NOTE: This is to be eventually implemented by a mod as client-side Lua if (!nodedef->get(n).walkable || g_settings->getBool("enable_build_where_you_stand") || - (client->checkPrivilege("noclip") && - g_settings->getBool("noclip")) || + (client->checkPrivilege("noclip") && g_settings->getBool("noclip")) || (nodedef->get(n).walkable && - neighbourpos != player->getStandingNodePos() + - v3s16(0, 1, 0) && - neighbourpos != player->getStandingNodePos() + - v3s16(0, 2, 0))) { + neighbourpos != player->getStandingNodePos() + v3s16(0, 1, 0) && + neighbourpos != player->getStandingNodePos() + v3s16(0, 2, 0))) { // This triggers the required mesh update too client->addNode(p, n); // Report to server @@ -2762,24 +2777,24 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, soundmaker->m_player_rightpunch_sound = selected_def.sound_place; return true; } else { - soundmaker->m_player_rightpunch_sound = - selected_def.sound_place_failed; + soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed; return false; } } catch (InvalidPositionException &e) { errorstream << "Node placement prediction failed for " - << selected_def.name << " (places " << prediction - << ") - Position not loaded" << std::endl; + << selected_def.name << " (places " + << prediction + << ") - Position not loaded" << std::endl; soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed; return false; } } -void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack &tool_item, - const v3f &player_position, bool show_debug) +void Game::handlePointingAtObject(const PointedThing &pointed, + const ItemStack &tool_item, const v3f &player_position, bool show_debug) { std::wstring infotext = unescape_translate( - utf8_to_wide(runData.selected_object->infoText())); + utf8_to_wide(runData.selected_object->infoText())); if (show_debug) { if (!infotext.empty()) { @@ -2794,8 +2809,7 @@ void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack & bool do_punch = false; bool do_punch_damage = false; - if (runData.object_hit_delay_timer <= 0.0 || - g_settings->getBool("spamclick")) { + if (runData.object_hit_delay_timer <= 0.0 || g_settings->getBool("spamclick")) { do_punch = true; do_punch_damage = true; runData.object_hit_delay_timer = object_hit_delay; @@ -2824,10 +2838,11 @@ void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack & } } else if (input->getRightClicked()) { infostream << "Right-clicked object" << std::endl; - client->interact(INTERACT_PLACE, pointed); // place + client->interact(INTERACT_PLACE, pointed); // place } } + void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime) { @@ -2855,14 +2870,13 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, runData.dig_time_complete = params.time; if (m_cache_enable_particles) { - const ContentFeatures &features = - client->getNodeDefManager()->get(n); - client->getParticleManager()->addNodeParticle( - client, player, nodepos, n, features); + const ContentFeatures &features = client->getNodeDefManager()->get(n); + client->getParticleManager()->addNodeParticle(client, + player, nodepos, n, features); } } - - if (g_settings->getBool("instant_break")) { + + if(g_settings->getBool("instant_break")) { runData.dig_time_complete = 0; runData.dig_instantly = true; } @@ -2877,8 +2891,9 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, } if (!runData.dig_instantly) { - runData.dig_index = (float)crack_animation_length * runData.dig_time / - runData.dig_time_complete; + runData.dig_index = (float)crack_animation_length + * runData.dig_time + / runData.dig_time_complete; } else { // This is for e.g. torches runData.dig_index = crack_animation_length; @@ -2902,8 +2917,8 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, // Don't show cracks if not diggable if (runData.dig_time_complete >= 100000.0) { } else if (runData.dig_index < crack_animation_length) { - // TimeTaker timer("client.setTempMod"); - // infostream<<"dig_index="<<dig_index<<std::endl; + //TimeTaker timer("client.setTempMod"); + //infostream<<"dig_index="<<dig_index<<std::endl; client->setCrack(runData.dig_index, nodepos); } else { infostream << "Digging completed" << std::endl; @@ -2928,8 +2943,8 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, bool is_valid_position; MapNode wasnode = map.getNode(nodepos, &is_valid_position); if (is_valid_position) { - if (client->modsLoaded() && client->getScript()->on_dignode( - nodepos, wasnode)) { + if (client->modsLoaded() && + client->getScript()->on_dignode(nodepos, wasnode)) { return; } @@ -2938,8 +2953,7 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, client->removeNode(nodepos); } else if (!f.node_dig_prediction.empty()) { content_t id; - bool found = client->ndef()->getId( - f.node_dig_prediction, id); + bool found = client->ndef()->getId(f.node_dig_prediction, id); if (found) client->addNode(nodepos, id, true); } @@ -2950,11 +2964,12 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, if (m_cache_enable_particles) { const ContentFeatures &features = - client->getNodeDefManager()->get(wasnode); - client->getParticleManager()->addDiggingParticles( - client, player, nodepos, wasnode, features); + client->getNodeDefManager()->get(wasnode); + client->getParticleManager()->addDiggingParticles(client, + player, nodepos, wasnode, features); } + // Send event to trigger sound client->getEventManager()->put(new NodeDugEvent(nodepos, wasnode)); } @@ -2966,9 +2981,10 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, client->setCrack(-1, nodepos); } - camera->setDigging(0); // left click animation + camera->setDigging(0); // left click animation } + void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, const CameraOrientation &cam) { @@ -2998,13 +3014,10 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, sunlight_seen = true; } else { float old_brightness = sky->getBrightness(); - direct_brightness = - client->getEnv().getClientMap().getBackgroundBrightness( - MYMIN(runData.fog_range * 1.2, 60 * BS), - daynight_ratio, - (int)(old_brightness * 255.5), - &sunlight_seen) / - 255.0; + direct_brightness = client->getEnv().getClientMap() + .getBackgroundBrightness(MYMIN(runData.fog_range * 1.2, 60 * BS), + daynight_ratio, (int)(old_brightness * 255.5), &sunlight_seen) + / 255.0; } float time_of_day_smooth = runData.time_of_day_smooth; @@ -3019,16 +3032,17 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, time_of_day_smooth = time_of_day; if (time_of_day_smooth > 0.8 && time_of_day < 0.2) - time_of_day_smooth = time_of_day_smooth * (1.0 - todsm) + - (time_of_day + 1.0) * todsm; + time_of_day_smooth = time_of_day_smooth * (1.0 - todsm) + + (time_of_day + 1.0) * todsm; else - time_of_day_smooth = - time_of_day_smooth * (1.0 - todsm) + time_of_day * todsm; + time_of_day_smooth = time_of_day_smooth * (1.0 - todsm) + + time_of_day * todsm; runData.time_of_day_smooth = time_of_day_smooth; - sky->update(time_of_day_smooth, time_brightness, direct_brightness, sunlight_seen, - camera->getCameraMode(), player->getYaw(), player->getPitch()); + sky->update(time_of_day_smooth, time_brightness, direct_brightness, + sunlight_seen, camera->getCameraMode(), player->getYaw(), + player->getPitch()); /* Update clouds @@ -3039,26 +3053,20 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, clouds->step(dtime); // camera->getPosition is not enough for 3rd person views v3f camera_node_position = camera->getCameraNode()->getPosition(); - v3s16 camera_offset = camera->getOffset(); - camera_node_position.X = - camera_node_position.X + camera_offset.X * BS; - camera_node_position.Y = - camera_node_position.Y + camera_offset.Y * BS; - camera_node_position.Z = - camera_node_position.Z + camera_offset.Z * BS; - clouds->update(camera_node_position, sky->getCloudColor()); + v3s16 camera_offset = camera->getOffset(); + camera_node_position.X = camera_node_position.X + camera_offset.X * BS; + camera_node_position.Y = camera_node_position.Y + camera_offset.Y * BS; + camera_node_position.Z = camera_node_position.Z + camera_offset.Z * BS; + clouds->update(camera_node_position, + sky->getCloudColor()); if (clouds->isCameraInsideCloud() && m_cache_enable_fog) { // if inside clouds, and fog enabled, use that as sky // color(s) - video::SColor clouds_dark = - clouds->getColor().getInterpolated( - video::SColor(255, 0, 0, - 0), - 0.9); + video::SColor clouds_dark = clouds->getColor() + .getInterpolated(video::SColor(255, 0, 0, 0), 0.9); sky->overrideColors(clouds_dark, clouds->getColor()); sky->setInClouds(true); - runData.fog_range = std::fmin( - runData.fog_range * 0.5f, 32.0f * BS); + runData.fog_range = std::fmin(runData.fog_range * 0.5f, 32.0f * BS); // do not draw clouds after all clouds->setVisible(false); } @@ -3077,17 +3085,24 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, */ if (m_cache_enable_fog) { - driver->setFog(sky->getBgColor(), video::EFT_FOG_LINEAR, + driver->setFog( + sky->getBgColor(), + video::EFT_FOG_LINEAR, runData.fog_range * m_cache_fog_start, - runData.fog_range * 1.0, 0.01, + runData.fog_range * 1.0, + 0.01, false, // pixel fog - true // range fog + true // range fog ); } else { - driver->setFog(sky->getBgColor(), video::EFT_FOG_LINEAR, 100000 * BS, - 110000 * BS, 0.01f, + driver->setFog( + sky->getBgColor(), + video::EFT_FOG_LINEAR, + 100000 * BS, + 110000 * BS, + 0.01f, false, // pixel fog - false // range fog + false // range fog ); } @@ -3120,17 +3135,15 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, runData.update_draw_list_timer += dtime; v3f camera_direction = camera->getDirection(); - if (runData.update_draw_list_timer >= 0.2 || - runData.update_draw_list_last_cam_dir.getDistanceFrom( - camera_direction) > 0.2 || - m_camera_offset_changed) { + if (runData.update_draw_list_timer >= 0.2 + || runData.update_draw_list_last_cam_dir.getDistanceFrom(camera_direction) > 0.2 + || m_camera_offset_changed) { runData.update_draw_list_timer = 0; client->getEnv().getClientMap().updateDrawList(); runData.update_draw_list_last_cam_dir = camera_direction; } - m_game_ui->update(*stats, client, draw_control, cam, runData.pointed_old, - gui_chat_console, dtime); + m_game_ui->update(*stats, client, draw_control, cam, runData.pointed_old, gui_chat_console, dtime); /* make sure menu is on top @@ -3149,9 +3162,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, auto &loc = formspec->getFormspecLocation(); if (loc.type == InventoryLocation::NODEMETA) { - NodeMetadata *meta = - client->getEnv().getClientMap().getNodeMetadata( - loc.p); + NodeMetadata *meta = client->getEnv().getClientMap().getNodeMetadata(loc.p); if (!meta || meta->getString("formspec").empty()) { formspec->quitMenu(); break; @@ -3171,10 +3182,11 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, driver->beginScene(true, true, skycolor); bool draw_wield_tool = (m_game_ui->m_flags.show_hud && - (player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) && - (camera->getCameraMode() == CAMERA_MODE_FIRST)); - bool draw_crosshair = ((player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) && - (camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT)); + (player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) && + (camera->getCameraMode() == CAMERA_MODE_FIRST)); + bool draw_crosshair = ( + (player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) && + (camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT)); #ifdef HAVE_TOUCHSCREENGUI try { draw_crosshair = !g_settings->getBool("touchtarget"); @@ -3182,9 +3194,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, } #endif RenderingEngine::draw_scene(skycolor, m_game_ui->m_flags.show_hud, - m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair, - g_settings->getBool("enable_tracers"), - g_settings->getBool("enable_esp")); + m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair, g_settings->getBool("enable_tracers"), g_settings->getBool("enable_esp")); /* Profiler graph @@ -3196,7 +3206,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, Cheat menu */ - if (!gui_chat_console->isOpen()) { + if (! gui_chat_console->isOpen()) { if (m_game_ui->m_flags.show_cheat_menu) m_cheat_menu->draw(driver, m_game_ui->m_flags.show_debug); if (g_settings->getBool("cheat_hud")) @@ -3207,10 +3217,8 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, */ if (runData.damage_flash > 0.0f) { video::SColor color(runData.damage_flash, 180, 0, 0); - if (!g_settings->getBool("no_hurt_cam")) - driver->draw2DRectangle(color, - core::rect<s32>(0, 0, screensize.X, screensize.Y), - NULL); + if (! g_settings->getBool("no_hurt_cam")) + driver->draw2DRectangle(color, core::rect<s32>(0, 0, screensize.X, screensize.Y), NULL); runData.damage_flash -= 384.0f * dtime; } @@ -3236,7 +3244,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, /* End scene */ - + driver->endScene(); stats->drawtime = tt_draw.stop(true); @@ -3252,6 +3260,8 @@ inline void Game::updateProfilerGraphs(ProfilerGraph *graph) graph->put(values); } + + /**************************************************************************** Misc ****************************************************************************/ @@ -3265,15 +3275,14 @@ inline void Game::limitFps(FpsControl *fps_timings, f32 *dtime) u32 time = device->getTimer()->getTime(); u32 last_time = fps_timings->last_time; - if (time > last_time) // Make sure time hasn't overflowed + if (time > last_time) // Make sure time hasn't overflowed fps_timings->busy_time = time - last_time; else fps_timings->busy_time = 0; - u32 frametime_min = - 1000 / - (g_menumgr.pausesGame() ? g_settings->getFloat("pause_fps_max") - : g_settings->getFloat("fps_max")); + u32 frametime_min = 1000 / (g_menumgr.pausesGame() + ? g_settings->getFloat("pause_fps_max") + : g_settings->getFloat("fps_max")); if (fps_timings->busy_time < frametime_min) { fps_timings->sleep_time = frametime_min - fps_timings->busy_time; @@ -3291,7 +3300,7 @@ inline void Game::limitFps(FpsControl *fps_timings, f32 *dtime) device->getTimer()->tick(); // Update device timer time = device->getTimer()->getTime(); - if (time > last_time) // Make sure last_time hasn't overflowed + if (time > last_time) // Make sure last_time hasn't overflowed *dtime = (time - last_time) / 1000.0; else *dtime = 0; @@ -3302,8 +3311,8 @@ inline void Game::limitFps(FpsControl *fps_timings, f32 *dtime) void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_clouds) { const wchar_t *wmsg = wgettext(msg); - RenderingEngine::draw_load_screen( - wmsg, guienv, texture_src, dtime, percent, draw_clouds); + RenderingEngine::draw_load_screen(wmsg, guienv, texture_src, dtime, percent, + draw_clouds); delete[] wmsg; } @@ -3314,12 +3323,12 @@ void Game::settingChangedCallback(const std::string &setting_name, void *data) void Game::updateAllMapBlocksCallback(const std::string &setting_name, void *data) { - ((Game *)data)->client->updateAllMapBlocks(); + ((Game *) data)->client->updateAllMapBlocks(); } void Game::freecamChangedCallback(const std::string &setting_name, void *data) { - Game *game = (Game *)data; + Game *game = (Game *) data; LocalPlayer *player = game->client->getEnv().getLocalPlayer(); if (g_settings->getBool("freecam")) { game->camera->setCameraMode(CAMERA_MODE_FIRST); @@ -3332,25 +3341,23 @@ void Game::freecamChangedCallback(const std::string &setting_name, void *data) void Game::readSettings() { - m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); - m_cache_enable_clouds = g_settings->getBool("enable_clouds"); - m_cache_enable_joysticks = g_settings->getBool("enable_joysticks"); - m_cache_enable_particles = g_settings->getBool("enable_particles"); - m_cache_enable_fog = g_settings->getBool("enable_fog"); - m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); - m_cache_joystick_frustum_sensitivity = - g_settings->getFloat("joystick_frustum_sensitivity"); - m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); + m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); + m_cache_enable_clouds = g_settings->getBool("enable_clouds"); + m_cache_enable_joysticks = g_settings->getBool("enable_joysticks"); + m_cache_enable_particles = g_settings->getBool("enable_particles"); + m_cache_enable_fog = g_settings->getBool("enable_fog"); + m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); + m_cache_joystick_frustum_sensitivity = g_settings->getFloat("joystick_frustum_sensitivity"); + m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); - m_cache_enable_noclip = g_settings->getBool("noclip"); - m_cache_enable_free_move = g_settings->getBool("free_move"); + m_cache_enable_noclip = g_settings->getBool("noclip"); + m_cache_enable_free_move = g_settings->getBool("free_move"); - m_cache_fog_start = g_settings->getFloat("fog_start"); + m_cache_fog_start = g_settings->getFloat("fog_start"); m_cache_cam_smoothing = 0; if (g_settings->getBool("cinematic")) - m_cache_cam_smoothing = - 1 - g_settings->getFloat("cinematic_camera_smoothing"); + m_cache_cam_smoothing = 1 - g_settings->getFloat("cinematic_camera_smoothing"); else m_cache_cam_smoothing = 1 - g_settings->getFloat("camera_smoothing"); @@ -3372,40 +3379,41 @@ void Game::extendedResourceCleanup() // Extended resource accounting infostream << "Irrlicht resources after cleanup:" << std::endl; infostream << "\tRemaining meshes : " - << RenderingEngine::get_mesh_cache()->getMeshCount() << std::endl; - infostream << "\tRemaining textures : " << driver->getTextureCount() << std::endl; + << RenderingEngine::get_mesh_cache()->getMeshCount() << std::endl; + infostream << "\tRemaining textures : " + << driver->getTextureCount() << std::endl; for (unsigned int i = 0; i < driver->getTextureCount(); i++) { irr::video::ITexture *texture = driver->getTextureByIndex(i); infostream << "\t\t" << i << ":" << texture->getName().getPath().c_str() - << std::endl; + << std::endl; } clearTextureNameCache(); - infostream << "\tRemaining materials: " << driver->getMaterialRendererCount() - << " (note: irrlicht doesn't support removing renderers)" << std::endl; + infostream << "\tRemaining materials: " + << driver-> getMaterialRendererCount() + << " (note: irrlicht doesn't support removing renderers)" << std::endl; } void Game::showDeathFormspec() { - static std::string formspec_str = std::string("formspec_version[1]") + - SIZE_TAG "bgcolor[#320000b4;true]" - "label[4.85,1.35;" + - gettext("You died") + - "]" - "button_exit[4,3;3,0.5;btn_respawn;" + - gettext("Respawn") + "]"; + static std::string formspec_str = + std::string("formspec_version[1]") + + SIZE_TAG + "bgcolor[#320000b4;true]" + "label[4.85,1.35;" + gettext("You died") + "]" + "button_exit[4,3;3,0.5;btn_respawn;" + gettext("Respawn") + "]" + ; /* Create menu */ /* Note: FormspecFormSource and LocalFormspecHandler * * are deleted by guiFormSpecMenu */ FormspecFormSource *fs_src = new FormspecFormSource(formspec_str); - LocalFormspecHandler *txt_dst = - new LocalFormspecHandler("MT_DEATH_SCREEN", client); + LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_DEATH_SCREEN", client); auto *&formspec = m_game_ui->getFormspecGUI(); - GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src, txt_dst, - client->getFormspecPrepend()); + GUIFormSpecMenu::create(formspec, client, &input->joystick, + fs_src, txt_dst, client->getFormspecPrepend()); formspec->setFocus("btn_respawn"); } @@ -3413,53 +3421,59 @@ void Game::showDeathFormspec() void Game::showPauseMenu() { #ifdef __ANDROID__ - static const std::string control_text = - strgettext("Default Controls:\n" - "No menu visible:\n" - "- single tap: button activate\n" - "- double tap: place/use\n" - "- slide finger: look around\n" - "Menu/Inventory visible:\n" - "- double tap (outside):\n" - " -->close\n" - "- touch stack, touch slot:\n" - " --> move stack\n" - "- touch&drag, tap 2nd finger\n" - " --> place single item to slot\n"); + static const std::string control_text = strgettext("Default Controls:\n" + "No menu visible:\n" + "- single tap: button activate\n" + "- double tap: place/use\n" + "- slide finger: look around\n" + "Menu/Inventory visible:\n" + "- double tap (outside):\n" + " -->close\n" + "- touch stack, touch slot:\n" + " --> move stack\n" + "- touch&drag, tap 2nd finger\n" + " --> place single item to slot\n" + ); #else - static const std::string control_text_template = - strgettext("Controls:\n" - "- %s: move forwards\n" - "- %s: move backwards\n" - "- %s: move left\n" - "- %s: move right\n" - "- %s: jump/climb\n" - "- %s: sneak/go down\n" - "- %s: drop item\n" - "- %s: inventory\n" - "- %s: enderchest\n" - "- Mouse: turn/look\n" - "- Mouse left: dig/punch\n" - "- Mouse right: place/use\n" - "- Mouse wheel: select item\n" - "- %s: chat\n" - "- %s: Killaura\n" - "- %s: Freecam\n" - "- %s: Scaffold\n" - "- %s: NextItem\n"); - - char control_text_buf[600]; - - porting::mt_snprintf(control_text_buf, sizeof(control_text_buf), - control_text_template.c_str(), GET_KEY_NAME(keymap_forward), - GET_KEY_NAME(keymap_backward), GET_KEY_NAME(keymap_left), - GET_KEY_NAME(keymap_right), GET_KEY_NAME(keymap_jump), - GET_KEY_NAME(keymap_sneak), GET_KEY_NAME(keymap_drop), - GET_KEY_NAME(keymap_inventory), GET_KEY_NAME(keymap_enderchest), - GET_KEY_NAME(keymap_chat), GET_KEY_NAME(keymap_toggle_killaura), + static const std::string control_text_template = strgettext("Controls:\n" + "- %s: move forwards\n" + "- %s: move backwards\n" + "- %s: move left\n" + "- %s: move right\n" + "- %s: jump/climb\n" + "- %s: sneak/go down\n" + "- %s: drop item\n" + "- %s: inventory\n" + "- %s: enderchest\n" + "- Mouse: turn/look\n" + "- Mouse left: dig/punch\n" + "- Mouse right: place/use\n" + "- Mouse wheel: select item\n" + "- %s: chat\n" + "- %s: Killaura\n" + "- %s: Freecam\n" + "- %s: Scaffold\n" + "- %s: NextItem\n" + ); + + char control_text_buf[600]; + + porting::mt_snprintf(control_text_buf, sizeof(control_text_buf), control_text_template.c_str(), + GET_KEY_NAME(keymap_forward), + GET_KEY_NAME(keymap_backward), + GET_KEY_NAME(keymap_left), + GET_KEY_NAME(keymap_right), + GET_KEY_NAME(keymap_jump), + GET_KEY_NAME(keymap_sneak), + GET_KEY_NAME(keymap_drop), + GET_KEY_NAME(keymap_inventory), + GET_KEY_NAME(keymap_enderchest), + GET_KEY_NAME(keymap_chat), + GET_KEY_NAME(keymap_toggle_killaura), GET_KEY_NAME(keymap_toggle_freecam), GET_KEY_NAME(keymap_toggle_scaffold), - GET_KEY_NAME(keymap_toggle_next_item)); + GET_KEY_NAME(keymap_toggle_next_item) + ); std::string control_text = std::string(control_text_buf); str_formspec_escape(control_text); @@ -3468,12 +3482,13 @@ void Game::showPauseMenu() float ypos = simple_singleplayer_mode ? 0.7f : 0.1f; std::ostringstream os; - os << "formspec_version[1]" << SIZE_TAG << "button_exit[4," << (ypos++) - << ";3,0.5;btn_continue;" << strgettext("Continue") << "]"; + os << "formspec_version[1]" << SIZE_TAG + << "button_exit[4," << (ypos++) << ";3,0.5;btn_continue;" + << strgettext("Continue") << "]"; if (!simple_singleplayer_mode) { os << "button_exit[4," << (ypos++) << ";3,0.5;btn_change_password;" - << strgettext("Change Password") << "]"; + << strgettext("Change Password") << "]"; } else { os << "field[4.95,0;5,1.5;;" << strgettext("Game paused") << ";]"; } @@ -3482,27 +3497,27 @@ void Game::showPauseMenu() #if USE_SOUND if (g_settings->getBool("enable_sound")) { os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;" - << strgettext("Sound Volume") << "]"; + << strgettext("Sound Volume") << "]"; } #endif - os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;" - << strgettext("Change Keys") << "]"; + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;" + << strgettext("Change Keys") << "]"; #endif - os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;" - << strgettext("Exit to Menu") << "]"; - os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;" - << strgettext("Exit to OS") << "]" - << "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]" - << "textarea[0.4,0.25;3.9,6.25;;" << PROJECT_NAME_C " " VERSION_STRING "\n" - << "\n" - << strgettext("Game info:") << "\n"; + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;" + << strgettext("Exit to Menu") << "]"; + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;" + << strgettext("Exit to OS") << "]" + << "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]" + << "textarea[0.4,0.25;3.9,6.25;;" << PROJECT_NAME_C " " VERSION_STRING "\n" + << "\n" + << strgettext("Game info:") << "\n"; const std::string &address = client->getAddressName(); static const std::string mode = strgettext("- Mode: "); if (!simple_singleplayer_mode) { Address serverAddress = client->getServerAddress(); if (!address.empty()) { os << mode << strgettext("Remote server") << "\n" - << strgettext("- Address: ") << address; + << strgettext("- Address: ") << address; } else { os << mode << strgettext("Hosting server"); } @@ -3513,24 +3528,21 @@ void Game::showPauseMenu() if (simple_singleplayer_mode || address.empty()) { static const std::string on = strgettext("On"); static const std::string off = strgettext("Off"); - const std::string &damage = - g_settings->getBool("enable_damage") ? on : off; - const std::string &creative = - g_settings->getBool("creative_mode") ? on : off; - const std::string &announced = - g_settings->getBool("server_announce") ? on : off; + const std::string &damage = g_settings->getBool("enable_damage") ? on : off; + const std::string &creative = g_settings->getBool("creative_mode") ? on : off; + const std::string &announced = g_settings->getBool("server_announce") ? on : off; os << strgettext("- Damage: ") << damage << "\n" - << strgettext("- Creative Mode: ") << creative << "\n"; + << strgettext("- Creative Mode: ") << creative << "\n"; if (!simple_singleplayer_mode) { - const std::string &pvp = - g_settings->getBool("enable_pvp") ? on : off; + const std::string &pvp = g_settings->getBool("enable_pvp") ? on : off; //~ PvP = Player versus Player os << strgettext("- PvP: ") << pvp << "\n" - << strgettext("- Public: ") << announced << "\n"; + << strgettext("- Public: ") << announced << "\n"; std::string server_name = g_settings->get("server_name"); str_formspec_escape(server_name); if (announced == on && !server_name.empty()) os << strgettext("- Server Name: ") << server_name; + } } os << ";]"; @@ -3542,8 +3554,8 @@ void Game::showPauseMenu() LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU"); auto *&formspec = m_game_ui->getFormspecGUI(); - GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src, txt_dst, - client->getFormspecPrepend()); + GUIFormSpecMenu::create(formspec, client, &input->joystick, + fs_src, txt_dst, client->getFormspecPrepend()); formspec->setFocus("btn_continue"); formspec->doPause = true; } @@ -3556,12 +3568,15 @@ void Game::showPauseMenu() Game *g_game; -void the_game(bool *kill, InputHandler *input, const GameStartData &start_data, - std::string &error_message, ChatBackend &chat_backend, +void the_game(bool *kill, + InputHandler *input, + const GameStartData &start_data, + std::string &error_message, + ChatBackend &chat_backend, bool *reconnect_requested) // Used for local game { Game game; - + g_game = &game; /* Make a copy of the server address because if a local singleplayer server @@ -3572,14 +3587,13 @@ void the_game(bool *kill, InputHandler *input, const GameStartData &start_data, try { if (game.startup(kill, input, start_data, error_message, - reconnect_requested, &chat_backend)) { + reconnect_requested, &chat_backend)) { game.run(); } } catch (SerializationError &e) { - error_message = std::string("A serialization error occurred:\n") + - e.what() + - "\n\nThe server is probably " + error_message = std::string("A serialization error occurred:\n") + + e.what() + "\n\nThe server is probably " " running a different version of " PROJECT_NAME_C "."; errorstream << error_message << std::endl; } catch (ServerError &e) { |