diff options
author | George L. Albany <Megacake1234@gmail.com> | 2023-04-14 18:31:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-14 18:31:58 +0200 |
commit | 436b038c1806e326ff6458f1692e9009d3a54346 (patch) | |
tree | b5a33a733398b511eb0aa7781860c8accbadd2a0 /extension/src/MapSingleton.hpp | |
parent | 1f04a7827ae377372cb491ff0257a47d0d4c2967 (diff) | |
parent | 7241811bd8c9493b7b6c6480e8d63a5fb7f38e4e (diff) |
Merge pull request #84 from OpenVic2Project/terrain-map
Diffstat (limited to 'extension/src/MapSingleton.hpp')
-rw-r--r-- | extension/src/MapSingleton.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/extension/src/MapSingleton.hpp b/extension/src/MapSingleton.hpp new file mode 100644 index 0000000..9205e92 --- /dev/null +++ b/extension/src/MapSingleton.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include <functional> + +#include <godot_cpp/classes/image.hpp> + +#include "openvic2/Map.hpp" + +namespace OpenVic2 { + class MapSingleton : public godot::Object { + using parse_json_entry_func_t = std::function<godot::Error (godot::String const&, godot::Variant const&)>; + + GDCLASS(MapSingleton, godot::Object) + + static MapSingleton* singleton; + + godot::Ref<godot::Image> province_index_image, province_colour_image; + Map map; + Mapmode::index_t mapmode_index = 0; + + godot::Error parse_json_dictionary_file(godot::String const& file_description, godot::String const& file_path, + godot::String const& identifier_prefix, parse_json_entry_func_t parse_entry) const; + godot::Error _parse_province_identifier_entry(godot::String const& identifier, godot::Variant const& entry); + godot::Error _parse_region_entry(godot::String const& identifier, godot::Variant const& entry); + protected: + static void _bind_methods(); + + public: + static MapSingleton* get_singleton(); + + MapSingleton(); + ~MapSingleton(); + + godot::Error load_province_identifier_file(godot::String const& file_path); + godot::Error load_region_file(godot::String const& file_path); + godot::Error load_province_shape_file(godot::String const& file_path); + + Province* get_province_from_uv_coords(godot::Vector2 const& coords); + Province const* get_province_from_uv_coords(godot::Vector2 const& coords) const; + int32_t get_province_index_from_uv_coords(godot::Vector2 const& coords) const; + godot::String get_province_identifier_from_uv_coords(godot::Vector2 const& coords) const; + int32_t get_width() const; + int32_t get_height() const; + godot::Ref<godot::Image> get_province_index_image() const; + godot::Ref<godot::Image> get_province_colour_image() const; + + godot::Error update_colour_image(); + int32_t get_mapmode_count() const; + godot::String get_mapmode_identifier(int32_t index) const; + godot::Error set_mapmode(godot::String const& identifier); + }; +} |