diff options
author | hop311 <hop3114@gmail.com> | 2023-12-04 01:12:16 +0100 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2023-12-04 01:18:15 +0100 |
commit | 6e350a3dc0b596b1f76fab3b943b67b7713ea4fa (patch) | |
tree | b963c671239ecd693d4162afe4b1b9d3b064554e /game/src/Game | |
parent | 9165f5980c5cfe75b3bad4303a5822340f6adcfc (diff) |
Sim submodule update + extension compatibility
Diffstat (limited to 'game/src/Game')
-rw-r--r-- | game/src/Game/Autoload/Argument/ArgumentOption.gd | 2 | ||||
-rw-r--r-- | game/src/Game/GameSession/MapView.gd | 2 | ||||
-rw-r--r-- | game/src/Game/GameSession/TerrainMap.gdshader | 2 | ||||
-rw-r--r-- | game/src/Game/GlobalClass/ShaderManager.gd | 14 | ||||
-rw-r--r-- | game/src/Game/LoadingScreen.gd | 2 | ||||
-rw-r--r-- | game/src/Game/Theme/PieChart/PieChart.gd | 216 | ||||
-rw-r--r-- | game/src/Game/Theme/PieChart/PieChart.tscn | 38 |
7 files changed, 13 insertions, 263 deletions
diff --git a/game/src/Game/Autoload/Argument/ArgumentOption.gd b/game/src/Game/Autoload/Argument/ArgumentOption.gd index f14cef0..f98b19c 100644 --- a/game/src/Game/Autoload/Argument/ArgumentOption.gd +++ b/game/src/Game/Autoload/Argument/ArgumentOption.gd @@ -20,7 +20,7 @@ extends Resource var default_value @export var description : String -func _init(_name = "", _type = TYPE_NIL, _description = "", default = null): +func _init(_name = "", _type = TYPE_NIL, _description = "", default = null): name = _name type = _type if default != null and typeof(default) == type: diff --git a/game/src/Game/GameSession/MapView.gd b/game/src/Game/GameSession/MapView.gd index 7093c69..62bdd20 100644 --- a/game/src/Game/GameSession/MapView.gd +++ b/game/src/Game/GameSession/MapView.gd @@ -30,7 +30,7 @@ var _window_in_focus : bool = true @export var _zoom_target : float = 1.0: get: return _zoom_target set(v): _zoom_target = clamp(v, _zoom_target_min, _zoom_target_max) -const _zoom_position_multiplier = 3.14159 # Horizontal movement coefficient during zoom +const _zoom_position_multiplier = 3.14159 # Horizontal movement coefficient during zoom var _zoom_position : Vector2 @export var _map_mesh_instance : MeshInstance3D diff --git a/game/src/Game/GameSession/TerrainMap.gdshader b/game/src/Game/GameSession/TerrainMap.gdshader index 35a108b..97b20e4 100644 --- a/game/src/Game/GameSession/TerrainMap.gdshader +++ b/game/src/Game/GameSession/TerrainMap.gdshader @@ -47,7 +47,7 @@ vec3 get_terrain_colour( vec3 tinted_terrain_colour = mix(terrain_colour, tint_colour, 0.3); vec3 mixed_colour = mix(tinted_terrain_colour, province_colour.rgb, province_colour.a); - float highlight_mix_val = 0.1 * (float(province_index == hover_index) + float(province_index == selected_index)); + float highlight_mix_val = 0.4 * (float(province_index == hover_index) + float(province_index == selected_index)); return mix(mixed_colour, highlight_colour, highlight_mix_val); } diff --git a/game/src/Game/GlobalClass/ShaderManager.gd b/game/src/Game/GlobalClass/ShaderManager.gd index ace3c3a..a6d555f 100644 --- a/game/src/Game/GlobalClass/ShaderManager.gd +++ b/game/src/Game/GlobalClass/ShaderManager.gd @@ -38,28 +38,32 @@ func set_up_shader(material : Material, add_cosmetic_textures : bool) -> Error: if province_shape_texture == null: push_error("Failed to get province shape texture!") ret = FAILED - shader_material.set_shader_parameter(param_province_shape_tex, province_shape_texture) + else: + shader_material.set_shader_parameter(param_province_shape_tex, province_shape_texture) var subdivisions := GameSingleton.get_province_shape_image_subdivisions() if subdivisions.x < 1 or subdivisions.y < 1: push_error("Invalid province shape image subdivision: ", subdivisions.x, "x", subdivisions.y) ret = FAILED - shader_material.set_shader_parameter(param_province_shape_subdivisions, Vector2(subdivisions)) + else: + shader_material.set_shader_parameter(param_province_shape_subdivisions, Vector2(subdivisions)) if add_cosmetic_textures: # Province colour texture var map_province_colour_texture := GameSingleton.get_province_colour_texture() if map_province_colour_texture == null: - push_error("Failed to get province colour image!") + push_error("Failed to get province colour texture!") ret = FAILED - shader_material.set_shader_parameter(param_province_colour_tex, map_province_colour_texture) + else: + shader_material.set_shader_parameter(param_province_colour_tex, map_province_colour_texture) # Terrain texture var terrain_texture := GameSingleton.get_terrain_texture() if terrain_texture == null: push_error("Failed to get terrain texture!") ret = FAILED - shader_material.set_shader_parameter(param_terrain_tex, terrain_texture) + else: + shader_material.set_shader_parameter(param_terrain_tex, terrain_texture) # Stripe texture if _set_shader_texture(shader_material, &"map/terrain/stripes.dds", param_stripe_tex) != OK: diff --git a/game/src/Game/LoadingScreen.gd b/game/src/Game/LoadingScreen.gd index ae04c85..c7dad9c 100644 --- a/game/src/Game/LoadingScreen.gd +++ b/game/src/Game/LoadingScreen.gd @@ -40,7 +40,7 @@ func _ready(): thread = Thread.new() # FS-3, UI-30, UIFUN-35 var quotes_file := FileAccess.open(quote_file_path, FileAccess.READ).get_as_text() - quotes = quotes_file.split("\n",false) + quotes = quotes_file.split("\n", false) if quotes.is_empty(): quotes = [""] animation_player.play("loadingscreen_gear") diff --git a/game/src/Game/Theme/PieChart/PieChart.gd b/game/src/Game/Theme/PieChart/PieChart.gd deleted file mode 100644 index 4b81b28..0000000 --- a/game/src/Game/Theme/PieChart/PieChart.gd +++ /dev/null @@ -1,216 +0,0 @@ -@tool -extends TextureRect - -class_name PieChart - - -@export var donut : bool = false -@export_range(0.0, 1.0) var donut_inner_radius : float = 0.5 -@export_range(0.0, 0.5) var radius : float = 0.4 -@export var shadow_displacement : Vector2 = Vector2(0.55, 0.6) -@export var shadow_tightness : float = 1.0 -@export var shadow_radius : float = 0.6 -@export var shadow_thickness : float = 1.0 - -@export var trim_colour : Color = Color(0.0, 0.0, 0.0) -@export_range(0.0, 1.0) var trim_size : float = 0.02 -@export var donut_inner_trim : bool = true -@export var slice_gradient_falloff : float = 3.6 -@export var slice_gradient_base : float = 3.1 - -@export var _rich_tooltip : RichTextLabel -var _pie_chart_image : Image - -# A data class for the pie chart -class SliceData: - extends RefCounted - # Primary properties, change these to change - # the displayed piechart - var colour : Color = Color(1.0, 0.0, 0.0) - var tooltip : String = "" - var quantity : float = -1 - # Derived properties, don't set from an external script - var final_angle : float = -1 - var percentage : float = 0: - get: - return percentage - set(value): - percentage = clampf(value, 0, 1) - - func _init(quantityIn : float, tooltipIn : String, colourIn : Color): - colour = colourIn - tooltip = tooltipIn - quantity = quantityIn - -# The key of an entry of this dictionary should be an easy to reference constant -# The tooltip label is what the user will actually read -var _slices : Dictionary = {} - -# Slice keys/labels in the order they should be displayed -var _slice_order : Array = [] - -# Example slices: -""" - "label1": SliceData.new(5, "Conservative", Color(0.0, 0.0, 1.0)), - "label2": SliceData.new(3, "Liberal", Color(1.0, 1.0, 0.0)), - "label3": SliceData.new(2, "Reactionary", Color(0.4, 0.0, 0.6)) -""" - -# These functions are the interface a developer will use to update the piechart -# The piechart will only redraw once one of these has been triggered -func add_or_replace_label(labelName : String, quantity : float, tooltip : String, colour : Color = Color(0.0, 0.0, 0.0)) -> void: - _slices[labelName] = SliceData.new(quantity, tooltip, colour) - if _slice_order.find(labelName) == -1: - _slice_order.push_back(labelName) - _recalculate() - -func update_label_quantity(labelName : String, quantity : float) -> void: - if _slices.has(labelName): - _slices[labelName].quantity = quantity - _recalculate() - -func update_label_colour(labelName : String, colour : Color) -> void: - if _slices.has(labelName): - _slices[labelName].colour = colour - _recalculate() - -func update_label_tooltip(labelName : String, tooltip : String) -> void: - if _slices.has(labelName): - _slices[labelName].tooltip = tooltip - -func remove_label(labelName : String) -> bool: - if _slices.erase(labelName): - var index := _slice_order.find(labelName) - if index == -1: - push_error("Slice in dictionary but not order list: ", labelName) - else: - _slice_order.remove_at(index) - _recalculate() - return true - return false - -func clear_slices() -> void: - _slices.clear() - _slice_order.clear() - -# Distribution dictionary of the form: -# { "<label>": { "size": <quantity>, "colour": <colour> } } -func set_to_distribution(dist : Dictionary) -> void: - clear_slices() - for key in dist: - var entry : Dictionary = dist[key] - _slices[key] = SliceData.new(entry[GameSingleton.get_piechart_info_size_key()], key, entry[GameSingleton.get_piechart_info_colour_key()]) - _slice_order = _slices.keys() - sort_slices() - -# Sorted by quantity, smallest to largest, so that the smallest slice -# is to the left of a radial line straight upwards -func sort_slices() -> void: - _slice_order.sort_custom(func (a, b): return _slices[a].quantity < _slices[b].quantity) - _recalculate() - -func _ready(): - if not Engine.is_editor_hint(): - 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() - -# Update the slice angles based on the new slice data -func _recalculate() -> void: - # Where the slices are the public interface, these are the actual paramters - # which will be sent to the shader/draw function - var angles : Array = [] - var colours : Array = [] - - var total : float = 0 - for label in _slice_order: - var quantity : float = _slices[label].quantity - if quantity > 0: - total += quantity - - var current_arc_start : float = 0 - var current_arc_finish : float = 0 - - for label in _slice_order: - var slice : SliceData = _slices[label] - if slice.quantity > 0: - slice.percentage = slice.quantity / total - var rads_to_cover : float = slice.percentage * 2.0 * PI - current_arc_finish = current_arc_start + rads_to_cover - slice.final_angle = current_arc_finish - current_arc_start = current_arc_finish - angles.push_back(current_arc_finish) - colours.push_back(slice.colour) - - GameSingleton.draw_pie_chart(_pie_chart_image, angles, colours, radius, shadow_displacement, shadow_tightness, shadow_radius, shadow_thickness, - trim_colour, trim_size, slice_gradient_falloff, slice_gradient_base, donut, donut_inner_trim, donut_inner_radius / 2) - texture.set_image(_pie_chart_image) - -# Process mouse to select the appropriate tooltip for the slice -func _gui_input(event : InputEvent): - if event is InputEventMouse: - var pos : Vector2 = event.position - var _handled : bool = _handle_tooltip(pos) - -func _on_mouse_exited(): - _rich_tooltip.visible = false - -# Takes a mouse position, and sets an appropriate tooltip for the slice the mouse -# is hovered over. Returns a boolean on whether the tooltip was handled. -func _handle_tooltip(pos : Vector2) -> bool: - # Is it within the circle? - 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 = 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: - var angle := _convert_angle(center.angle_to_point(pos)) - var selected_label : String = "" - for label in _slice_order: - if angle <= _slices[label].final_angle: - if not selected_label or _slices[label].final_angle < _slices[selected_label].final_angle: - selected_label = label - if not selected_label: - selected_label = _slice_order[0] - _rich_tooltip.text = _create_tooltip(selected_label) - _rich_tooltip.visible = true - _rich_tooltip.position = pos + Vector2(5, 5) + get_global_rect().position - _rich_tooltip.reset_size() - else: - # Technically the corners of the bounding box - # are part of the chart, but we don't want a tooltip there - _rich_tooltip.visible = false - return _rich_tooltip.visible - -# Create a list of all the values and percentages -# with the hovered one highlighted -func _create_tooltip(labelHovered : String) -> String: - var slice_tooltips : PackedStringArray = [] - for label in _slice_order: - var slice : SliceData = _slices.get(label) - var percent := _format_percent(slice.percentage) - var entry : String = "%s %s%%" % [tr(label), percent] - if label == labelHovered: - entry = "[i][u][b]>>%s<<[/b][/u][/i]" % entry - slice_tooltips.push_back(entry) - # Slices are ordered smallest to largest, but here we want the opposite - slice_tooltips.reverse() - return "[font_size=14]%s[/font_size]" % "\n".join(slice_tooltips) - -# Angle from center.angle_to_point is measured from the +x axis, -# but the chart starts from +y -# The input angle is also -180 to 180, where we want 0 to 360 -func _convert_angle(angleIn : float) -> float: - # Make the angle start from +y, range is now -90 to 270 - var angle := angleIn + PI / 2.0 - # Adjust range to be 0 to 360 - if angle < 0: - angle += 2.0 * PI - return angle - -func _format_percent(percentIn : float) -> float: - return snappedf((percentIn * 100), 0.1) diff --git a/game/src/Game/Theme/PieChart/PieChart.tscn b/game/src/Game/Theme/PieChart/PieChart.tscn deleted file mode 100644 index a0e9992..0000000 --- a/game/src/Game/Theme/PieChart/PieChart.tscn +++ /dev/null @@ -1,38 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cr7p1k2xm7mum"] - -[ext_resource type="Script" path="res://src/Game/Theme/PieChart/PieChart.gd" id="2_ub6u3"] - -[node name="PieChart" type="TextureRect" node_paths=PackedStringArray("_rich_tooltip")] -custom_minimum_size = Vector2(50, 50) -anchors_preset = -1 -anchor_right = 0.039 -anchor_bottom = 0.069 -offset_right = -32.92 -offset_bottom = -34.68 -size_flags_horizontal = 4 -size_flags_vertical = 4 -expand_mode = 3 -script = ExtResource("2_ub6u3") -_rich_tooltip = NodePath("RichToolTip") - -[node name="RichToolTip" type="RichTextLabel" parent="."] -visible = false -top_level = true -layout_mode = 2 -offset_right = 50.0 -offset_bottom = 50.0 -mouse_filter = 2 -bbcode_enabled = true -fit_content = true -autowrap_mode = 0 - -[node name="Panel" type="Panel" parent="RichToolTip"] -show_behind_parent = true -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] |