From e3cc26cb7c4fd8265adbce040c0d0577f32667f7 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 19 Feb 2024 21:14:47 +0100 Subject: [PATCH] Irrlicht support changes (#14383) --- src/client/clientlauncher.cpp | 15 ++++++++--- src/client/game.cpp | 24 +++++++++-------- src/irrlicht_changes/CGUITTFont.cpp | 40 ++++------------------------- src/irrlicht_changes/CGUITTFont.h | 3 --- src/irrlichttypes.h | 40 +++++++++-------------------- src/network/networkprotocol.h | 2 -- src/script/lua_api/l_mainmenu.cpp | 7 ++++- src/server/player_sao.cpp | 3 ++- 8 files changed, 49 insertions(+), 85 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index fd5bcb19d..02bbf34bf 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -198,11 +198,18 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) while (m_rendering_engine->run() && !*kill && !g_gamecallback->shutdown_requested) { // Set the window caption +#if IRRLICHT_VERSION_MT_REVISION >= 15 + auto driver_name = m_rendering_engine->getVideoDriver()->getName(); +#else + auto driver_name = wide_to_utf8(m_rendering_engine->getVideoDriver()->getName()); +#endif + std::string caption = std::string(PROJECT_NAME_C) + + " " + g_version_hash + + " [" + gettext("Main Menu") + "]" + + " [" + driver_name + "]"; + m_rendering_engine->get_raw_device()-> - setWindowCaption((utf8_to_wide(PROJECT_NAME_C) + - L" " + utf8_to_wide(g_version_hash) + - L" [" + wstrgettext("Main Menu") + L"]" + - L" [" + m_rendering_engine->getVideoDriver()->getName() + L"]" ).c_str()); + setWindowCaption(utf8_to_wide(caption).c_str()); try { // This is used for catching disconnects diff --git a/src/client/game.cpp b/src/client/game.cpp index 01f252be6..46bd800be 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1551,18 +1551,20 @@ bool Game::createClient(const GameStartData &start_data) /* Set window caption */ - std::wstring str = utf8_to_wide(PROJECT_NAME_C); - str += L" "; - str += utf8_to_wide(g_version_hash); - str += L" ["; - str += simple_singleplayer_mode ? wstrgettext("Singleplayer") - : wstrgettext("Multiplayer"); - str += L"]"; - str += L" ["; - str += driver->getName(); - str += L"]"; +#if IRRLICHT_VERSION_MT_REVISION >= 15 + auto driver_name = driver->getName(); +#else + auto driver_name = wide_to_utf8(driver->getName()); +#endif + std::string str = std::string(PROJECT_NAME_C) + + " " + g_version_hash + " ["; + str += simple_singleplayer_mode ? gettext("Singleplayer") + : gettext("Multiplayer"); + str += "] ["; + str += driver_name; + str += "]"; - device->setWindowCaption(str.c_str()); + device->setWindowCaption(utf8_to_wide(str).c_str()); LocalPlayer *player = client->getEnv().getLocalPlayer(); player->hurt_tilt_timer = 0; diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index 7e2ea8186..9274ee69f 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -240,37 +240,6 @@ CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filen return font; } -CGUITTFont* CGUITTFont::createTTFont(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias, const bool transparency) -{ - if (!c_libraryLoaded) - { - if (FT_Init_FreeType(&c_library)) - return 0; - c_libraryLoaded = true; - } - - CGUITTFont* font = new CGUITTFont(device->getGUIEnvironment()); - font->Device = device; - bool ret = font->load(filename, size, antialias, transparency); - if (!ret) - { - font->drop(); - return 0; - } - - return font; -} - -CGUITTFont* CGUITTFont::create(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias, const bool transparency) -{ - return CGUITTFont::createTTFont(env, filename, size, antialias, transparency); -} - -CGUITTFont* CGUITTFont::create(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias, const bool transparency) -{ - return CGUITTFont::createTTFont(device, filename, size, antialias, transparency); -} - ////////////////////// //! Constructor. @@ -304,6 +273,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia io::IFileSystem* filesystem = Environment->getFileSystem(); irr::ILogger* logger = (Device != 0 ? Device->getLogger() : 0); + // FIXME: this is always null ^ this->size = size; this->filename = filename; @@ -314,7 +284,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia // Log. if (logger) - logger->log(L"CGUITTFont", core::stringw(core::stringw(L"Creating new font: ") + core::stringw(filename) + L" " + core::stringc(size) + L"pt " + (antialias ? L"+antialias " : L"-antialias ") + (transparency ? L"+transparency" : L"-transparency")).c_str(), irr::ELL_INFORMATION); + logger->log("CGUITTFont", (core::stringc(L"Creating new font: ") + filename + " " + core::stringc(size) + "pt " + (antialias ? "+antialias " : "-antialias ") + (transparency ? "+transparency" : "-transparency")).c_str(), irr::ELL_INFORMATION); // Grab the face. SGUITTFace* face = 0; @@ -330,7 +300,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia io::IReadFile* file = filesystem->createAndOpenFile(filename); if (file == 0) { - if (logger) logger->log(L"CGUITTFont", L"Failed to open the file.", irr::ELL_INFORMATION); + if (logger) logger->log("CGUITTFont", "Failed to open the file.", irr::ELL_INFORMATION); c_faces.erase(filename); delete face; @@ -345,7 +315,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia // Create the face. if (FT_New_Memory_Face(c_library, face->face_buffer, face->face_buffer_size, 0, &face->face)) { - if (logger) logger->log(L"CGUITTFont", L"FT_New_Memory_Face failed.", irr::ELL_INFORMATION); + if (logger) logger->log("CGUITTFont", "FT_New_Memory_Face failed.", irr::ELL_INFORMATION); c_faces.erase(filename); delete face; @@ -357,7 +327,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia { if (FT_New_Face(c_library, reinterpret_cast(filename.c_str()), 0, &face->face)) { - if (logger) logger->log(L"CGUITTFont", L"FT_New_Face failed.", irr::ELL_INFORMATION); + if (logger) logger->log("CGUITTFont", "FT_New_Face failed.", irr::ELL_INFORMATION); c_faces.erase(filename); delete face; diff --git a/src/irrlicht_changes/CGUITTFont.h b/src/irrlicht_changes/CGUITTFont.h index 6fa45678a..b67d518ae 100644 --- a/src/irrlicht_changes/CGUITTFont.h +++ b/src/irrlicht_changes/CGUITTFont.h @@ -229,9 +229,6 @@ namespace gui //! \param transparency set the use_transparency flag //! \return Returns a pointer to a CGUITTFont. Will return 0 if the font failed to load. static CGUITTFont* createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true, const u32 shadow = 0, const u32 shadow_alpha = 255); - static CGUITTFont* createTTFont(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true); - static CGUITTFont* create(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true); - static CGUITTFont* create(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true); //! Destructor virtual ~CGUITTFont(); diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h index 343eba1dc..90f522017 100644 --- a/src/irrlichttypes.h +++ b/src/irrlichttypes.h @@ -29,33 +29,17 @@ with this program; if not, write to the Free Software Foundation, Inc., using namespace irr; -namespace irr { +#define S8_MIN INT8_MIN +#define S16_MIN INT16_MIN +#define S32_MIN INT32_MIN +#define S64_MIN INT64_MIN -// Define missing constant for vector math with 16-bit numbers -namespace core { - template - inline T roundingError(); +#define S8_MAX INT8_MAX +#define S16_MAX INT16_MAX +#define S32_MAX INT32_MAX +#define S64_MAX INT64_MAX - template <> - inline s16 roundingError() - { - return 0; - } -} - -} - -#define S8_MIN (-0x7F - 1) -#define S16_MIN (-0x7FFF - 1) -#define S32_MIN (-0x7FFFFFFF - 1) -#define S64_MIN (-0x7FFFFFFFFFFFFFFF - 1) - -#define S8_MAX 0x7F -#define S16_MAX 0x7FFF -#define S32_MAX 0x7FFFFFFF -#define S64_MAX 0x7FFFFFFFFFFFFFFF - -#define U8_MAX 0xFF -#define U16_MAX 0xFFFF -#define U32_MAX 0xFFFFFFFF -#define U64_MAX 0xFFFFFFFFFFFFFFFF +#define U8_MAX UINT8_MAX +#define U16_MAX UINT16_MAX +#define U32_MAX UINT32_MAX +#define U64_MAX UINT64_MAX diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 6de00803e..add80b3b2 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -234,8 +234,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION // Client's supported network protocol range -// The minimal version depends on whether -// send_pre_v25_init is enabled or not #define CLIENT_PROTOCOL_VERSION_MIN 37 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 5bcf0f228..61a4e52da 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -963,7 +963,12 @@ int ModApiMainMenu::l_get_active_driver(lua_State *L) int ModApiMainMenu::l_get_active_renderer(lua_State *L) { - lua_pushstring(L, wide_to_utf8(RenderingEngine::get_video_driver()->getName()).c_str()); +#if IRRLICHT_VERSION_MT_REVISION >= 15 + lua_pushstring(L, RenderingEngine::get_video_driver()->getName()); +#else + auto tmp = wide_to_utf8(RenderingEngine::get_video_driver()->getName()); + lua_pushstring(L, tmp.c_str()); +#endif return 1; } diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index d72383382..0806ffd73 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -515,8 +515,9 @@ void PlayerSAO::setHP(s32 target_hp, const PlayerHPChangeReason &reason, bool fr return; // Nothing to do s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, target_hp - (s32)m_hp, reason); + hp_change = std::min(hp_change, U16_MAX); // Protect against overflow - s32 hp = (s32)m_hp + std::min(hp_change, U16_MAX); // Protection against s32 overflow + s32 hp = (s32)m_hp + hp_change; hp = rangelim(hp, 0, U16_MAX); if (hp > m_prop.hp_max)