aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extension/src/MapSingleton.cpp16
-rw-r--r--extension/src/MapSingleton.hpp6
-rw-r--r--extension/src/openvic2/Map.cpp2
-rw-r--r--extension/src/openvic2/Map.hpp11
4 files changed, 23 insertions, 12 deletions
diff --git a/extension/src/MapSingleton.cpp b/extension/src/MapSingleton.cpp
index 982ad78..31cbd98 100644
--- a/extension/src/MapSingleton.cpp
+++ b/extension/src/MapSingleton.cpp
@@ -59,7 +59,7 @@ MapSingleton::~MapSingleton() {
}
Error MapSingleton::parse_json_dictionary_file(String const& file_description, String const& file_path,
- String const& identifier_prefix, parse_json_entry_func_t parse_entry) {
+ String const& identifier_prefix, parse_json_entry_func_t parse_entry) const {
UtilityFunctions::print("Loading ", file_description, " file: ", file_path);
Ref<FileAccess> file = FileAccess::open(file_path, FileAccess::ModeFlags::READ);
Error err = FileAccess::get_open_error();
@@ -95,7 +95,7 @@ Error MapSingleton::parse_json_dictionary_file(String const& file_description, S
}
if (!identifier.begins_with(identifier_prefix))
UtilityFunctions::push_warning("Identifier in ", file_description, " file missing \"", identifier_prefix, "\" prefix: ", identifier);
- if ((this->*parse_entry)(identifier, entry) != OK) err = FAILED;
+ if (parse_entry(identifier, entry) != OK) err = FAILED;
}
return err;
}
@@ -145,8 +145,10 @@ Error MapSingleton::_parse_province_identifier_entry(String const& identifier, V
}
Error MapSingleton::load_province_identifier_file(String const& file_path) {
- const Error err = parse_json_dictionary_file("province identifier",
- file_path, "prov_", &MapSingleton::_parse_province_identifier_entry);
+ const Error err = parse_json_dictionary_file("province identifier", file_path, "prov_",
+ [this](String const& identifier, Variant const& entry) -> Error {
+ return this->_parse_province_identifier_entry(identifier, entry);
+ });
map.lock_provinces();
return err;
}
@@ -178,8 +180,10 @@ Error MapSingleton::_parse_region_entry(String const& identifier, Variant const&
}
Error MapSingleton::load_region_file(String const& file_path) {
- const Error err = parse_json_dictionary_file("region",
- file_path, "region_", &MapSingleton::_parse_region_entry);
+ const Error err = parse_json_dictionary_file("region", file_path, "region_",
+ [this](String const& identifier, Variant const& entry) -> Error {
+ return this->_parse_region_entry(identifier, entry);
+ });
map.lock_regions();
return err;
}
diff --git a/extension/src/MapSingleton.hpp b/extension/src/MapSingleton.hpp
index 55d2883..7d50d55 100644
--- a/extension/src/MapSingleton.hpp
+++ b/extension/src/MapSingleton.hpp
@@ -1,12 +1,14 @@
#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 = godot::Error (MapSingleton::*)(godot::String const& identifier, godot::Variant const& entry);
+ using parse_json_entry_func_t = std::function<godot::Error (godot::String const&, godot::Variant const&)>;
GDCLASS(MapSingleton, godot::Object)
@@ -17,7 +19,7 @@ namespace OpenVic2 {
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);
+ 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:
diff --git a/extension/src/openvic2/Map.cpp b/extension/src/openvic2/Map.cpp
index 921f371..1654189 100644
--- a/extension/src/openvic2/Map.cpp
+++ b/extension/src/openvic2/Map.cpp
@@ -297,7 +297,7 @@ return_t Map::generate_mapmode_colours(Mapmode::index_t index, uint8_t* target,
Mapmode const& mapmode = mapmodes[index];
target += 3; // Skip past Province::NULL_INDEX
for (Province const& province : provinces) {
- const Province::colour_t colour = (*mapmode.get_colour_func())(*this, province);
+ const Province::colour_t colour = mapmode.get_colour_func()(*this, province);
*target++ = (colour >> 16) & 0xFF;
*target++ = (colour >> 8) & 0xFF;
*target++ = colour & 0xFF;
diff --git a/extension/src/openvic2/Map.hpp b/extension/src/openvic2/Map.hpp
index 2fa8bc8..20e8a92 100644
--- a/extension/src/openvic2/Map.hpp
+++ b/extension/src/openvic2/Map.hpp
@@ -3,16 +3,20 @@
#include <string>
#include <cstdint>
#include <vector>
+#include <functional>
#include "Types.hpp"
namespace OpenVic2 {
struct Region;
+ struct Map;
struct Province {
+ friend struct Map;
+
using colour_t = uint32_t;
using index_t = uint16_t;
- friend struct Map;
+
static const colour_t NULL_COLOUR = 0, MAX_COLOUR = 0xFFFFFF;
static const index_t NULL_INDEX = 0, MAX_INDEX = 0xFFFF;
private:
@@ -47,9 +51,10 @@ namespace OpenVic2 {
};
struct Mapmode {
- using colour_func_t = Province::colour_t (*)(Map const& map, Province const& province);
- using index_t = size_t;
friend struct Map;
+
+ using colour_func_t = std::function<Province::colour_t (Map const&, Province const&)>;
+ using index_t = size_t;
private:
index_t index;
std::string identifier;