diff options
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/client.cpp | 19 | ||||
-rw-r--r-- | src/client/client.h | 2 | ||||
-rw-r--r-- | src/client/game.cpp | 31 | ||||
-rw-r--r-- | src/client/game.h | 3 |
4 files changed, 49 insertions, 6 deletions
diff --git a/src/client/client.cpp b/src/client/client.cpp index f7fc637db..fe77ec7a8 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -41,6 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "mapblock_mesh.h" #include "mapblock.h" +#include "mapsector.h" #include "minimap.h" #include "modchannels.h" #include "content/mods.h" @@ -1239,12 +1240,6 @@ void Client::sendChatMessage(const std::wstring &message) infostream << "Could not queue chat message because maximum out chat queue size (" << max_queue_size << ") is reached." << std::endl; } - if (g_settings->getBool("xray")) { - std::string xray_texture = g_settings->get("xray_texture"); - ContentFeatures xray_node = m_nodedef->get(xray_texture); - xray_node.drawtype = NDT_AIRLIKE; - m_nodedef->set(xray_texture, xray_node); - } } void Client::clearOutChatQueue() @@ -1675,6 +1670,18 @@ void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool ur } } +void Client::updateAllMapBlocks() +{ + std::map<v2s16, MapSector*> *sectors = m_env.getMap().getSectorsPtr(); + for (auto §or_it : *sectors) { + MapSector *sector = sector_it.second; + MapBlockVect blocks; + sector->getBlocks(blocks); + for (MapBlock *block : blocks) + addUpdateMeshTask(block->getPos(), false, false); + } +} + ClientEvent *Client::getClientEvent() { FATAL_ERROR_IF(m_client_event_queue.empty(), diff --git a/src/client/client.h b/src/client/client.h index c7316fd91..9ab5c3b17 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -303,6 +303,8 @@ public: void addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server=false, bool urgent=false); void addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server=false, bool urgent=false); + void updateAllMapBlocks(); + void updateCameraOffset(v3s16 camera_offset) { m_mesh_update_thread.m_camera_offset = camera_offset; } diff --git a/src/client/game.cpp b/src/client/game.cpp index 4426c50cd..953eb1287 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -110,6 +110,10 @@ Game::Game() : &settingChangedCallback, this); g_settings->registerChangedCallback("freecam", &freecamChangedCallback, this); + g_settings->registerChangedCallback("xray", + &updateAllMapBlocksCallback, this); + g_settings->registerChangedCallback("fullbright", + &updateAllMapBlocksCallback, this); readSettings(); @@ -168,6 +172,8 @@ Game::~Game() &settingChangedCallback, this); g_settings->deregisterChangedCallback("camera_smoothing", &settingChangedCallback, this); + g_settings->deregisterChangedCallback("freecam", + &freecamChangedCallback, this); } bool Game::startup(bool *kill, @@ -335,6 +341,12 @@ void Game::shutdown() if (gui_chat_console) gui_chat_console->drop(); + if (m_cheat_menu) + delete m_cheat_menu; + + if (m_tracers) + delete m_tracers; + if (sky) sky->drop(); @@ -609,6 +621,14 @@ bool Game::initGui() errorstream << *error_message << std::endl; return false; } + + m_tracers = new Tracers(); + + if (!m_tracers) { + *error_message = "Could not allocate memory for tracers"; + errorstream << *error_message << std::endl; + return false; + } #ifdef HAVE_TOUCHSCREENGUI @@ -3214,6 +3234,12 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, if (m_game_ui->m_flags.show_cheat_menu && ! gui_chat_console->isOpen()) m_cheat_menu->draw(driver, m_game_ui->m_flags.show_debug); + + /* + Tracers + */ + + m_tracers->draw(driver); /* Damage flash @@ -3323,6 +3349,11 @@ void Game::settingChangedCallback(const std::string &setting_name, void *data) ((Game *)data)->readSettings(); } +void Game::updateAllMapBlocksCallback(const std::string &setting_name, void *data) +{ + ((Game *) data)->client->updateAllMapBlocks(); +} + void Game::freecamChangedCallback(const std::string &setting_name, void *data) { Game *game = (Game *) data; diff --git a/src/client/game.h b/src/client/game.h index c24d57413..a452c30c6 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -50,6 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gui/guiVolumeChange.h" #include "gui/mainmenumanager.h" #include "gui/profilergraph.h" +#include "gui/tracers.h" #include "mapblock.h" #include "minimap.h" #include "nodedef.h" // Needed for determining pointing to nodes @@ -792,6 +793,7 @@ public: static void freecamChangedCallback(const std::string &setting_name, void *data); static void settingChangedCallback(const std::string &setting_name, void *data); + static void updateAllMapBlocksCallback(const std::string &setting_name, void *data); void readSettings(); inline bool isKeyDown(GameKeyType k) @@ -869,6 +871,7 @@ public: std::unique_ptr<GameUI> m_game_ui; GUIChatConsole *gui_chat_console = nullptr; // Free using ->Drop() CheatMenu *m_cheat_menu = nullptr; + Tracers *m_tracers = nullptr; MapDrawControl *draw_control = nullptr; Camera *camera = nullptr; Clouds *clouds = nullptr; // Free using ->Drop() |