aboutsummaryrefslogtreecommitdiff
path: root/extension/src/openvic-extension
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-01-19 14:02:05 +0100
committer hop311 <hop3114@gmail.com>2024-01-19 14:02:05 +0100
commit32dbfc1107b59085ba78929102f313b88c34a6a3 (patch)
tree68f95c20c21c67f46af9801bb07d57de7e0f9617 /extension/src/openvic-extension
parent7acaf673f0465dcfa35b86bfbaf5dc0f83f2fc00 (diff)
Added overlay parchment map and refactored map shader
Diffstat (limited to 'extension/src/openvic-extension')
-rw-r--r--extension/src/openvic-extension/singletons/GameSingleton.cpp22
-rw-r--r--extension/src/openvic-extension/singletons/GameSingleton.hpp7
2 files changed, 20 insertions, 9 deletions
diff --git a/extension/src/openvic-extension/singletons/GameSingleton.cpp b/extension/src/openvic-extension/singletons/GameSingleton.cpp
index 2730352..f9a6b9d 100644
--- a/extension/src/openvic-extension/singletons/GameSingleton.cpp
+++ b/extension/src/openvic-extension/singletons/GameSingleton.cpp
@@ -62,6 +62,7 @@ void GameSingleton::_bind_methods() {
OV_BIND_METHOD(GameSingleton::get_mapmode_count);
OV_BIND_METHOD(GameSingleton::get_mapmode_identifier);
OV_BIND_METHOD(GameSingleton::set_mapmode, { "identifier" });
+ OV_BIND_METHOD(GameSingleton::is_parchment_mapmode_allowed);
OV_BIND_METHOD(GameSingleton::get_selected_province_index);
OV_BIND_METHOD(GameSingleton::set_selected_province, { "index" });
@@ -286,7 +287,7 @@ float GameSingleton::get_map_aspect_ratio() const {
return static_cast<float>(get_map_width()) / static_cast<float>(get_map_height());
}
-Ref<Texture> GameSingleton::get_terrain_texture() const {
+Ref<Texture2DArray> GameSingleton::get_terrain_texture() const {
return terrain_texture;
}
@@ -309,11 +310,11 @@ Vector2i GameSingleton::get_province_shape_image_subdivisions() const {
return image_subdivisions;
}
-Ref<Texture> GameSingleton::get_province_shape_texture() const {
+Ref<Texture2DArray> GameSingleton::get_province_shape_texture() const {
return province_shape_texture;
}
-Ref<Texture> GameSingleton::get_province_colour_texture() const {
+Ref<ImageTexture> GameSingleton::get_province_colour_texture() const {
return province_colour_texture;
}
@@ -375,6 +376,15 @@ Error GameSingleton::set_mapmode(String const& identifier) {
return _update_colour_image();
}
+bool GameSingleton::is_parchment_mapmode_allowed() const {
+ // TODO - parchment bool per mapmode?
+ // TODO - move mapmode index to SIM/Map?
+ /* Disallows parchment mapmode for the cosmetic terrain mapmode */
+ static constexpr std::string_view cosmetic_terrain_mapmode = "mapmode_terrain";
+ Mapmode const* mapmode = game_manager.get_map().get_mapmode_by_index(mapmode_index);
+ return mapmode != nullptr && mapmode->get_identifier() != cosmetic_terrain_mapmode;
+}
+
int32_t GameSingleton::get_selected_province_index() const {
return game_manager.get_map().get_selected_province_index();
}
@@ -555,10 +565,10 @@ Error GameSingleton::_load_terrain_variants() {
TypedArray<Image> terrain_images;
{
- // TODO - load "map/terrain/water.dds" instead of using a solid colour (issue is that it's 512x512
- // while the texturesheet slices are 256x256, so they can't share a Texture2DArray)
+ /* This is a placeholder image so that we don't have to branch to avoid looking up terrain index 0 (water).
+ * It should never appear in game, and so is bright red to to make it obvious if it slips through. */
const Ref<Image> water_image = Utilities::make_solid_colour_image(
- { 0.1f, 0.1f, 0.5f }, slice_size, slice_size, terrain_sheet->get_format()
+ { 1.0f, 0.0f, 0.0f }, slice_size, slice_size, terrain_sheet->get_format()
);
ERR_FAIL_NULL_V_EDMSG(water_image, FAILED, "Failed to create water terrain image");
terrain_images.append(water_image);
diff --git a/extension/src/openvic-extension/singletons/GameSingleton.hpp b/extension/src/openvic-extension/singletons/GameSingleton.hpp
index 913bdd4..57a2014 100644
--- a/extension/src/openvic-extension/singletons/GameSingleton.hpp
+++ b/extension/src/openvic-extension/singletons/GameSingleton.hpp
@@ -73,7 +73,7 @@ namespace OpenVic {
float get_map_aspect_ratio() const;
/* The cosmetic terrain textures stored in a Texture2DArray. */
- godot::Ref<godot::Texture> get_terrain_texture() const;
+ godot::Ref<godot::Texture2DArray> get_terrain_texture() const;
/* The flag image corresponding to the requested country / flag_type
* combination, or nullptr if no such flag can be found. */
@@ -87,14 +87,15 @@ namespace OpenVic {
/* The map, encoded in RGB8 with RG representing province index and B representing terrain texture.
* To support a wider range of GPUs, the image is divided so that no piece has a dimension
* greater than 16383 and the pieces are stored in a Texture2DArray. */
- godot::Ref<godot::Texture> get_province_shape_texture() const;
+ godot::Ref<godot::Texture2DArray> get_province_shape_texture() const;
/* The base and stripe colours for each province. */
- godot::Ref<godot::Texture> get_province_colour_texture() const;
+ godot::Ref<godot::ImageTexture> get_province_colour_texture() const;
int32_t get_mapmode_count() const;
godot::String get_mapmode_identifier(int32_t index) const;
godot::Error set_mapmode(godot::String const& identifier);
+ bool is_parchment_mapmode_allowed() const;
int32_t get_selected_province_index() const;
void set_selected_province(int32_t index);