aboutsummaryrefslogtreecommitdiff
path: root/extension/src/openvic-extension/GameSingleton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src/openvic-extension/GameSingleton.cpp')
-rw-r--r--extension/src/openvic-extension/GameSingleton.cpp184
1 files changed, 109 insertions, 75 deletions
diff --git a/extension/src/openvic-extension/GameSingleton.cpp b/extension/src/openvic-extension/GameSingleton.cpp
index b294691..877fb4a 100644
--- a/extension/src/openvic-extension/GameSingleton.cpp
+++ b/extension/src/openvic-extension/GameSingleton.cpp
@@ -16,70 +16,75 @@ using OpenVic::Utilities::godot_to_std_string;
GameSingleton* GameSingleton::singleton = nullptr;
+#define BM ClassDB::bind_method
+#define BSM ClassDB::bind_static_method
+
void GameSingleton::_bind_methods() {
- ClassDB::bind_static_method("GameSingleton", D_METHOD("setup_logger"), &GameSingleton::setup_logger);
- ClassDB::bind_method(D_METHOD("load_defines_compatibility_mode", "file_paths"), &GameSingleton::load_defines_compatibility_mode);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("search_for_game_path", "hint_path"), &GameSingleton::search_for_game_path, DEFVAL(String{}));
- ClassDB::bind_method(D_METHOD("lookup_file", "path"), &GameSingleton::lookup_file);
- ClassDB::bind_method(D_METHOD("setup_game"), &GameSingleton::setup_game);
-
- ClassDB::bind_method(D_METHOD("get_province_index_from_uv_coords", "coords"), &GameSingleton::get_province_index_from_uv_coords);
- ClassDB::bind_method(D_METHOD("get_province_info_from_index", "index"), &GameSingleton::get_province_info_from_index);
- ClassDB::bind_method(D_METHOD("get_width"), &GameSingleton::get_width);
- ClassDB::bind_method(D_METHOD("get_height"), &GameSingleton::get_height);
- ClassDB::bind_method(D_METHOD("get_aspect_ratio"), &GameSingleton::get_aspect_ratio);
- ClassDB::bind_method(D_METHOD("get_terrain_texture"), &GameSingleton::get_terrain_texture);
- ClassDB::bind_method(D_METHOD("get_province_shape_image_subdivisions"), &GameSingleton::get_province_shape_image_subdivisions);
- ClassDB::bind_method(D_METHOD("get_province_shape_texture"), &GameSingleton::get_province_shape_texture);
- ClassDB::bind_method(D_METHOD("get_province_colour_texture"), &GameSingleton::get_province_colour_texture);
-
- ClassDB::bind_method(D_METHOD("get_mapmode_count"), &GameSingleton::get_mapmode_count);
- ClassDB::bind_method(D_METHOD("get_mapmode_identifier", "index"), &GameSingleton::get_mapmode_identifier);
- ClassDB::bind_method(D_METHOD("set_mapmode", "identifier"), &GameSingleton::set_mapmode);
- ClassDB::bind_method(D_METHOD("get_selected_province_index"), &GameSingleton::get_selected_province_index);
- ClassDB::bind_method(D_METHOD("set_selected_province", "index"), &GameSingleton::set_selected_province);
-
- ClassDB::bind_method(D_METHOD("expand_building", "province_index", "building_type_identifier"), &GameSingleton::expand_building);
-
- ClassDB::bind_method(D_METHOD("set_paused", "paused"), &GameSingleton::set_paused);
- ClassDB::bind_method(D_METHOD("toggle_paused"), &GameSingleton::toggle_paused);
- ClassDB::bind_method(D_METHOD("is_paused"), &GameSingleton::is_paused);
- ClassDB::bind_method(D_METHOD("increase_speed"), &GameSingleton::increase_speed);
- ClassDB::bind_method(D_METHOD("decrease_speed"), &GameSingleton::decrease_speed);
- ClassDB::bind_method(D_METHOD("can_increase_speed"), &GameSingleton::can_increase_speed);
- ClassDB::bind_method(D_METHOD("can_decrease_speed"), &GameSingleton::can_decrease_speed);
- ClassDB::bind_method(D_METHOD("get_longform_date"), &GameSingleton::get_longform_date);
- ClassDB::bind_method(D_METHOD("try_tick"), &GameSingleton::try_tick);
+ BSM("GameSingleton", D_METHOD("setup_logger"), &GameSingleton::setup_logger);
+ BM(D_METHOD("load_defines_compatibility_mode", "file_paths"), &GameSingleton::load_defines_compatibility_mode);
+ BSM("GameSingleton", D_METHOD("search_for_game_path", "hint_path"), &GameSingleton::search_for_game_path, DEFVAL(String{}));
+ BM(D_METHOD("lookup_file", "path"), &GameSingleton::lookup_file);
+ BM(D_METHOD("setup_game"), &GameSingleton::setup_game);
+
+ BM(D_METHOD("get_province_index_from_uv_coords", "coords"), &GameSingleton::get_province_index_from_uv_coords);
+ BM(D_METHOD("get_province_info_from_index", "index"), &GameSingleton::get_province_info_from_index);
+ BM(D_METHOD("get_width"), &GameSingleton::get_width);
+ BM(D_METHOD("get_height"), &GameSingleton::get_height);
+ BM(D_METHOD("get_aspect_ratio"), &GameSingleton::get_aspect_ratio);
+ BM(D_METHOD("get_terrain_texture"), &GameSingleton::get_terrain_texture);
+ BM(D_METHOD("get_province_shape_image_subdivisions"), &GameSingleton::get_province_shape_image_subdivisions);
+ BM(D_METHOD("get_province_shape_texture"), &GameSingleton::get_province_shape_texture);
+ BM(D_METHOD("get_province_colour_texture"), &GameSingleton::get_province_colour_texture);
+
+ BM(D_METHOD("get_mapmode_count"), &GameSingleton::get_mapmode_count);
+ BM(D_METHOD("get_mapmode_identifier", "index"), &GameSingleton::get_mapmode_identifier);
+ BM(D_METHOD("set_mapmode", "identifier"), &GameSingleton::set_mapmode);
+ BM(D_METHOD("get_selected_province_index"), &GameSingleton::get_selected_province_index);
+ BM(D_METHOD("set_selected_province", "index"), &GameSingleton::set_selected_province);
+
+ BM(D_METHOD("expand_building", "province_index", "building_type_identifier"), &GameSingleton::expand_building);
+
+ BM(D_METHOD("set_paused", "paused"), &GameSingleton::set_paused);
+ BM(D_METHOD("toggle_paused"), &GameSingleton::toggle_paused);
+ BM(D_METHOD("is_paused"), &GameSingleton::is_paused);
+ BM(D_METHOD("increase_speed"), &GameSingleton::increase_speed);
+ BM(D_METHOD("decrease_speed"), &GameSingleton::decrease_speed);
+ BM(D_METHOD("can_increase_speed"), &GameSingleton::can_increase_speed);
+ BM(D_METHOD("can_decrease_speed"), &GameSingleton::can_decrease_speed);
+ BM(D_METHOD("get_longform_date"), &GameSingleton::get_longform_date);
+ BM(D_METHOD("try_tick"), &GameSingleton::try_tick);
ADD_SIGNAL(MethodInfo("state_updated"));
ADD_SIGNAL(MethodInfo("province_selected", PropertyInfo(Variant::INT, "index")));
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_province_key"), &GameSingleton::get_province_info_province_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_region_key"), &GameSingleton::get_province_info_region_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_life_rating_key"), &GameSingleton::get_province_info_life_rating_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_terrain_type_key"), &GameSingleton::get_province_info_terrain_type_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_total_population_key"), &GameSingleton::get_province_info_total_population_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_pop_types_key"), &GameSingleton::get_province_info_pop_types_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_pop_ideologies_key"), &GameSingleton::get_province_info_pop_ideologies_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_pop_cultures_key"), &GameSingleton::get_province_info_pop_cultures_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_rgo_key"), &GameSingleton::get_province_info_rgo_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_province_info_buildings_key"), &GameSingleton::get_province_info_buildings_key);
-
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_building_key"), &GameSingleton::get_building_info_building_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_level_key"), &GameSingleton::get_building_info_level_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_expansion_state_key"), &GameSingleton::get_building_info_expansion_state_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_start_date_key"), &GameSingleton::get_building_info_start_date_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_end_date_key"), &GameSingleton::get_building_info_end_date_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_building_info_expansion_progress_key"), &GameSingleton::get_building_info_expansion_progress_key);
-
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_piechart_info_size_key"), &GameSingleton::get_piechart_info_size_key);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("get_piechart_info_colour_key"), &GameSingleton::get_piechart_info_colour_key);
-
- ClassDB::bind_static_method("GameSingleton", D_METHOD("draw_pie_chart", "image", "stopAngles", "colours", "radius",
+ BSM("GameSingleton", D_METHOD("get_province_info_province_key"), &GameSingleton::get_province_info_province_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_region_key"), &GameSingleton::get_province_info_region_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_life_rating_key"), &GameSingleton::get_province_info_life_rating_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_terrain_type_key"), &GameSingleton::get_province_info_terrain_type_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_total_population_key"),
+ &GameSingleton::get_province_info_total_population_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_pop_types_key"), &GameSingleton::get_province_info_pop_types_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_pop_ideologies_key"), &GameSingleton::get_province_info_pop_ideologies_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_pop_cultures_key"), &GameSingleton::get_province_info_pop_cultures_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_rgo_key"), &GameSingleton::get_province_info_rgo_key);
+ BSM("GameSingleton", D_METHOD("get_province_info_buildings_key"), &GameSingleton::get_province_info_buildings_key);
+
+ BSM("GameSingleton", D_METHOD("get_building_info_building_key"), &GameSingleton::get_building_info_building_key);
+ BSM("GameSingleton", D_METHOD("get_building_info_level_key"), &GameSingleton::get_building_info_level_key);
+ BSM("GameSingleton", D_METHOD("get_building_info_expansion_state_key"), &GameSingleton::get_building_info_expansion_state_key);
+ BSM("GameSingleton", D_METHOD("get_building_info_start_date_key"), &GameSingleton::get_building_info_start_date_key);
+ BSM("GameSingleton", D_METHOD("get_building_info_end_date_key"), &GameSingleton::get_building_info_end_date_key);
+ BSM("GameSingleton", D_METHOD("get_building_info_expansion_progress_key"),
+ &GameSingleton::get_building_info_expansion_progress_key);
+
+ BSM("GameSingleton", D_METHOD("get_piechart_info_size_key"), &GameSingleton::get_piechart_info_size_key);
+ BSM("GameSingleton", D_METHOD("get_piechart_info_colour_key"), &GameSingleton::get_piechart_info_colour_key);
+
+ BSM("GameSingleton", D_METHOD("draw_pie_chart", "image", "stopAngles", "colours", "radius",
"shadow_displacement", "shadow_tightness", "shadow_radius", "shadow_thickness",
"trim_colour", "trim_size", "gradient_falloff", "gradient_base",
"donut", "donut_inner_trim", "donut_inner_radius"), &GameSingleton::draw_pie_chart);
- ClassDB::bind_static_method("GameSingleton", D_METHOD("load_image", "path"), &GameSingleton::load_image);
+ BSM("GameSingleton", D_METHOD("load_image", "path"), &GameSingleton::load_image);
}
void GameSingleton::draw_pie_chart(Ref<Image> image,
@@ -88,7 +93,8 @@ void GameSingleton::draw_pie_chart(Ref<Image> image,
Color trim_colour, float trim_size, float gradient_falloff, float gradient_base,
bool donut, bool donut_inner_trim, float donut_inner_radius) {
- Utilities::draw_pie_chart(image, stopAngles, colours, radius, shadow_displacement, shadow_tightness, shadow_radius, shadow_thickness,
+ Utilities::draw_pie_chart(image, stopAngles, colours, radius, shadow_displacement,
+ shadow_tightness, shadow_radius, shadow_thickness,
trim_colour, trim_size, gradient_falloff, gradient_base,
donut, donut_inner_trim, donut_inner_radius);
}
@@ -109,15 +115,24 @@ void GameSingleton::_on_state_updated() {
/* REQUIREMENTS:
* MAP-21, MAP-23, MAP-25, MAP-32, MAP-33, MAP-34
*/
-GameSingleton::GameSingleton() : game_manager { [this]() { _on_state_updated(); } } {
+GameSingleton::GameSingleton() : game_manager {
+ [this]() {
+ _on_state_updated();
+ } } {
ERR_FAIL_COND(singleton != nullptr);
singleton = this;
}
void GameSingleton::setup_logger() {
- Logger::set_info_func([](std::string&& str) { UtilityFunctions::print(std_to_godot_string(str)); });
- Logger::set_warning_func([](std::string&& str) { UtilityFunctions::push_warning(std_to_godot_string(str)); });
- Logger::set_error_func([](std::string&& str) { UtilityFunctions::push_error(std_to_godot_string(str)); });
+ Logger::set_info_func([](std::string&& str) {
+ UtilityFunctions::print(std_to_godot_string(str));
+ });
+ Logger::set_warning_func([](std::string&& str) {
+ UtilityFunctions::push_warning(std_to_godot_string(str));
+ });
+ Logger::set_error_func([](std::string&& str) {
+ UtilityFunctions::push_error(std_to_godot_string(str));
+ });
}
GameSingleton::~GameSingleton() {
@@ -231,23 +246,33 @@ Dictionary GameSingleton::get_province_info_from_index(int32_t index) const {
ret[get_province_info_province_key()] = std_view_to_godot_string(province->get_identifier());
Region const* region = province->get_region();
- if (region != nullptr) ret[get_province_info_region_key()] = std_view_to_godot_string(region->get_identifier());
+ if (region != nullptr) {
+ ret[get_province_info_region_key()] = std_view_to_godot_string(region->get_identifier());
+ }
Good const* rgo = province->get_rgo();
- if (rgo != nullptr) ret[get_province_info_rgo_key()] = std_view_to_godot_string(rgo->get_identifier());
+ if (rgo != nullptr) {
+ ret[get_province_info_rgo_key()] = std_view_to_godot_string(rgo->get_identifier());
+ }
ret[get_province_info_life_rating_key()] = province->get_life_rating();
TerrainType const* terrain_type = province->get_terrain_type();
- if (terrain_type != nullptr) ret[get_province_info_terrain_type_key()] = std_view_to_godot_string(terrain_type->get_identifier());
+ if (terrain_type != nullptr) {
+ ret[get_province_info_terrain_type_key()] = std_view_to_godot_string(terrain_type->get_identifier());
+ }
ret[get_province_info_total_population_key()] = province->get_total_population();
distribution_t const& pop_types = province->get_pop_type_distribution();
- if (!pop_types.empty()) ret[get_province_info_pop_types_key()] = _distribution_to_dictionary(pop_types);
+ if (!pop_types.empty()) {
+ ret[get_province_info_pop_types_key()] = _distribution_to_dictionary(pop_types);
+ }
//distribution_t const& ideologies = province->get_ideology_distribution();
//if (!ideologies.empty()) ret[get_province_info_pop_ideologies_key()] = _distribution_to_dictionary(ideologies);
distribution_t const& cultures = province->get_culture_distribution();
- if (!cultures.empty()) ret[get_province_info_pop_cultures_key()] = _distribution_to_dictionary(cultures);
+ if (!cultures.empty()) {
+ ret[get_province_info_pop_cultures_key()] = _distribution_to_dictionary(cultures);
+ }
std::vector<BuildingInstance> const& buildings = province->get_buildings();
if (!buildings.empty()) {
@@ -305,8 +330,9 @@ Error GameSingleton::_update_colour_image() {
colour_data_array.resize(colour_data_array_size);
Error err = OK;
- if (!game_manager.get_map().generate_mapmode_colours(mapmode_index, colour_data_array.ptrw()))
+ if (!game_manager.get_map().generate_mapmode_colours(mapmode_index, colour_data_array.ptrw())) {
err = FAILED;
+ }
static constexpr int32_t PROVINCE_INDEX_SQRT = 1 << (sizeof(Province::index_t) * 4);
if (province_colour_image.is_null()) {
@@ -320,7 +346,9 @@ Error GameSingleton::_update_colour_image() {
province_colour_texture = ImageTexture::create_from_image(province_colour_image);
ERR_FAIL_NULL_V_EDMSG(province_colour_texture, FAILED,
"Failed to create province colour texture");
- } else province_colour_texture->update(province_colour_image);
+ } else {
+ province_colour_texture->update(province_colour_image);
+ }
return err;
}
@@ -330,7 +358,9 @@ int32_t GameSingleton::get_mapmode_count() const {
String GameSingleton::get_mapmode_identifier(int32_t index) const {
Mapmode const* mapmode = game_manager.get_map().get_mapmode_by_index(index);
- if (mapmode != nullptr) return std_view_to_godot_string(mapmode->get_identifier());
+ if (mapmode != nullptr) {
+ return std_view_to_godot_string(mapmode->get_identifier());
+ }
return String {};
}
@@ -431,7 +461,9 @@ Error GameSingleton::_load_map_images(bool flip_vertical) {
province_shape_data + (v * divided_dims.y + y) * province_dims.x + u * divided_dims.x,
divided_dims.x * sizeof(Map::shape_pixel_t));
- const Ref<Image> province_shape_subimage = Image::create_from_data(divided_dims.x, divided_dims.y, false, Image::FORMAT_RGB8, index_data_array);
+ const Ref<Image> province_shape_subimage = Image::create_from_data(
+ divided_dims.x, divided_dims.y,
+ false, Image::FORMAT_RGB8, index_data_array);
if (province_shape_subimage.is_null()) {
UtilityFunctions::push_error("Failed to create province shape image (", u, ", ", v, ")");
err = FAILED;
@@ -446,7 +478,9 @@ Error GameSingleton::_load_map_images(bool flip_vertical) {
err = FAILED;
}
- if (_update_colour_image() != OK) err = FAILED;
+ if (_update_colour_image() != OK) {
+ err = FAILED;
+ }
return err;
}
@@ -463,7 +497,8 @@ Error GameSingleton::_load_terrain_variants_compatibility_mode(String const& ter
terrain_sheet->flip_y();
const int32_t sheet_width = terrain_sheet->get_width(), sheet_height = terrain_sheet->get_height();
if (sheet_width < 1 || sheet_width % SHEET_DIMS != 0 || sheet_width != sheet_height) {
- UtilityFunctions::push_error("Invalid terrain texture sheet dims: ", sheet_width, "x", sheet_height, " (must be square with dims positive multiples of ", SHEET_DIMS, ")");
+ UtilityFunctions::push_error("Invalid terrain texture sheet dims: ", sheet_width, "x", sheet_height,
+ " (must be square with dims positive multiples of ", SHEET_DIMS, ")");
return FAILED;
}
const int32_t slice_size = sheet_width / SHEET_DIMS;
@@ -513,9 +548,8 @@ Error GameSingleton::load_defines_compatibility_mode(PackedStringArray const& fi
UtilityFunctions::push_error("Failed to load defines!");
err = FAILED;
}
- if (_load_terrain_variants_compatibility_mode(
- std_to_godot_string(dataloader.lookup_file(terrain_texture_file).string())
- ) != OK) {
+ if (_load_terrain_variants_compatibility_mode(std_to_godot_string(
+ dataloader.lookup_file(terrain_texture_file).string())) != OK) {
UtilityFunctions::push_error("Failed to load terrain variants!");
err = FAILED;
}