From 41d35fbecc9061720625cf2d6ef2b84a3a85272a Mon Sep 17 00:00:00 2001 From: hop311 Date: Mon, 8 Jan 2024 22:20:46 +0000 Subject: Updated SIM submodule and switched to ordered_map --- .../openvic-extension/singletons/AssetManager.cpp | 28 +++++++++++----------- .../openvic-extension/singletons/AssetManager.hpp | 7 +++--- .../openvic-extension/singletons/GameSingleton.cpp | 5 +++- .../openvic-extension/singletons/GameSingleton.hpp | 2 +- 4 files changed, 23 insertions(+), 19 deletions(-) (limited to 'extension/src/openvic-extension/singletons') diff --git a/extension/src/openvic-extension/singletons/AssetManager.cpp b/extension/src/openvic-extension/singletons/AssetManager.cpp index a81a0a2..546dc9d 100644 --- a/extension/src/openvic-extension/singletons/AssetManager.cpp +++ b/extension/src/openvic-extension/singletons/AssetManager.cpp @@ -45,34 +45,34 @@ Ref AssetManager::_load_image(StringName const& path) { return image; } -AssetManager::image_asset_map_t::iterator AssetManager::_get_image_asset(StringName const& path) { - const image_asset_map_t::iterator it = image_assets.find(path); +AssetManager::image_asset_t* AssetManager::_get_image_asset(StringName const& path) { + image_asset_map_t::iterator it = image_assets.find(path); if (it != image_assets.end()) { - return it; + return &it.value(); } const Ref image = _load_image(path); - ERR_FAIL_NULL_V(image, image_assets.end()); - return image_assets.emplace(std::move(path), AssetManager::image_asset_t { image, nullptr }).first; + ERR_FAIL_NULL_V(image, nullptr); + return &image_assets.emplace(std::move(path), AssetManager::image_asset_t { image, nullptr }).first.value(); } Ref AssetManager::get_image(StringName const& path, bool cache) { if (cache) { - const image_asset_map_t::const_iterator it = _get_image_asset(path); - ERR_FAIL_COND_V(it == image_assets.end(), nullptr); - return it->second.image; + image_asset_t const* asset = _get_image_asset(path); + ERR_FAIL_NULL_V(asset, nullptr); + return asset->image; } else { return _load_image(path); } } Ref AssetManager::get_texture(StringName const& path) { - const image_asset_map_t::iterator it = _get_image_asset(path); - ERR_FAIL_COND_V(it == image_assets.end(), nullptr); - if (it->second.texture.is_null()) { - it->second.texture = ImageTexture::create_from_image(it->second.image); - ERR_FAIL_NULL_V_MSG(it->second.texture, nullptr, vformat("Failed to turn image into texture: %s", path)); + image_asset_t* asset = _get_image_asset(path); + ERR_FAIL_NULL_V(asset, nullptr); + if (asset->texture.is_null()) { + asset->texture = ImageTexture::create_from_image(asset->image); + ERR_FAIL_NULL_V_MSG(asset->texture, nullptr, vformat("Failed to turn image into texture: %s", path)); } - return it->second.texture; + return asset->texture; } Ref AssetManager::get_font(StringName const& name) { diff --git a/extension/src/openvic-extension/singletons/AssetManager.hpp b/extension/src/openvic-extension/singletons/AssetManager.hpp index 40577ad..7f73e4c 100644 --- a/extension/src/openvic-extension/singletons/AssetManager.hpp +++ b/extension/src/openvic-extension/singletons/AssetManager.hpp @@ -17,14 +17,15 @@ namespace OpenVic { godot::Ref image; godot::Ref texture; }; - using image_asset_map_t = std::map; - using font_map_t = std::map>; + /* deque_ordered_map to avoid the need to reallocate. */ + using image_asset_map_t = deque_ordered_map; + using font_map_t = deque_ordered_map>; image_asset_map_t image_assets; font_map_t fonts; static godot::Ref _load_image(godot::StringName const& path); - image_asset_map_t::iterator _get_image_asset(godot::StringName const& path); + image_asset_t* _get_image_asset(godot::StringName const& path); protected: static void _bind_methods(); diff --git a/extension/src/openvic-extension/singletons/GameSingleton.cpp b/extension/src/openvic-extension/singletons/GameSingleton.cpp index e10efb3..8564d54 100644 --- a/extension/src/openvic-extension/singletons/GameSingleton.cpp +++ b/extension/src/openvic-extension/singletons/GameSingleton.cpp @@ -609,9 +609,12 @@ Error GameSingleton::_load_flag_images() { flag_types.emplace_back(std_to_godot_string_name(type)); } + flag_image_map.reserve(country_manager.get_countries().size()); + Error ret = OK; for (Country const& country : country_manager.get_countries()) { - std::map>& flag_images = flag_image_map[&country]; + ordered_map>& flag_images = flag_image_map[&country]; + flag_images.reserve(flag_types.size()); const String country_name = std_view_to_godot_string(country.get_identifier()); for (StringName const& flag_type : flag_types) { const StringName flag_path = diff --git a/extension/src/openvic-extension/singletons/GameSingleton.hpp b/extension/src/openvic-extension/singletons/GameSingleton.hpp index 5622688..047d14c 100644 --- a/extension/src/openvic-extension/singletons/GameSingleton.hpp +++ b/extension/src/openvic-extension/singletons/GameSingleton.hpp @@ -23,7 +23,7 @@ namespace OpenVic { godot::Ref province_colour_texture; Mapmode::index_t mapmode_index = 0; godot::Ref terrain_texture; - std::map>> flag_image_map; + ordered_map>> flag_image_map; static godot::StringName const& _signal_gamestate_updated(); static godot::StringName const& _signal_province_selected(); -- cgit v1.2.3-56-ga3b1