diff options
author | Spartan322 <Megacake1234@gmail.com> | 2023-12-03 18:33:37 +0100 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2023-12-05 22:25:02 +0100 |
commit | 291022316a4a3c742be92abd0d2b94256df60143 (patch) | |
tree | dc9a4d1a107902f0b4de21eeb503c4d901379ce0 /extension | |
parent | e01d332f407420db84fbfd207f18c3fec1c1b6a3 (diff) |
Update to Godot 4.2 Stable Release
Fix compiledb
Fix memory leak caused by LoadLocalisation::add_message's translations static variable
Diffstat (limited to 'extension')
3 files changed, 7 insertions, 3 deletions
diff --git a/extension/src/openvic-extension/singletons/GameSingleton.cpp b/extension/src/openvic-extension/singletons/GameSingleton.cpp index db3dd3f..4a80eb9 100644 --- a/extension/src/openvic-extension/singletons/GameSingleton.cpp +++ b/extension/src/openvic-extension/singletons/GameSingleton.cpp @@ -1,5 +1,7 @@ #include "GameSingleton.hpp" +#include <functional> + #include <godot_cpp/core/class_db.hpp> #include <godot_cpp/core/error_macros.hpp> #include <godot_cpp/variant/utility_functions.hpp> @@ -553,7 +555,8 @@ Error GameSingleton::load_defines_compatibility_mode(PackedStringArray const& fi UtilityFunctions::push_error("Failed to hardcoded defines!"); err = FAILED; } - if (!dataloader.load_localisation_files(LoadLocalisation::add_message)) { + auto add_message = std::bind_front(&LoadLocalisation::add_message, LoadLocalisation::get_singleton()); + if (!dataloader.load_localisation_files(add_message)) { UtilityFunctions::push_error("Failed to load localisation!"); err = FAILED; } diff --git a/extension/src/openvic-extension/singletons/LoadLocalisation.cpp b/extension/src/openvic-extension/singletons/LoadLocalisation.cpp index 96c67e8..3da8bc8 100644 --- a/extension/src/openvic-extension/singletons/LoadLocalisation.cpp +++ b/extension/src/openvic-extension/singletons/LoadLocalisation.cpp @@ -135,7 +135,6 @@ Error LoadLocalisation::load_localisation_dir(String const& dir_path) const { return err; } bool LoadLocalisation::add_message(std::string_view key, Dataloader::locale_t locale, std::string_view localisation) { - static Ref<Translation> translations[Dataloader::_LocaleCount] = { nullptr }; Ref<Translation>& translation = translations[locale]; if (translation.is_null()) { translation = _singleton->_get_translation(Dataloader::locale_names[locale]); diff --git a/extension/src/openvic-extension/singletons/LoadLocalisation.hpp b/extension/src/openvic-extension/singletons/LoadLocalisation.hpp index b093fdf..aeee076 100644 --- a/extension/src/openvic-extension/singletons/LoadLocalisation.hpp +++ b/extension/src/openvic-extension/singletons/LoadLocalisation.hpp @@ -10,6 +10,8 @@ namespace OpenVic { static inline LoadLocalisation* _singleton = nullptr; + godot::Ref<godot::Translation> translations[Dataloader::_LocaleCount]; + godot::Error _load_file(godot::String const& file_path, godot::Ref<godot::Translation> translation) const; godot::Ref<godot::Translation> _get_translation(godot::String const& locale) const; @@ -26,6 +28,6 @@ namespace OpenVic { godot::Error load_locale_dir(godot::String const& dir_path, godot::String const& locale) const; godot::Error load_localisation_dir(godot::String const& dir_path) const; - static bool add_message(std::string_view key, Dataloader::locale_t locale, std::string_view localisation); + bool add_message(std::string_view key, Dataloader::locale_t locale, std::string_view localisation); }; } |