diff options
author | Gone2Daly <71726742+Gone2Daly@users.noreply.github.com> | 2023-04-11 13:23:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-11 13:23:27 +0200 |
commit | 51dcd0c3e205c80d57da2e3d702cb612b77f4411 (patch) | |
tree | 2972153b188eca8a3a8d2c88357579b9a0169e90 /extension/src/MapSingleton.cpp | |
parent | c3034b0ecadeca4041796dc93d7080156f589fa2 (diff) | |
parent | 369880cb44a98853615326255d6e7e4356166b3b (diff) |
Merge pull request #85 from OpenVic2Project/minimap
Minimap with functionality
Diffstat (limited to 'extension/src/MapSingleton.cpp')
-rw-r--r-- | extension/src/MapSingleton.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/extension/src/MapSingleton.cpp b/extension/src/MapSingleton.cpp index 31cbd98..8c38926 100644 --- a/extension/src/MapSingleton.cpp +++ b/extension/src/MapSingleton.cpp @@ -14,7 +14,8 @@ void MapSingleton::_bind_methods() { ClassDB::bind_method(D_METHOD("load_region_file", "file_path"), &MapSingleton::load_region_file); ClassDB::bind_method(D_METHOD("load_province_shape_file", "file_path"), &MapSingleton::load_province_shape_file); - ClassDB::bind_method(D_METHOD("get_province_identifier_from_pixel_coords", "coords"), &MapSingleton::get_province_identifier_from_pixel_coords); + ClassDB::bind_method(D_METHOD("get_province_index_from_uv_coords", "coords"), &MapSingleton::get_province_index_from_uv_coords); + ClassDB::bind_method(D_METHOD("get_province_identifier_from_uv_coords", "coords"), &MapSingleton::get_province_identifier_from_uv_coords); ClassDB::bind_method(D_METHOD("get_width"), &MapSingleton::get_width); ClassDB::bind_method(D_METHOD("get_height"), &MapSingleton::get_height); ClassDB::bind_method(D_METHOD("get_province_index_image"), &MapSingleton::get_province_index_image); @@ -235,15 +236,37 @@ Error MapSingleton::load_province_shape_file(String const& file_path) { return err; } -String MapSingleton::get_province_identifier_from_pixel_coords(Vector2i const& coords) const { +Province* MapSingleton::get_province_from_uv_coords(godot::Vector2 const& coords) { if (province_index_image.is_valid()) { const PackedByteArray index_data_array = province_index_image->get_data(); Province::index_t const* index_data = reinterpret_cast<Province::index_t const*>(index_data_array.ptr()); - const int32_t x_mod_w = UtilityFunctions::posmod(coords.x, get_width()); - const int32_t y_mod_h = UtilityFunctions::posmod(coords.y, get_height()); - Province const* province = map.get_province_by_index(index_data[x_mod_w + y_mod_h * get_width()]); - if (province != nullptr) return province->get_identifier().c_str(); + const int32_t x_mod_w = UtilityFunctions::posmod(coords.x, 1.0f) * get_width(); + const int32_t y_mod_h = UtilityFunctions::posmod(coords.y, 1.0f) * get_height(); + return map.get_province_by_index(index_data[x_mod_w + y_mod_h * get_width()]); } + return nullptr; +} + +Province const* MapSingleton::get_province_from_uv_coords(godot::Vector2 const& coords) const { + if (province_index_image.is_valid()) { + const PackedByteArray index_data_array = province_index_image->get_data(); + Province::index_t const* index_data = reinterpret_cast<Province::index_t const*>(index_data_array.ptr()); + const int32_t x_mod_w = UtilityFunctions::posmod(coords.x, 1.0f) * get_width(); + const int32_t y_mod_h = UtilityFunctions::posmod(coords.y, 1.0f) * get_height(); + return map.get_province_by_index(index_data[x_mod_w + y_mod_h * get_width()]); + } + return nullptr; +} + +int32_t MapSingleton::get_province_index_from_uv_coords(Vector2 const& coords) const { + Province const* province = get_province_from_uv_coords(coords); + if (province != nullptr) return province->get_index(); + return Province::NULL_INDEX; +} + +String MapSingleton::get_province_identifier_from_uv_coords(Vector2 const& coords) const { + Province const* province = get_province_from_uv_coords(coords); + if (province != nullptr) return province->get_identifier().c_str(); return String{}; } |