aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/GameSession
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-02-02 21:19:21 +0100
committer hop311 <hop3114@gmail.com>2024-02-19 20:17:31 +0100
commit1455861632cd50f48f6e8ef8c50004087eff36f1 (patch)
tree5ce200d70f5f12d76dfd489ed06a6bb88204fd1c /game/src/Game/GameSession
parent576986af57db806af284bbc05a799e72f113f35c (diff)
Basic Nation Management Screen frameworknation-management-screens
Diffstat (limited to 'game/src/Game/GameSession')
-rw-r--r--game/src/Game/GameSession/GameSession.tscn50
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/BudgetMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/DiplomacyMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/MilitaryMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/PoliticsMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/PopulationMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/ProductionMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/TechnologyMenu.gd34
-rw-r--r--game/src/Game/GameSession/NationManagementScreen/TradeMenu.gd34
-rw-r--r--game/src/Game/GameSession/ProvinceOverviewPanel.gd8
-rw-r--r--game/src/Game/GameSession/Topbar.gd41
11 files changed, 365 insertions, 6 deletions
diff --git a/game/src/Game/GameSession/GameSession.tscn b/game/src/Game/GameSession/GameSession.tscn
index c7a8003..d2fc3a3 100644
--- a/game/src/Game/GameSession/GameSession.tscn
+++ b/game/src/Game/GameSession/GameSession.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=10 format=3 uid="uid://bgnupcshe1m7r"]
+[gd_scene load_steps=18 format=3 uid="uid://bgnupcshe1m7r"]
[ext_resource type="Script" path="res://src/Game/GameSession/GameSession.gd" id="1_eklvp"]
[ext_resource type="PackedScene" uid="uid://cvl76duuym1wq" path="res://src/Game/MusicConductor/MusicPlayer.tscn" id="2_kt6aa"]
@@ -6,9 +6,17 @@
[ext_resource type="PackedScene" uid="uid://dvdynl6eir40o" path="res://src/Game/GameSession/GameSessionMenu.tscn" id="3_bvmqh"]
[ext_resource type="Script" path="res://src/Game/GameSession/Topbar.gd" id="4_2kbih"]
[ext_resource type="PackedScene" uid="uid://dkehmdnuxih2r" path="res://src/Game/GameSession/MapView.tscn" id="4_xkg5j"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/ProductionMenu.gd" id="5_16755"]
[ext_resource type="Script" path="res://src/Game/GameSession/ProvinceOverviewPanel.gd" id="5_lfv8l"]
[ext_resource type="PackedScene" uid="uid://cnbfxjy1m6wja" path="res://src/Game/Menu/OptionMenu/OptionsMenu.tscn" id="6_p5mnx"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/BudgetMenu.gd" id="6_vninv"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/TechnologyMenu.gd" id="7_r712c"]
[ext_resource type="PackedScene" uid="uid://d3g6wbvwflmyk" path="res://src/Game/Menu/SaveLoadMenu/SaveLoadMenu.tscn" id="8_4g7ko"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/PoliticsMenu.gd" id="8_ppdek"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/PopulationMenu.gd" id="10_laee7"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/TradeMenu.gd" id="10_mv1r6"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/DiplomacyMenu.gd" id="11_fu7ys"]
+[ext_resource type="Script" path="res://src/Game/GameSession/NationManagementScreen/MilitaryMenu.gd" id="12_6h6nc"]
[node name="GameSession" type="Control" node_paths=PackedStringArray("_game_session_menu")]
editor_description = "SS-102, UI-546"
@@ -34,6 +42,46 @@ layout_mode = 1
anchors_preset = 15
script = ExtResource("4_2kbih")
+[node name="ProductionMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("5_16755")
+
+[node name="BudgetMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("6_vninv")
+
+[node name="TechnologyMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("7_r712c")
+
+[node name="PoliticsMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("8_ppdek")
+
+[node name="PopulationMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("10_laee7")
+
+[node name="TradeMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("10_mv1r6")
+
+[node name="DiplomacyMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("11_fu7ys")
+
+[node name="MilitaryMenu" type="GUINode" parent="Topbar"]
+layout_mode = 1
+anchors_preset = 15
+script = ExtResource("12_6h6nc")
+
[node name="MapControlPanel" parent="." instance=ExtResource("3_afh6d")]
layout_mode = 1
anchors_preset = 3
diff --git a/game/src/Game/GameSession/NationManagementScreen/BudgetMenu.gd b/game/src/Game/GameSession/NationManagementScreen/BudgetMenu.gd
new file mode 100644
index 0000000..7158333
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/BudgetMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.BUDGET
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_budget", "country_budget")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_budget/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/DiplomacyMenu.gd b/game/src/Game/GameSession/NationManagementScreen/DiplomacyMenu.gd
new file mode 100644
index 0000000..fb11a31
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/DiplomacyMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.DIPLOMACY
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_diplomacy", "country_diplomacy")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_diplomacy/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/MilitaryMenu.gd b/game/src/Game/GameSession/NationManagementScreen/MilitaryMenu.gd
new file mode 100644
index 0000000..f3cc486
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/MilitaryMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.MILITARY
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_military", "country_military")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_military/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/PoliticsMenu.gd b/game/src/Game/GameSession/NationManagementScreen/PoliticsMenu.gd
new file mode 100644
index 0000000..7237bf5
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/PoliticsMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.POLITICS
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_politics", "country_politics")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_politics/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/PopulationMenu.gd b/game/src/Game/GameSession/NationManagementScreen/PopulationMenu.gd
new file mode 100644
index 0000000..29bd56b
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/PopulationMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.POPULATION
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_pops", "country_pop")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_pop/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/ProductionMenu.gd b/game/src/Game/GameSession/NationManagementScreen/ProductionMenu.gd
new file mode 100644
index 0000000..938f8e7
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/ProductionMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.PRODUCTION
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_production", "country_production")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_production/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/TechnologyMenu.gd b/game/src/Game/GameSession/NationManagementScreen/TechnologyMenu.gd
new file mode 100644
index 0000000..a80ed1e
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/TechnologyMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.TECHNOLOGY
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_technology", "country_technology")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_technology/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/NationManagementScreen/TradeMenu.gd b/game/src/Game/GameSession/NationManagementScreen/TradeMenu.gd
new file mode 100644
index 0000000..775f31a
--- /dev/null
+++ b/game/src/Game/GameSession/NationManagementScreen/TradeMenu.gd
@@ -0,0 +1,34 @@
+extends GUINode
+
+var _active : bool = false
+
+const _screen : NationManagement.Screen = NationManagement.Screen.TRADE
+
+func _ready() -> void:
+ GameSingleton.gamestate_updated.connect(_update_info)
+
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(_on_update_active_nation_management_screen)
+
+ add_gui_element("country_trade", "country_trade")
+
+ var close_button : Button = get_button_from_nodepath(^"./country_trade/close_button")
+ if close_button:
+ close_button.pressed.connect(Events.NationManagementScreens.close_nation_management_screen.bind(_screen))
+
+ _update_info()
+
+func _notification(what : int) -> void:
+ match what:
+ NOTIFICATION_TRANSLATION_CHANGED:
+ _update_info()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ _active = active_screen == _screen
+ _update_info()
+
+func _update_info() -> void:
+ if _active:
+ # TODO - update UI state
+ show()
+ else:
+ hide()
diff --git a/game/src/Game/GameSession/ProvinceOverviewPanel.gd b/game/src/Game/GameSession/ProvinceOverviewPanel.gd
index 6fe28d7..cb76241 100644
--- a/game/src/Game/GameSession/ProvinceOverviewPanel.gd
+++ b/game/src/Game/GameSession/ProvinceOverviewPanel.gd
@@ -121,7 +121,7 @@ func _ready() -> void:
GameSingleton.province_selected.connect(_on_province_selected)
GameSingleton.gamestate_updated.connect(_update_info)
- if add_gui_element("province_interface.gui", "province_view") != OK:
+ if add_gui_element("province_interface", "province_view") != OK:
push_error("Failed to generate province overview panel!")
return
@@ -144,7 +144,7 @@ func _ready() -> void:
_administrative_percentage_label = get_label_from_nodepath(^"./province_view/province_view_header/admin_efficiency")
_owner_percentage_label = get_label_from_nodepath(^"./province_view/province_view_header/owner_presence")
_province_modifiers_overlapping_elements_box = get_gui_overlapping_elements_box_from_nodepath(^"./province_view/province_view_header/province_modifiers")
- if _province_modifiers_overlapping_elements_box and _province_modifiers_overlapping_elements_box.set_gui_child_element_name("province_interface.gui", "prov_state_modifier") != OK:
+ if _province_modifiers_overlapping_elements_box and _province_modifiers_overlapping_elements_box.set_gui_child_element_name("province_interface", "prov_state_modifier") != OK:
_province_modifiers_overlapping_elements_box = null # hide province modifiers box since we can't do anything with it
_terrain_type_texture = get_gfx_icon_texture_from_nodepath(^"./province_view/province_view_header/prov_terrain")
_life_rating_bar = get_progress_bar_from_nodepath(^"./province_view/province_view_header/liferating")
@@ -168,7 +168,7 @@ func _ready() -> void:
_pop_cultures_piechart = get_gfx_pie_chart_texture_from_nodepath(^"./province_view/province_statistics/culture_chart")
_supply_limit_label = get_label_from_nodepath(^"./province_view/province_statistics/supply_limit_label")
_cores_overlapping_elements_box = get_gui_overlapping_elements_box_from_nodepath(^"./province_view/province_statistics/core_icons")
- if _cores_overlapping_elements_box and _cores_overlapping_elements_box.set_gui_child_element_name("province_interface.gui", "province_core") != OK:
+ if _cores_overlapping_elements_box and _cores_overlapping_elements_box.set_gui_child_element_name("province_interface", "province_core") != OK:
_cores_overlapping_elements_box = null # hide cores box since we can't do anything with it
_buildings_panel = get_panel_from_nodepath(^"./province_view/province_buildings")
@@ -176,7 +176,7 @@ func _ready() -> void:
var target_slot_count : int = GameSingleton.get_province_building_count()
var slot_y : float = 0.0
for current_slot_count : int in target_slot_count:
- var slot := GUINode.generate_gui_element("province_interface.gui", "building", "building_slot_%d" % current_slot_count)
+ var slot := GUINode.generate_gui_element("province_interface", "building", "building_slot_%d" % current_slot_count)
if slot:
_buildings_panel.add_child(slot)
slot.set_position(Vector2(0.0, slot_y))
diff --git a/game/src/Game/GameSession/Topbar.gd b/game/src/Game/GameSession/Topbar.gd
index 05eb985..3cfc0e6 100644
--- a/game/src/Game/GameSession/Topbar.gd
+++ b/game/src/Game/GameSession/Topbar.gd
@@ -1,5 +1,7 @@
extends GUINode
+@export var _outliner_guinode : GUINode
+
var _speed_up_button : Button
var _speed_down_button : Button
var _speed_indicator_button : Button
@@ -7,11 +9,16 @@ var _speed_indicator_texture : GFXIconTexture
var _date_label : Label
var _country_name_label : Label
+# NationManagement.Screen-Button
+var _nation_management_buttons : Dictionary
+# NationManagement.Screen-GFXIconTexture
+var _nation_management_button_textures : Dictionary
+
func _ready() -> void:
GameSingleton.gamestate_updated.connect(_update_info)
GameSingleton.clock_state_changed.connect(_update_speed_controls)
- add_gui_element("topbar.gui", "topbar")
+ add_gui_element("topbar", "topbar")
hide_nodes([
^"./topbar/topbar_outlinerbutton_bg",
@@ -20,10 +27,12 @@ func _ready() -> void:
const player_country : String = "SLV"
+ # Player country info
var player_flag_texture : GFXMaskedFlagTexture = get_gfx_masked_flag_texture_from_nodepath(^"./topbar/player_flag")
if player_flag_texture:
player_flag_texture.set_flag_country_name(player_country)
+ # Time controls
_speed_up_button = get_button_from_nodepath(^"./topbar/button_speedup")
if _speed_up_button:
_speed_up_button.pressed.connect(_on_increase_speed_button_pressed)
@@ -47,6 +56,31 @@ func _ready() -> void:
_speed_indicator_button.pressed.connect(_on_play_pause_button_pressed)
_speed_indicator_texture = GUINode.get_gfx_icon_texture_from_node(_speed_indicator_button)
+ # Nation management screens
+ const screen_nodepaths : Dictionary = {
+ NationManagement.Screen.PRODUCTION : ^"./topbar/topbarbutton_production",
+ NationManagement.Screen.BUDGET : ^"./topbar/topbarbutton_budget",
+ NationManagement.Screen.TECHNOLOGY : ^"./topbar/topbarbutton_tech",
+ NationManagement.Screen.POLITICS : ^"./topbar/topbarbutton_politics",
+ NationManagement.Screen.POPULATION : ^"./topbar/topbarbutton_pops",
+ NationManagement.Screen.TRADE : ^"./topbar/topbarbutton_trade",
+ NationManagement.Screen.DIPLOMACY : ^"./topbar/topbarbutton_diplomacy",
+ NationManagement.Screen.MILITARY : ^"./topbar/topbarbutton_military"
+ }
+ for screen in screen_nodepaths:
+ var button : Button = get_button_from_nodepath(screen_nodepaths[screen])
+ if button:
+ button.pressed.connect(
+ Events.NationManagementScreens.toggle_nation_management_screen.bind(screen)
+ )
+ var icon : GFXIconTexture = get_gfx_icon_texture_from_node(button)
+ if icon:
+ _nation_management_buttons[screen] = button
+ _nation_management_button_textures[screen] = icon
+ Events.NationManagementScreens.update_active_nation_management_screen.connect(
+ _on_update_active_nation_management_screen
+ )
+
_update_info()
_update_speed_controls()
@@ -92,3 +126,8 @@ func _on_increase_speed_button_pressed() -> void:
func _on_decrease_speed_button_pressed() -> void:
print("Speed down!")
GameSingleton.decrease_speed()
+
+func _on_update_active_nation_management_screen(active_screen : NationManagement.Screen) -> void:
+ for screen in _nation_management_buttons:
+ _nation_management_button_textures[screen].set_icon_index(1 + int(screen == active_screen))
+ _nation_management_buttons[screen].queue_redraw()