diff options
author | Hop311 <Hop3114@gmail.com> | 2023-09-23 22:53:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-23 22:53:40 +0200 |
commit | 0b4c30aa02c3ec1dacfc3ac190af4733531753ea (patch) | |
tree | 41aacf220a1f7085c81f2b0f522ad9f36991947b /extension/src/openvic-extension | |
parent | d56941e60016bf73587c63a36ac5ca9da3f6023e (diff) | |
parent | 6e2ba19d77c36ddc4767a20de040489b574ae0c3 (diff) |
Merge pull request #157 from OpenVicProject/more-dataloading
More dataloading
Diffstat (limited to 'extension/src/openvic-extension')
6 files changed, 64 insertions, 39 deletions
diff --git a/extension/src/openvic-extension/GameSingleton.cpp b/extension/src/openvic-extension/GameSingleton.cpp index a164b23..2d6f784 100644 --- a/extension/src/openvic-extension/GameSingleton.cpp +++ b/extension/src/openvic-extension/GameSingleton.cpp @@ -11,7 +11,7 @@ using namespace OpenVic; TerrainVariant::TerrainVariant(const std::string_view new_identfier, colour_t new_colour, Ref<Image> const& new_image) - : HasIdentifierAndColour { new_identfier, new_colour, true }, + : HasIdentifierAndColour { new_identfier, new_colour, true, false }, image { new_image } {} Ref<Image> TerrainVariant::get_image() const { @@ -43,7 +43,6 @@ void GameSingleton::_bind_methods() { ClassDB::bind_method(D_METHOD("set_selected_province", "index"), &GameSingleton::set_selected_province); ClassDB::bind_method(D_METHOD("expand_building", "province_index", "building_type_identifier"), &GameSingleton::expand_building); - ClassDB::bind_method(D_METHOD("get_good_icon_texture", "identifier"), &GameSingleton::get_good_icon_texture); ClassDB::bind_method(D_METHOD("set_paused", "paused"), &GameSingleton::set_paused); ClassDB::bind_method(D_METHOD("toggle_paused"), &GameSingleton::toggle_paused); @@ -133,7 +132,7 @@ Error GameSingleton::setup_game() { int32_t GameSingleton::get_province_index_from_uv_coords(Vector2 const& coords) const { const size_t x_mod_w = UtilityFunctions::fposmod(coords.x, 1.0f) * get_width(); const size_t y_mod_h = UtilityFunctions::fposmod(coords.y, 1.0f) * get_height(); - return game_manager.map.get_province_index_at(x_mod_w, y_mod_h); + return game_manager.get_map().get_province_index_at(x_mod_w, y_mod_h); } StringName const& GameSingleton::get_province_info_province_key() { @@ -219,7 +218,7 @@ Dictionary GameSingleton::_distribution_to_dictionary(distribution_t const& dist } Dictionary GameSingleton::get_province_info_from_index(int32_t index) const { - Province const* province = game_manager.map.get_province_by_index(index); + Province const* province = game_manager.get_map().get_province_by_index(index); if (province == nullptr) return {}; Dictionary ret; @@ -263,11 +262,11 @@ Dictionary GameSingleton::get_province_info_from_index(int32_t index) const { } int32_t GameSingleton::get_width() const { - return game_manager.map.get_width(); + return game_manager.get_map().get_width(); } int32_t GameSingleton::get_height() const { - return game_manager.map.get_height(); + return game_manager.get_map().get_height(); } float GameSingleton::get_aspect_ratio() const { @@ -296,7 +295,7 @@ Error GameSingleton::_update_colour_image() { colour_data_array.resize(colour_data_array_size); Error err = OK; - if (!game_manager.map.generate_mapmode_colours(mapmode_index, colour_data_array.ptrw())) + if (!game_manager.get_map().generate_mapmode_colours(mapmode_index, colour_data_array.ptrw())) err = FAILED; static constexpr int32_t PROVINCE_INDEX_SQRT = 1 << (sizeof(Province::index_t) * 4); @@ -316,17 +315,17 @@ Error GameSingleton::_update_colour_image() { } int32_t GameSingleton::get_mapmode_count() const { - return game_manager.map.get_mapmode_count(); + return game_manager.get_map().get_mapmode_count(); } String GameSingleton::get_mapmode_identifier(int32_t index) const { - Mapmode const* mapmode = game_manager.map.get_mapmode_by_index(index); + Mapmode const* mapmode = game_manager.get_map().get_mapmode_by_index(index); if (mapmode != nullptr) return std_to_godot_string(mapmode->get_identifier()); return String {}; } Error GameSingleton::set_mapmode(String const& identifier) { - Mapmode const* mapmode = game_manager.map.get_mapmode_by_identifier(godot_to_std_string(identifier)); + Mapmode const* mapmode = game_manager.get_map().get_mapmode_by_identifier(godot_to_std_string(identifier)); if (mapmode == nullptr) { UtilityFunctions::push_error("Failed to set mapmode to: ", identifier); return FAILED; @@ -337,11 +336,11 @@ Error GameSingleton::set_mapmode(String const& identifier) { } int32_t GameSingleton::get_selected_province_index() const { - return game_manager.map.get_selected_province_index(); + return game_manager.get_map().get_selected_province_index(); } void GameSingleton::set_selected_province(int32_t index) { - game_manager.map.set_selected_province(index); + game_manager.get_map().set_selected_province(index); _update_colour_image(); emit_signal("province_selected", index); } @@ -354,36 +353,32 @@ Error GameSingleton::expand_building(int32_t province_index, String const& build return OK; } -Ref<Texture> GameSingleton::get_good_icon_texture(String const& identifier) const { - return good_icons.get(identifier, {}); -} - void GameSingleton::set_paused(bool paused) { - game_manager.clock.isPaused = paused; + game_manager.get_clock().isPaused = paused; } void GameSingleton::toggle_paused() { - game_manager.clock.isPaused = !game_manager.clock.isPaused; + game_manager.get_clock().isPaused = !game_manager.get_clock().isPaused; } bool GameSingleton::is_paused() const { - return game_manager.clock.isPaused; + return game_manager.get_clock().isPaused; } void GameSingleton::increase_speed() { - game_manager.clock.increaseSimulationSpeed(); + game_manager.get_clock().increaseSimulationSpeed(); } void GameSingleton::decrease_speed() { - game_manager.clock.decreaseSimulationSpeed(); + game_manager.get_clock().decreaseSimulationSpeed(); } bool GameSingleton::can_increase_speed() const { - return game_manager.clock.canIncreaseSimulationSpeed(); + return game_manager.get_clock().canIncreaseSimulationSpeed(); } bool GameSingleton::can_decrease_speed() const { - return game_manager.clock.canDecreaseSimulationSpeed(); + return game_manager.get_clock().canDecreaseSimulationSpeed(); } String GameSingleton::get_longform_date() const { @@ -391,5 +386,5 @@ String GameSingleton::get_longform_date() const { } void GameSingleton::try_tick() { - game_manager.clock.conditionallyAdvanceGame(); + game_manager.get_clock().conditionallyAdvanceGame(); } diff --git a/extension/src/openvic-extension/GameSingleton.hpp b/extension/src/openvic-extension/GameSingleton.hpp index bd6b73c..4d9e912 100644 --- a/extension/src/openvic-extension/GameSingleton.hpp +++ b/extension/src/openvic-extension/GameSingleton.hpp @@ -41,7 +41,6 @@ namespace OpenVic { IdentifierRegistry<TerrainVariant> terrain_variants; Map::terrain_variant_map_t terrain_variant_map; godot::Ref<godot::Texture2DArray> terrain_texture; - godot::Dictionary good_icons; godot::Error _generate_terrain_texture_array(); godot::Error _load_map_images(godot::String const& province_image_path, godot::String const& terrain_image_path, bool flip_vertical = false); @@ -143,7 +142,6 @@ namespace OpenVic { void set_selected_province(int32_t index); godot::Error expand_building(int32_t province_index, godot::String const& building_type_identifier); - godot::Ref<godot::Texture> get_good_icon_texture(godot::String const& identifier) const; void set_paused(bool paused); void toggle_paused(); diff --git a/extension/src/openvic-extension/LoadGameCompatibility.cpp b/extension/src/openvic-extension/LoadGameCompatibility.cpp index e8e3314..b696315 100644 --- a/extension/src/openvic-extension/LoadGameCompatibility.cpp +++ b/extension/src/openvic-extension/LoadGameCompatibility.cpp @@ -5,6 +5,7 @@ #include <openvic-simulation/utility/BMP.hpp> +#include "openvic-extension/LoadLocalisation.hpp" #include "openvic-extension/Utilities.hpp" using namespace godot; @@ -83,7 +84,6 @@ Error GameSingleton::load_defines_compatibility_mode(PackedStringArray const& fi err = FAILED; } - game_manager.map.lock_regions(); if (_load_terrain_variants_compatibility_mode( std_to_godot_string(dataloader.lookup_file(terrain_image_file).string()), std_to_godot_string(dataloader.lookup_file(terrain_texture_file).string()) @@ -102,6 +102,11 @@ 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)) { + UtilityFunctions::push_error("Failed to load localisation!"); + err = FAILED; + } + return err; } diff --git a/extension/src/openvic-extension/LoadGameOpenVic.cpp b/extension/src/openvic-extension/LoadGameOpenVic.cpp index 87c66da..c34411c 100644 --- a/extension/src/openvic-extension/LoadGameOpenVic.cpp +++ b/extension/src/openvic-extension/LoadGameOpenVic.cpp @@ -86,7 +86,7 @@ Error GameSingleton::_load_map_images(String const& province_image_path, String if (err != OK) return err; // Generate interleaved province and terrain ID image - if (!game_manager.map.generate_province_shape_image(province_dims.x, province_dims.y, + if (!game_manager.get_map().generate_province_shape_image(province_dims.x, province_dims.y, province_image->get_data().ptr(), terrain_image->get_data().ptr(), terrain_variant_map, false /* <-- whether to print detailed map errors or not (specific missing/unrecognised colours) */ )) err = FAILED; @@ -97,7 +97,7 @@ Error GameSingleton::_load_map_images(String const& province_image_path, String for (image_subdivisions[i] = 1; province_dims[i] / image_subdivisions[i] > GPU_DIM_LIMIT || province_dims[i] % image_subdivisions[i] != 0; ++image_subdivisions[i]); - Map::shape_pixel_t const* province_shape_data = game_manager.map.get_province_shape_image().data(); + Map::shape_pixel_t const* province_shape_data = game_manager.get_map().get_province_shape_image().data(); const Vector2i divided_dims = province_dims / image_subdivisions; Array province_shape_images; province_shape_images.resize(image_subdivisions.x * image_subdivisions.y); diff --git a/extension/src/openvic-extension/LoadLocalisation.cpp b/extension/src/openvic-extension/LoadLocalisation.cpp index dc7702c..9ab7298 100644 --- a/extension/src/openvic-extension/LoadLocalisation.cpp +++ b/extension/src/openvic-extension/LoadLocalisation.cpp @@ -5,6 +5,8 @@ #include <godot_cpp/classes/translation_server.hpp> #include <godot_cpp/variant/utility_functions.hpp> +#include "openvic-extension/Utilities.hpp" + using namespace godot; using namespace OpenVic; @@ -30,7 +32,7 @@ LoadLocalisation::~LoadLocalisation() { singleton = nullptr; } -Error LoadLocalisation::_load_file_into_translation(String const& file_path, Ref<Translation> translation) { +Error LoadLocalisation::_load_file_into_translation(String const& file_path, Ref<Translation> translation) const { const Ref<FileAccess> file = FileAccess::open(file_path, FileAccess::ModeFlags::READ); Error err = FileAccess::get_open_error(); if (err != OK || file.is_null()) { @@ -57,7 +59,7 @@ Error LoadLocalisation::_load_file_into_translation(String const& file_path, Ref return err; } -Ref<Translation> LoadLocalisation::_get_translation(String const& locale) { +Ref<Translation> LoadLocalisation::_get_translation(String const& locale) const { TranslationServer* server = TranslationServer::get_singleton(); if (server == nullptr) { UtilityFunctions::push_error("Failed to get TranslationServer singleton"); @@ -72,14 +74,14 @@ Ref<Translation> LoadLocalisation::_get_translation(String const& locale) { return translation; } -Error LoadLocalisation::load_file(String const& file_path, String const& locale) { +Error LoadLocalisation::load_file(String const& file_path, String const& locale) const { return _load_file_into_translation(file_path, _get_translation(locale)); } /* REQUIREMENTS * FS-18, FS-24, FS-25 */ -Error LoadLocalisation::load_locale_dir(String const& dir_path, String const& locale) { +Error LoadLocalisation::load_locale_dir(String const& dir_path, String const& locale) const { if (!DirAccess::dir_exists_absolute(dir_path)) { UtilityFunctions::push_error("Locale directory does not exist: ", dir_path); return FAILED; @@ -109,7 +111,7 @@ Error LoadLocalisation::load_locale_dir(String const& dir_path, String const& lo /* REQUIREMENTS * FS-23 */ -Error LoadLocalisation::load_localisation_dir(String const& dir_path) { +Error LoadLocalisation::load_localisation_dir(String const& dir_path) const { if (!DirAccess::dir_exists_absolute(dir_path)) { UtilityFunctions::push_error("Localisation directory does not exist: ", dir_path); return FAILED; @@ -134,3 +136,24 @@ Error LoadLocalisation::load_localisation_dir(String const& dir_path) { } 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]); + if (translation.is_null()) { + UtilityFunctions::push_error("Failed to get translation object: ", Dataloader::locale_names[locale]); + return false; + } + } + const StringName godot_key = std_to_godot_string(std::string { key }); + const StringName godot_localisation = std_to_godot_string(std::string { localisation }); + if (0) { + const StringName old_localisation = translation->get_message(godot_key); + if (!old_localisation.is_empty()) { + UtilityFunctions::push_warning("Changing translation ", godot_key, " (", Dataloader::locale_names[locale], ") from \"", old_localisation, "\" to \"", godot_localisation, "\""); + } + } + translation->add_message(godot_key, godot_localisation); + return true; +} diff --git a/extension/src/openvic-extension/LoadLocalisation.hpp b/extension/src/openvic-extension/LoadLocalisation.hpp index 04ec5c7..4f09ef3 100644 --- a/extension/src/openvic-extension/LoadLocalisation.hpp +++ b/extension/src/openvic-extension/LoadLocalisation.hpp @@ -2,6 +2,8 @@ #include <godot_cpp/classes/translation.hpp> +#include <openvic-simulation/dataloader/Dataloader.hpp> + namespace OpenVic { class LoadLocalisation : public godot::Object { @@ -9,8 +11,8 @@ namespace OpenVic { static LoadLocalisation* singleton; - godot::Error _load_file_into_translation(godot::String const& file_path, godot::Ref<godot::Translation> translation); - godot::Ref<godot::Translation> _get_translation(godot::String const& locale); + godot::Error _load_file_into_translation(godot::String const& file_path, godot::Ref<godot::Translation> translation) const; + godot::Ref<godot::Translation> _get_translation(godot::String const& locale) const; protected: static void _bind_methods(); @@ -21,8 +23,10 @@ namespace OpenVic { LoadLocalisation(); ~LoadLocalisation(); - godot::Error load_file(godot::String const& file_path, godot::String const& locale); - godot::Error load_locale_dir(godot::String const& dir_path, godot::String const& locale); - godot::Error load_localisation_dir(godot::String const& dir_path); + godot::Error load_file(godot::String const& file_path, godot::String const& locale) const; + 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); }; } |