aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/GameSession
diff options
context:
space:
mode:
author Hop311 <hop3114@gmail.com>2023-08-10 13:00:54 +0200
committer Hop311 <hop3114@gmail.com>2023-08-10 13:00:54 +0200
commit4c43951e70aaa2e7265d3b3f3c4964c048b9328d (patch)
treec6d46df1686710ccacd63ceb16d687cb55877457 /game/src/Game/GameSession
parent505176d9cabe76cff7cdac6b4d4ef1c77ccb00d9 (diff)
PieChart data and image now come from c++ layer
Diffstat (limited to 'game/src/Game/GameSession')
-rw-r--r--game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd11
-rw-r--r--game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.tscn127
2 files changed, 18 insertions, 120 deletions
diff --git a/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd b/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd
index 04a035c..0220be2 100644
--- a/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd
+++ b/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd
@@ -7,6 +7,8 @@ extends PanelContainer
@export var _rgo_icon_texture_rect : TextureRect
@export var _rgo_name_label : Label
@export var _buildings_container : Container
+@export var _pop_type_chart : PieChart
+@export var _pop_ideology_chart : PieChart
@export var _pop_culture_chart : PieChart
const _missing_suffix : String = "_MISSING"
@@ -114,6 +116,10 @@ func _update_info() -> void:
_total_population_label.text = Localisation.tr_number(_province_info.get(GameSingleton.get_province_info_total_population_key(), 0))
+ _pop_type_chart.set_to_distribution(_province_info.get(GameSingleton.get_province_info_pop_types_key(), {}))
+ _pop_ideology_chart.set_to_distribution(_province_info.get(GameSingleton.get_province_info_pop_ideologies_key(), {}))
+ _pop_culture_chart.set_to_distribution(_province_info.get(GameSingleton.get_province_info_pop_cultures_key(), {}))
+
_rgo_name_label.text = _province_info.get(GameSingleton.get_province_info_rgo_key(),
GameSingleton.get_province_info_rgo_key() + _missing_suffix)
_rgo_icon_texture_rect.texture = GameSingleton.get_good_icon_texture(_rgo_name_label.text)
@@ -122,11 +128,6 @@ func _update_info() -> void:
for i in max(buildings.size(), _building_rows.size()):
_set_building_row(i, buildings[i] if i < buildings.size() else {})
- #PLACEHOLDER for updating piechart
- _pop_culture_chart.addOrReplaceLabel("NORTH_GERMAN",50,"North German Culture",Color.DIM_GRAY)
- _pop_culture_chart.addOrReplaceLabel("FRENCH",25,"French Culture",Color.BLUE)
- _pop_culture_chart.addOrReplaceLabel("SOUTH_GERMAN",7,"South German Culture",Color.FIREBRICK)
-
show()
else:
hide()
diff --git a/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.tscn b/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.tscn
index 9b4c45b..7e49ac8 100644
--- a/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.tscn
+++ b/game/src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.tscn
@@ -1,118 +1,9 @@
-[gd_scene load_steps=6 format=3 uid="uid://byq323jbel48u"]
+[gd_scene load_steps=3 format=3 uid="uid://byq323jbel48u"]
[ext_resource type="Script" path="res://src/Game/GameSession/ProvinceOverviewPanel/ProvinceOverviewPanel.gd" id="1_3n8k5"]
[ext_resource type="PackedScene" uid="uid://cr7p1k2xm7mum" path="res://src/Game/Theme/PieChart/PieChart.tscn" id="2_3oytt"]
-[sub_resource type="Shader" id="Shader_2k3yf"]
-code = "shader_type canvas_item;
-
-// The center in UV coordinates, which will always
-//be 0.5, the actual radius will be controlled by the control node
-//const vec2 center = vec2(0.5,0.5);
-uniform float radius = 0.4;
-
-//shadow
-uniform vec2 shadow_displacement = vec2(0.75,0.75);
-uniform float shadow_tightness = 10;
-uniform float shadow_radius = 0.7;
-uniform float shadow_thickness = 1.0;
-
-// Control of the slices
-uniform float stopAngles[5];
-uniform vec3 colours[5];
-
-// Trim
-uniform vec3 trim_colour;
-uniform float trim_size = 0.05;
-
-// The center is spotlighted by the gradient,
-//control its size and falloff with these
-uniform float gradient_falloff = 3.6;
-uniform float gradient_base = 3.1;
-
-// control whether this is a donut instead of a pie chart
-uniform bool donut = false;
-uniform bool donut_inner_trim = false;
-uniform float donut_inner_radius = 0.15;
-
-// get the polar coordinates of a pixel relative to the center
-vec2 getPolar(vec2 UVin, vec2 center){
- vec2 relcoord = (UVin-center);
- float dist = length(relcoord);
- float theta = PI/2.0 + atan((relcoord.y)/(relcoord.x));
- if(UVin.x < 0.5){
- theta += PI;
- }
- return vec2(dist,theta);
-}
-
-// from thebookofshaders, returns a gradient falloff
-float parabola( float base, float x, float k ){
- return pow( base*x*(1.0-x), k );
-}
-
-float parabola_shadow(float base, float x){
- return base*x*x;
-}
-
-void fragment() {
- vec2 coords = getPolar(UV,vec2(0.5,0.5));
- float dist = coords.x;
- float theta = coords.y;
-
- vec2 shadow_polar = getPolar(UV,vec2(0.0+shadow_displacement.x,0.0+shadow_displacement.y));
- float shadow_peak = radius+(radius-donut_inner_radius)/2.0;
- float shadow_gradient = shadow_thickness+parabola_shadow(shadow_tightness*-10.0,shadow_polar.x+shadow_peak-shadow_radius);
-
- // inner hole of the donut => make it transparent
- if(donut && dist <= donut_inner_radius){
- COLOR = vec4(0.1,0.1,0.1,shadow_gradient);
- }
- // inner trim
- else if(donut && donut_inner_trim && dist <= donut_inner_radius + trim_size){
- COLOR = vec4(trim_colour,1.0);
- }
- // interior
- else if(dist <= radius-trim_size){
- for(int i=0;i<stopAngles.length();i++){
- if(theta <= stopAngles[i]){
- float gradient = parabola(gradient_base,dist,gradient_falloff);
- COLOR = vec4(colours[i]*(1.0-gradient),1.0);
- break;
- }
- }
- }
- // outer trim
- else if(dist <= radius){
- COLOR = vec4(trim_colour,1.0);
- }
- //outside the circle
- else{
- COLOR = vec4(0.1,0.1,0.1,shadow_gradient);
- }
-}"
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_3ep5m"]
-resource_name = "Piechart_shader"
-shader = SubResource("Shader_2k3yf")
-shader_parameter/radius = 0.4
-shader_parameter/shadow_displacement = Vector2(0.6, 0.6)
-shader_parameter/shadow_tightness = 1.0
-shader_parameter/shadow_radius = 0.6
-shader_parameter/shadow_thickness = 1.0
-shader_parameter/stopAngles = []
-shader_parameter/colours = []
-shader_parameter/trim_colour = Vector3(0, 0, 0)
-shader_parameter/trim_size = 0.02
-shader_parameter/gradient_falloff = 3.6
-shader_parameter/gradient_base = 3.1
-shader_parameter/donut = false
-shader_parameter/donut_inner_trim = true
-shader_parameter/donut_inner_radius = 0.25
-
-[sub_resource type="CanvasTexture" id="CanvasTexture_udhyk"]
-
-[node name="ProvinceOverviewPanel" type="PanelContainer" node_paths=PackedStringArray("_province_name_label", "_region_name_label", "_life_rating_bar", "_total_population_label", "_rgo_icon_texture_rect", "_rgo_name_label", "_buildings_container", "_pop_culture_chart")]
+[node name="ProvinceOverviewPanel" type="PanelContainer" node_paths=PackedStringArray("_province_name_label", "_region_name_label", "_life_rating_bar", "_total_population_label", "_rgo_icon_texture_rect", "_rgo_name_label", "_buildings_container", "_pop_type_chart", "_pop_ideology_chart", "_pop_culture_chart")]
editor_description = "UI-56"
anchors_preset = 2
anchor_top = 1.0
@@ -129,7 +20,9 @@ _total_population_label = NodePath("PanelList/InteractList/TotalPopulation")
_rgo_icon_texture_rect = NodePath("PanelList/InteractList/RGOInfo/RGOIcon")
_rgo_name_label = NodePath("PanelList/InteractList/RGOInfo/RGOName")
_buildings_container = NodePath("PanelList/InteractList/BuildingsContainer")
-_pop_culture_chart = NodePath("PanelList/InteractList/PopStats/PieChart")
+_pop_type_chart = NodePath("PanelList/InteractList/PopStats/PopTypeChart")
+_pop_ideology_chart = NodePath("PanelList/InteractList/PopStats/PopIdeologyChart")
+_pop_culture_chart = NodePath("PanelList/InteractList/PopStats/PopCultureChart")
[node name="PanelList" type="VBoxContainer" parent="."]
layout_mode = 2
@@ -202,10 +95,14 @@ mouse_filter = 1
[node name="PopStats" type="HBoxContainer" parent="PanelList/InteractList"]
layout_mode = 2
-[node name="PieChart" parent="PanelList/InteractList/PopStats" instance=ExtResource("2_3oytt")]
-material = SubResource("ShaderMaterial_3ep5m")
+[node name="PopTypeChart" parent="PanelList/InteractList/PopStats" instance=ExtResource("2_3oytt")]
+layout_mode = 2
+
+[node name="PopIdeologyChart" parent="PanelList/InteractList/PopStats" instance=ExtResource("2_3oytt")]
+layout_mode = 2
+
+[node name="PopCultureChart" parent="PanelList/InteractList/PopStats" instance=ExtResource("2_3oytt")]
layout_mode = 2
-texture = SubResource("CanvasTexture_udhyk")
[node name="HSeparator3" type="HSeparator" parent="PanelList/InteractList"]
layout_mode = 2