diff options
m--------- | extension/deps/openvic-simulation | 0 | ||||
-rw-r--r-- | extension/src/GameSingleton.cpp | 2 | ||||
-rw-r--r-- | extension/src/GameSingleton.hpp | 2 | ||||
-rw-r--r-- | extension/src/LoadGameCompatibility.cpp | 80 | ||||
-rw-r--r-- | extension/src/LoadGameOpenVic.cpp | 12 | ||||
-rw-r--r-- | game/src/Game/Autoload/GuiScale.gd | 10 | ||||
-rw-r--r-- | game/src/Game/GameStart.gd | 9 | ||||
-rw-r--r-- | game/src/Game/GameStart.tscn | 3 | ||||
-rw-r--r-- | game/src/Game/LoadingScreen.gd | 10 | ||||
-rw-r--r-- | game/src/Game/Menu/OptionMenu/GuiScaleSelector.gd | 2 | ||||
-rw-r--r-- | game/src/Game/Theme/PieChart/PieChart.gd | 14 |
11 files changed, 66 insertions, 78 deletions
diff --git a/extension/deps/openvic-simulation b/extension/deps/openvic-simulation -Subproject 538e7dc4ec44c4d09a6a654f10229e6392653a5 +Subproject d3c6ff1809b88b4c99163402f30b6d10c787510 diff --git a/extension/src/GameSingleton.cpp b/extension/src/GameSingleton.cpp index baf4d44..7fc713a 100644 --- a/extension/src/GameSingleton.cpp +++ b/extension/src/GameSingleton.cpp @@ -9,7 +9,7 @@ using namespace godot; using namespace OpenVic; -TerrainVariant::TerrainVariant(std::string const& new_identfier, +TerrainVariant::TerrainVariant(const std::string_view new_identfier, colour_t new_colour, Ref<Image> const& new_image) : HasIdentifierAndColour { new_identfier, new_colour, true }, image { new_image } {} diff --git a/extension/src/GameSingleton.hpp b/extension/src/GameSingleton.hpp index c4e90e0..cd8cdd0 100644 --- a/extension/src/GameSingleton.hpp +++ b/extension/src/GameSingleton.hpp @@ -12,7 +12,7 @@ namespace OpenVic { private: const godot::Ref<godot::Image> image; - TerrainVariant(std::string const& new_identfier, colour_t new_colour, + TerrainVariant(const std::string_view new_identfier, colour_t new_colour, godot::Ref<godot::Image> const& new_image); public: static constexpr size_t MAX_INDEX = 1 << (8 * sizeof(Map::terrain_t)); diff --git a/extension/src/LoadGameCompatibility.cpp b/extension/src/LoadGameCompatibility.cpp index ddde5b8..71435a4 100644 --- a/extension/src/LoadGameCompatibility.cpp +++ b/extension/src/LoadGameCompatibility.cpp @@ -17,57 +17,57 @@ Error GameSingleton::_load_province_identifier_file_compatibility_mode(String co Error err = FileAccess::get_open_error(); if (err != OK || file.is_null()) { UtilityFunctions::push_error("Failed to load compatibility mode province identifier file: ", file_path); - return err == OK ? FAILED : err; - } - - int line_number = 0; - while (!file->eof_reached()) { - const PackedStringArray line = file->get_csv_line(";"); - line_number++; + if (err == OK) err = FAILED; + } else { + int line_number = 0; + while (!file->eof_reached()) { + const PackedStringArray line = file->get_csv_line(";"); + line_number++; - if (line.is_empty() || (line.size() == 1 && line[0].is_empty())) - continue; + if (line.is_empty() || (line.size() == 1 && line[0].is_empty())) + continue; - if (line_number < 2) continue; // skip header line - index_t id = NULL_INDEX; - colour_t colour = NULL_COLOUR; - if (line.size() > 0) { - if (line[0].is_empty()) { - id = game_manager.map.get_province_count() + 1; - } else if (line[0].is_valid_int()) { - const int64_t val = line[0].to_int(); - if (val > NULL_INDEX && val <= MAX_INDEX) id = val; - } - for (int i = 1; i < 4; ++i) { - if (line.size() > i) { - if (line[i].is_valid_int()) { - const int64_t int_val = line[i].to_int(); - if (int_val >= NULL_COLOUR && int_val <= FULL_COLOUR) { - colour = (colour << 8) | int_val; - continue; - } - } else if (line[i].is_valid_float()) { - const double double_val = line[i].to_float(); - if (std::trunc(double_val) == double_val) { - const int64_t int_val = double_val; + if (line_number < 2) continue; // skip header line + index_t id = NULL_INDEX; + colour_t colour = NULL_COLOUR; + if (line.size() > 0) { + if (line[0].is_empty()) { + id = game_manager.map.get_province_count() + 1; + } else if (line[0].is_valid_int()) { + const int64_t val = line[0].to_int(); + if (val > NULL_INDEX && val <= MAX_INDEX) id = val; + } + for (int i = 1; i < 4; ++i) { + if (line.size() > i) { + if (line[i].is_valid_int()) { + const int64_t int_val = line[i].to_int(); if (int_val >= NULL_COLOUR && int_val <= FULL_COLOUR) { colour = (colour << 8) | int_val; continue; } + } else if (line[i].is_valid_float()) { + const double double_val = line[i].to_float(); + if (std::trunc(double_val) == double_val) { + const int64_t int_val = double_val; + if (int_val >= NULL_COLOUR && int_val <= FULL_COLOUR) { + colour = (colour << 8) | int_val; + continue; + } + } } } + colour = NULL_COLOUR; + break; } - colour = NULL_COLOUR; - break; } + if (id == NULL_INDEX || colour == NULL_COLOUR) { + UtilityFunctions::push_error("Invalid province ID-colour entry \"", line, "\" on line ", line_number, " in file: ", file_path); + err = FAILED; + continue; + } + static const std::string province_prefix = "PROV"; + if (game_manager.map.add_province(province_prefix + std::to_string(id), colour) != SUCCESS) err = FAILED; } - if (id == NULL_INDEX || colour == NULL_COLOUR) { - UtilityFunctions::push_error("Invalid province ID-colour entry \"", line, "\" on line ", line_number, " in file: ", file_path); - err = FAILED; - continue; - } - static const std::string province_prefix = "PROV"; - if (game_manager.map.add_province(province_prefix + std::to_string(id), colour) != SUCCESS) err = FAILED; } game_manager.map.lock_provinces(); return err; diff --git a/extension/src/LoadGameOpenVic.cpp b/extension/src/LoadGameOpenVic.cpp index 27fb265..627578f 100644 --- a/extension/src/LoadGameOpenVic.cpp +++ b/extension/src/LoadGameOpenVic.cpp @@ -157,7 +157,11 @@ Error GameSingleton::_parse_region_entry(String const& identifier, Variant const UtilityFunctions::push_error("Invalid province list for region \"", identifier, "\": ", entry); return FAILED; } - return ERR(game_manager.map.add_region(godot_to_std_string(identifier), province_identifiers)); + std::vector<std::string_view> province_identifier_views; + for (std::string const& str : province_identifiers) { + province_identifier_views.push_back(str); + } + return ERR(game_manager.map.add_region(godot_to_std_string(identifier), province_identifier_views)); } Error GameSingleton::_load_region_file(String const& file_path) { @@ -271,7 +275,7 @@ Error GameSingleton::_load_map_images(String const& province_image_path, String // Generate interleaved province and terrain ID image if (game_manager.map.generate_province_shape_image(province_dims.x, province_dims.y, province_image->get_data().ptr(), - terrain_image->get_data().ptr(), terrain_variant_map) != SUCCESS) err = FAILED; + terrain_image->get_data().ptr(), terrain_variant_map, true) != SUCCESS) err = FAILED; static constexpr int32_t GPU_DIM_LIMIT = 0x3FFF; // For each dimension of the image, this finds the small number of equal subdivisions required get the individual texture dims under GPU_DIM_LIMIT @@ -364,8 +368,8 @@ Error GameSingleton::_parse_good_entry(String const& identifier, Variant const& if (var_overseas_maintenance.get_type() == Variant::BOOL) overseas_maintenance = var_overseas_maintenance; else UtilityFunctions::push_error("Invalid good overseas maintenance bool value for ", identifier, ": ", var_overseas_maintenance); - return ERR(game_manager.good_manager.add_good(godot_to_std_string(identifier), godot_to_std_string(category), - colour, base_price, default_available, tradeable, currency, overseas_maintenance)); + return ERR(game_manager.good_manager.add_good(godot_to_std_string(identifier), colour, godot_to_std_string(category), + base_price, default_available, tradeable, currency, overseas_maintenance)); } Error GameSingleton::_load_goods(String const& defines_path, String const& icons_dir_path) { diff --git a/game/src/Game/Autoload/GuiScale.gd b/game/src/Game/Autoload/GuiScale.gd index afd73df..d364ff5 100644 --- a/game/src/Game/Autoload/GuiScale.gd +++ b/game/src/Game/Autoload/GuiScale.gd @@ -26,7 +26,7 @@ func _ready(): func has_guiscale(guiscale_value : float) -> bool: return guiscale_value in _guiscales - + func add_guiscale(guiscale_value: float, guiscale_name: StringName=&"") -> bool: if has_guiscale(guiscale_value): return true var scale_dict := { value = guiscale_value } @@ -39,24 +39,24 @@ func add_guiscale(guiscale_value: float, guiscale_name: StringName=&"") -> bool: return false _guiscales[guiscale_value] = scale_dict return true - + #returns floats func get_guiscale_value_list() -> Array: var list := _guiscales.keys() list.sort_custom(func(a, b): return a > b) return list - + func get_guiscale_display_name(guiscale_value : float) -> StringName: return _guiscales.get(guiscale_value, {display_name = &"unknown gui scale"}).display_name func get_current_guiscale() -> float: return get_tree().root.content_scale_factor - + func set_guiscale(guiscale:float) -> void: print("New GUI scale: %f" % guiscale) if not has_guiscale(guiscale): push_warning("Setting GUI Scale to non-standard value %sx" % [guiscale]) get_tree().root.content_scale_factor = guiscale - + func reset_guiscale() -> void: set_guiscale(get_current_guiscale()) diff --git a/game/src/Game/GameStart.gd b/game/src/Game/GameStart.gd index 995541f..bfbbfb1 100644 --- a/game/src/Game/GameStart.gd +++ b/game/src/Game/GameStart.gd @@ -49,12 +49,3 @@ func _initialize_game() -> void: func _on_splash_container_splash_end(): loading_screen.show() - -func _on_loading_screen_load_started(): - Events.Loader.startup_load_begun.emit() - -func _on_loading_screen_load_changed(percentage : float) -> void: - Events.Loader.startup_load_changed.emit(percentage) - -func _on_loading_screen_load_ended(): - Events.Loader.startup_load_ended.emit() diff --git a/game/src/Game/GameStart.tscn b/game/src/Game/GameStart.tscn index f16daa3..189e72f 100644 --- a/game/src/Game/GameStart.tscn +++ b/game/src/Game/GameStart.tscn @@ -51,8 +51,5 @@ stream = ExtResource("5_8euyy") autoplay = true expand = true -[connection signal="load_changed" from="LoadingScreen" to="." method="_on_loading_screen_load_changed"] -[connection signal="load_ended" from="LoadingScreen" to="." method="_on_loading_screen_load_ended"] -[connection signal="load_started" from="LoadingScreen" to="." method="_on_loading_screen_load_started"] [connection signal="splash_end" from="SplashContainer" to="." method="_on_splash_container_splash_end"] [connection signal="finished" from="SplashContainer/SplashVideo" to="SplashContainer" method="_on_splash_startup_finished"] diff --git a/game/src/Game/LoadingScreen.gd b/game/src/Game/LoadingScreen.gd index 3cbf199..d953d20 100644 --- a/game/src/Game/LoadingScreen.gd +++ b/game/src/Game/LoadingScreen.gd @@ -1,9 +1,5 @@ extends Control -signal load_started() -signal load_changed(percentage : float) -signal load_ended() - @export var quote_file_path : String = "res://common/quotes.txt" @export_subgroup("Nodes") @@ -24,7 +20,7 @@ func start_loading_screen(thread_safe_function : Callable) -> void: thread.wait_to_finish() thread.start(thread_safe_function) - load_started.emit() + Events.Loader.startup_load_begun.emit() func try_update_loading_screen(percent_complete: float, quote_should_change = false): # forces the function to behave as if deferred @@ -34,9 +30,9 @@ func try_update_loading_screen(percent_complete: float, quote_should_change = fa quote_label.text = quotes[randi() % quotes.size()] if is_equal_approx(percent_complete, 100): thread.wait_to_finish() - load_ended.emit() + Events.Loader.startup_load_ended.emit() else: - load_changed.emit(percent_complete) + Events.Loader.startup_load_changed.emit(percent_complete) func _ready(): if Engine.is_editor_hint(): return diff --git a/game/src/Game/Menu/OptionMenu/GuiScaleSelector.gd b/game/src/Game/Menu/OptionMenu/GuiScaleSelector.gd index 4dd86e1..42be5e0 100644 --- a/game/src/Game/Menu/OptionMenu/GuiScaleSelector.gd +++ b/game/src/Game/Menu/OptionMenu/GuiScaleSelector.gd @@ -32,7 +32,7 @@ func _sync_guiscales(to_select : float = GuiScale.get_current_guiscale()) -> voi if selected == -1: selected = default_selected - + func _setup_button(): if default_value <= 0: default_value = ProjectSettings.get_setting("display/window/stretch/scale") diff --git a/game/src/Game/Theme/PieChart/PieChart.gd b/game/src/Game/Theme/PieChart/PieChart.gd index b06dacf..94366c7 100644 --- a/game/src/Game/Theme/PieChart/PieChart.gd +++ b/game/src/Game/Theme/PieChart/PieChart.gd @@ -111,8 +111,8 @@ func sort_slices() -> void: func _ready(): if not Engine.is_editor_hint(): - const size : int = 256 - _pie_chart_image = Image.create(size, size, false, Image.FORMAT_RGBA8) + const image_size : int = 256 + _pie_chart_image = Image.create(image_size, image_size, false, Image.FORMAT_RGBA8) texture = ImageTexture.create_from_image(_pie_chart_image) _recalculate() @@ -160,11 +160,11 @@ func _on_mouse_exited(): # is hovered over. Returns a boolean on whether the tooltip was handled. func _handle_tooltip(pos : Vector2) -> bool: # Is it within the circle? - var radius := size.x / 2.0 - var center := Vector2(radius, radius) + var real_radius := size.x / 2.0 + var center := Vector2(real_radius, real_radius) var distance := center.distance_to(pos) - var real_donut_inner_radius : float = radius * donut_inner_radius - if distance <= radius and (not donut or distance >= real_donut_inner_radius): + var real_donut_inner_radius : float = real_radius * donut_inner_radius + if distance <= real_radius and (not donut or distance >= real_donut_inner_radius): if _slice_order.is_empty(): _rich_tooltip.text = "PIECHART_TOOLTIP_NO_DATA" else: @@ -189,7 +189,7 @@ func _handle_tooltip(pos : Vector2) -> bool: # Create a list of all the values and percentages # with the hovered one highlighted func _create_tooltip(labelHovered : String) -> String: - var slice_tooltips : PackedStringArray + var slice_tooltips : PackedStringArray = [] for label in _slice_order: var slice : SliceData = _slices.get(label) var percent := _format_percent(slice.percentage) |