diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-06-27 16:51:18 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-06-27 16:51:18 +0200 |
commit | 76d1ec723b6f6f68a512f27607749f3ff885f385 (patch) | |
tree | 36cee159d2e7bc7dc6df76de3e8fe20e3658ae8d /Stages | |
parent | 0b1fd02d3cb080effe29e00f14773994d87e2e27 (diff) |
Diffstat (limited to 'Stages')
-rw-r--r-- | Stages/Stage.gd | 16 | ||||
-rw-r--r-- | Stages/Wintermaul/HUD.gd | 42 | ||||
-rw-r--r-- | Stages/Wintermaul/Units/ina.tres | 2 | ||||
-rw-r--r-- | Stages/Wintermaul/Units/laplus.tres | 2 | ||||
-rw-r--r-- | Stages/Wintermaul/Units/tux.tres | 2 | ||||
-rw-r--r-- | Stages/Wintermaul/Wintermaul.tscn | 29 | ||||
-rw-r--r-- | Stages/Wintermaul/hud_tower.gd | 76 | ||||
-rw-r--r-- | Stages/Wintermaul/money_manager.gd | 50 | ||||
-rw-r--r-- | Stages/Wintermaul/money_manager.gd.uid | 1 | ||||
-rw-r--r-- | Stages/Wintermaul/notification_manager.gd | 13 | ||||
-rw-r--r-- | Stages/Wintermaul/notification_manager.gd.uid | 1 | ||||
-rw-r--r-- | Stages/Wintermaul/wintermaul.gd | 50 | ||||
-rw-r--r-- | Stages/Wintermaul2/Wintermaul2.tscn | 5 |
13 files changed, 180 insertions, 109 deletions
diff --git a/Stages/Stage.gd b/Stages/Stage.gd index 40c805a..3d29b21 100644 --- a/Stages/Stage.gd +++ b/Stages/Stage.gd @@ -116,21 +116,13 @@ func set_player_script(script: Script): player[property] = previous_values[property] -func add_status_message(message: String): - var label = Label.new() - label.text = message - $HUD.get_node("%StatusMessages").add_child(label) - await get_tree().create_timer(3.0).timeout - label.queue_free() - - ## get spawn node -func get_spawn(): - pass +func get_spawn() -> Spawn: + return null ## get target after spawn to overwrite default spawn target -func get_overwrite_target(): - pass +func get_spawn_target() -> Node2D: + return null func _on_peer_disconnected(id): diff --git a/Stages/Wintermaul/HUD.gd b/Stages/Wintermaul/HUD.gd index 62a5abd..b9b831f 100644 --- a/Stages/Wintermaul/HUD.gd +++ b/Stages/Wintermaul/HUD.gd @@ -2,6 +2,10 @@ class_name HUD extends CanvasLayer +@export var selection_manager: SelectionManager +@export var money_manager: MoneyManager +@export var notification_manager: NotificationManager + @onready var time: Label = %Time @onready var money: Label = %Money @onready var income: Label = %Income @@ -11,6 +15,8 @@ extends CanvasLayer @onready var lives_top: Label = %LivesTop @onready var lives_bottom: Label = %LivesBottom +@onready var status_messages: Control = %StatusMessages + func _ready(): Client.player.money_changed.connect(func(): @@ -37,7 +43,7 @@ func _ready(): %MultiSelectionContainer.visible = false # add tower to selection - Client.selection.added_to_group.connect(func(nodes: Array[Node], id: String): + selection_manager.added_to_group.connect(func(nodes: Array[Node], id: String): for tower: Tower in nodes: var multi_select_hud_data = TextureRect.new() multi_select_hud_data.modulate = Color(0.5, 0.5, 0.5) @@ -55,11 +61,11 @@ func _ready(): multi_select_hud_data.add_to_group(id) %MultiSelectionList.add_child(multi_select_hud_data) - if Client.selection.node_count == 1: + if selection_manager.node_count == 1: %SelectionContainer.visible = true %MultiSelectionContainer.visible = false - elif Client.selection.node_count > 1: + elif selection_manager.node_count > 1: %MultiSelectionContainer.visible = true redraw_multiselect() @@ -67,13 +73,13 @@ func _ready(): ) # remove tower from selection - Client.selection.removed_from_group.connect(func(nodes: Array[Node], _id: String): + selection_manager.removed_from_group.connect(func(nodes: Array[Node], _id: String): for tower: Tower in nodes: - if Client.selection.node_count == 0: + if selection_manager.node_count == 0: %SelectionContainer.visible = false %MultiSelectionContainer.visible = false - elif Client.selection.node_count == 1: + elif selection_manager.node_count == 1: %MultiSelectionContainer.visible = false %SelectionContainer.visible = true @@ -85,22 +91,26 @@ func _ready(): ) # move tower to new selection group - Client.selection.moved_to_group.connect(func(nodes: Array[Node], previous_id: String, new_id: String): + selection_manager.moved_to_group.connect(func(nodes: Array[Node], previous_id: String, new_id: String): for tower: Tower in nodes: tower.get_meta("multi_select_hud").remove_from_group(previous_id) tower.get_meta("multi_select_hud").add_to_group(new_id) - if Client.selection.has_node_in_group(tower, new_id): + if selection_manager.has_node_in_group(tower, new_id): redraw_select(tower) redraw_multiselect(previous_id, new_id) ) # redraw on selected group change - Client.selection.selected_group_changed.connect(func(previous_id: String, new_id: String): - if Client.selection.get_selected_nodes(): - redraw_select(Client.selection.get_selected_nodes()[0]) + selection_manager.selected_group_changed.connect(func(previous_id: String, new_id: String): + if selection_manager.get_selected_nodes(): + redraw_select(selection_manager.get_selected_nodes()[0]) redraw_multiselect(previous_id, new_id) ) + + %TowerData.selection_manager = selection_manager + %TowerData.money_manager = money_manager + %TowerData.notification_manager = notification_manager func _input(event: InputEvent): @@ -112,19 +122,19 @@ func _input(event: InputEvent): if event.is_action_pressed("selection_cycle") and %MultiSelectionContainer.visible: if Input.is_action_pressed("reverse_cycle_direction"): - Client.selection.go_to_previous() + selection_manager.go_to_previous() else: - Client.selection.go_to_next() + selection_manager.go_to_next() func redraw_select(tower: Tower): %TowerData.current_tower = tower -func redraw_multiselect(previous_group: String = "", new_group: String = Client.selection.selected_group): +func redraw_multiselect(previous_group: String = "", new_group: String = selection_manager.selected_group): var idx = 0 - for id in Client.selection.get_ordered_group_ids(): - var group = Client.selection.selection_groups[id] + for id in selection_manager.get_ordered_group_ids(): + var group = selection_manager.selection_groups[id] for node: Tower in group: # when double click selecting in quick succession not found error if (node.has_meta("multi_select_hud") and diff --git a/Stages/Wintermaul/Units/ina.tres b/Stages/Wintermaul/Units/ina.tres index 0d8bc8c..c3ee5d4 100644 --- a/Stages/Wintermaul/Units/ina.tres +++ b/Stages/Wintermaul/Units/ina.tres @@ -6,7 +6,7 @@ [resource] script = ExtResource("1_tv002") cost = 10 -income = 3 +income = 2 sprite_frames = ExtResource("2_3lxif") sprite_scale = Vector2(1, 1) hp = 10 diff --git a/Stages/Wintermaul/Units/laplus.tres b/Stages/Wintermaul/Units/laplus.tres index fae9ca8..9015633 100644 --- a/Stages/Wintermaul/Units/laplus.tres +++ b/Stages/Wintermaul/Units/laplus.tres @@ -6,7 +6,7 @@ [resource] script = ExtResource("1_v867v") cost = 15 -income = 5 +income = 3 sprite_frames = ExtResource("2_hko3p") sprite_scale = Vector2(1, 1) hp = 10 diff --git a/Stages/Wintermaul/Units/tux.tres b/Stages/Wintermaul/Units/tux.tres index b493541..0f3a949 100644 --- a/Stages/Wintermaul/Units/tux.tres +++ b/Stages/Wintermaul/Units/tux.tres @@ -6,7 +6,7 @@ [resource] script = ExtResource("1_hb4f3") cost = 20 -income = 7 +income = 4 sprite_frames = ExtResource("2_qgpsq") sprite_scale = Vector2(1, 1) hp = 15 diff --git a/Stages/Wintermaul/Wintermaul.tscn b/Stages/Wintermaul/Wintermaul.tscn index 2621af8..33291dc 100644 --- a/Stages/Wintermaul/Wintermaul.tscn +++ b/Stages/Wintermaul/Wintermaul.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=4 uid="uid://bl65jllb3e2py"] +[gd_scene load_steps=20 format=4 uid="uid://bl65jllb3e2py"] [ext_resource type="Script" uid="uid://c7qjm8tuhhe4p" path="res://Stages/Wintermaul/wintermaul.gd" id="1_o88ua"] [ext_resource type="Shader" uid="uid://bvni6cdwtojtr" path="res://UI/sliding_background.gdshader" id="2_tom3b"] @@ -10,6 +10,9 @@ [ext_resource type="PackedScene" uid="uid://ic2hc7gr27p3" path="res://Game/Selection/SelectionRectangle.tscn" id="6_7dk4w"] [ext_resource type="PackedScene" uid="uid://d0ukgoppkh1fn" path="res://Stages/Paths/PathNode.tscn" id="6_lh0f6"] [ext_resource type="PackedScene" uid="uid://t8feyd2giabm" path="res://UI/Camera.tscn" id="6_yijl8"] +[ext_resource type="PackedScene" uid="uid://mgm4npqeybbr" path="res://Game/Selection/SelectionManager.tscn" id="14_rsm68"] +[ext_resource type="Script" uid="uid://cdfmuda1ibg4a" path="res://Stages/Wintermaul/money_manager.gd" id="15_iudrt"] +[ext_resource type="Script" uid="uid://bmuymcnxw1mv1" path="res://Stages/Wintermaul/notification_manager.gd" id="16_qx3xb"] [ext_resource type="PackedScene" uid="uid://d4hgrh7danbbx" path="res://Game/States/StateManager.tscn" id="22_gur1m"] [ext_resource type="PackedScene" uid="uid://cg16o7eqqha70" path="res://Game/States/Default/StateDefault.tscn" id="23_qknks"] [ext_resource type="PackedScene" uid="uid://bo5dp02vlui3l" path="res://Game/States/Build/StateBuild.tscn" id="24_yl2il"] @@ -44,8 +47,11 @@ grow_vertical = 2 mouse_filter = 2 color = Color(0, 0, 0, 1) -[node name="HUD" parent="." instance=ExtResource("2_v3f6l")] +[node name="HUD" parent="." node_paths=PackedStringArray("selection_manager", "money_manager", "notification_manager") instance=ExtResource("2_v3f6l")] unique_name_in_owner = true +selection_manager = NodePath("../SelectionManager") +money_manager = NodePath("../MoneyManager") +notification_manager = NodePath("../NotificationManager") [node name="Map" type="TileMapLayer" parent="."] unique_name_in_owner = true @@ -69,6 +75,7 @@ drag_horizontal_enabled = true drag_vertical_enabled = true [node name="SelectionRectangle" parent="." instance=ExtResource("6_7dk4w")] +color_border = Color(1, 1, 1, 0.501961) [node name="Paths" type="Node2D" parent="."] visible = false @@ -137,9 +144,20 @@ y_sort_enabled = true [node name="StateManager" parent="." instance=ExtResource("22_gur1m")] unique_name_in_owner = true -[node name="StateDefault" parent="StateManager" instance=ExtResource("23_qknks")] +[node name="StateDefault" parent="StateManager" node_paths=PackedStringArray("selection_manager") instance=ExtResource("23_qknks")] +selection_manager = NodePath("../../SelectionManager") -[node name="StateBuild" parent="StateManager" instance=ExtResource("24_yl2il")] +[node name="StateBuild" parent="StateManager" node_paths=PackedStringArray("selection_manager") instance=ExtResource("24_yl2il")] +selection_manager = NodePath("../../SelectionManager") + +[node name="SelectionManager" parent="." instance=ExtResource("14_rsm68")] + +[node name="MoneyManager" type="Node" parent="."] +script = ExtResource("15_iudrt") + +[node name="NotificationManager" type="Node" parent="." node_paths=PackedStringArray("hud")] +script = ExtResource("16_qx3xb") +hud = NodePath("../HUD") [node name="BuilderCollisions" type="Node2D" parent="."] visible = false @@ -164,3 +182,6 @@ shape = SubResource("RectangleShape2D_cwpxx") one_shot = true [connection signal="timeout" from="IncomeTimer" to="." method="_on_income_timer_timeout"] + +[editable path="StateManager/StateDefault"] +[editable path="StateManager/StateBuild"] diff --git a/Stages/Wintermaul/hud_tower.gd b/Stages/Wintermaul/hud_tower.gd index 7a7ef69..5214636 100644 --- a/Stages/Wintermaul/hud_tower.gd +++ b/Stages/Wintermaul/hud_tower.gd @@ -5,6 +5,10 @@ extends Control #signal power_applied(previous_value: int, current_value: int, number_of_towers: int) #signal speed_applied(previous_value: int, current_value: int, number_of_towers: int) +@export var selection_manager: SelectionManager +@export var money_manager: MoneyManager +@export var notification_manager: NotificationManager + var current_tower: Tower: set = set_current_tower @@ -36,7 +40,7 @@ func redraw_components(): func get_selected_towers() -> Array: - return Client.selection.get_selected_nodes().duplicate() + return selection_manager.get_selected_nodes().duplicate() func _on_range_gui_input(event: InputEvent) -> void: @@ -44,14 +48,14 @@ func _on_range_gui_input(event: InputEvent) -> void: get_viewport().set_input_as_handled() if current_tower.components.has(TowerComponent.ComponentType.Range): - Client.current_stage.add_status_message("Component already added") + notification_manager.add_status_message("Component already added") return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_range(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Range, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to add component") + notification_manager.add_status_message("Not enough money to add component") return for tower: Tower in towers: @@ -69,14 +73,14 @@ func _on_attack_gui_input(event: InputEvent) -> void: get_viewport().set_input_as_handled() if current_tower.components.has(TowerComponent.ComponentType.Attack): - Client.current_stage.add_status_message("Component already added") + notification_manager.add_status_message("Component already added") return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_attack(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Attack, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to add component") + notification_manager.add_status_message("Not enough money to add component") return for tower: Tower in towers: @@ -94,14 +98,14 @@ func _on_frost_gui_input(event: InputEvent) -> void: get_viewport().set_input_as_handled() if current_tower.components.has(TowerComponent.ComponentType.Frost): - Client.current_stage.add_status_message("Component already added") + notification_manager.add_status_message("Component already added") return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_frost(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Frost, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to add component") + notification_manager.add_status_message("Not enough money to add component") return for tower: Tower in towers: @@ -119,14 +123,14 @@ func _on_burn_gui_input(event: InputEvent) -> void: get_viewport().set_input_as_handled() if current_tower.components.has(TowerComponent.ComponentType.Burn): - Client.current_stage.add_status_message("Component already added") + notification_manager.add_status_message("Component already added") return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_burn(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Burn, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to add component") + notification_manager.add_status_message("Not enough money to add component") return for tower: Tower in towers: @@ -144,14 +148,14 @@ func _on_poison_gui_input(event: InputEvent) -> void: get_viewport().set_input_as_handled() if current_tower.components.has(TowerComponent.ComponentType.Poison): - Client.current_stage.add_status_message("Component already added") + notification_manager.add_status_message("Component already added") return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_poison(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Poison, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to add component") + notification_manager.add_status_message("Not enough money to add component") return for tower: Tower in towers: @@ -172,9 +176,9 @@ func _on_range_level_up_pressed() -> void: if not component: return - var cost = Client.current_stage.PriceMapTower.component_range_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to level up") + notification_manager.add_status_message("Not enough money to level up") return for tower in towers: @@ -204,9 +208,9 @@ func _on_attack_level_up_pressed() -> void: if not component: return - var cost = Client.current_stage.PriceMapTower.component_attack_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to level up") + notification_manager.add_status_message("Not enough money to level up") return for tower: Tower in towers: @@ -236,9 +240,9 @@ func _on_frost_level_up_pressed() -> void: if not component: return - var cost = Client.current_stage.PriceMapTower.component_frost_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to level up") + notification_manager.add_status_message("Not enough money to level up") return for tower: Tower in towers: @@ -261,9 +265,9 @@ func _on_burn_level_up_pressed() -> void: if not component: return - var cost = Client.current_stage.PriceMapTower.component_burn_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to level up") + notification_manager.add_status_message("Not enough money to level up") return for tower: Tower in towers: @@ -286,9 +290,9 @@ func _on_poison_level_up_pressed() -> void: if not component: return - var cost = Client.current_stage.PriceMapTower.component_poison_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) if Client.player.money < cost: - Client.current_stage.add_status_message("Not enough money to level up") + notification_manager.add_status_message("Not enough money to level up") return for tower: Tower in towers: @@ -310,7 +314,7 @@ func _on_range_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_range(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Range, towers.size()) $Components/Range.tooltip_text = "Cost: " + str(cost) func _on_range_level_up_mouse_entered() -> void: @@ -320,7 +324,7 @@ func _on_range_level_up_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_range_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) $Components/Range/RangeLevelUp.tooltip_text = "Cost: " + str(cost) func _on_attack_mouse_entered() -> void: @@ -329,7 +333,7 @@ func _on_attack_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_attack(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Attack, towers.size()) $Components/Attack.tooltip_text = "Cost: " + str(cost) func _on_attack_level_up_mouse_entered() -> void: @@ -339,7 +343,7 @@ func _on_attack_level_up_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_attack_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) $Components/Attack/AttackLevelUp.tooltip_text = "Cost: " + str(cost) func _on_frost_mouse_entered() -> void: @@ -348,7 +352,7 @@ func _on_frost_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_frost(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Frost, towers.size()) $Components/Frost.tooltip_text = "Cost: " + str(cost) func _on_frost_level_up_mouse_entered() -> void: @@ -358,7 +362,7 @@ func _on_frost_level_up_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_frost_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) $Components/Frost/FrostLevelUp.tooltip_text = "Cost: " + str(cost) func _on_burn_mouse_entered() -> void: @@ -367,7 +371,7 @@ func _on_burn_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_burn(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Burn, towers.size()) $Components/Burn.tooltip_text = "Cost: " + str(cost) func _on_burn_level_up_mouse_entered() -> void: @@ -377,7 +381,7 @@ func _on_burn_level_up_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_burn_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) $Components/Burn/BurnLevelUp.tooltip_text = "Cost: " + str(cost) func _on_poison_mouse_entered() -> void: @@ -386,7 +390,7 @@ func _on_poison_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_poison(towers.size()) + var cost = money_manager.get_component_price(TowerComponent.ComponentType.Poison, towers.size()) $Components/Poison.tooltip_text = "Cost: " + str(cost) func _on_poison_level_up_mouse_entered() -> void: @@ -396,5 +400,5 @@ func _on_poison_level_up_mouse_entered() -> void: return var towers = get_selected_towers() - var cost = Client.current_stage.PriceMapTower.component_poison_level(component, towers.size()) + var cost = money_manager.get_component_level_up_price(component, towers.size()) $Components/Poison/PoisonLevelUp.tooltip_text = "Cost: " + str(cost) diff --git a/Stages/Wintermaul/money_manager.gd b/Stages/Wintermaul/money_manager.gd new file mode 100644 index 0000000..3029a67 --- /dev/null +++ b/Stages/Wintermaul/money_manager.gd @@ -0,0 +1,50 @@ +class_name MoneyManager +extends Node + + +func get_tower_price() -> int: + return 5 + + +func get_component_price( + component_type: TowerComponent.ComponentType, + number_of_towers: int +) -> int: + if component_type == TowerComponent.ComponentType.Range: + return 100 * number_of_towers + + elif component_type == TowerComponent.ComponentType.Attack: + return 100 * number_of_towers + + elif component_type == TowerComponent.ComponentType.Frost: + return 100 * number_of_towers + + elif component_type == TowerComponent.ComponentType.Burn: + return 100 * number_of_towers + + elif component_type == TowerComponent.ComponentType.Poison: + return 100 * number_of_towers + + return 0 + + +func get_component_level_up_price( + component: TowerComponent, + number_of_towers: int +) -> int: + if component.type == TowerComponent.ComponentType.Range: + return int(pow(5, component.level)) * number_of_towers + + elif component.type == TowerComponent.ComponentType.Attack: + return 10 * component.level * number_of_towers + + elif component.type == TowerComponent.ComponentType.Frost: + return 10 * component.level * number_of_towers + + elif component.type == TowerComponent.ComponentType.Burn: + return 10 * component.level * number_of_towers + + elif component.type == TowerComponent.ComponentType.Poison: + return 10 * component.level * number_of_towers + + return 0 diff --git a/Stages/Wintermaul/money_manager.gd.uid b/Stages/Wintermaul/money_manager.gd.uid new file mode 100644 index 0000000..36f0e46 --- /dev/null +++ b/Stages/Wintermaul/money_manager.gd.uid @@ -0,0 +1 @@ +uid://cdfmuda1ibg4a diff --git a/Stages/Wintermaul/notification_manager.gd b/Stages/Wintermaul/notification_manager.gd new file mode 100644 index 0000000..ddb1f06 --- /dev/null +++ b/Stages/Wintermaul/notification_manager.gd @@ -0,0 +1,13 @@ +class_name NotificationManager +extends Node + + +@export var hud: HUD + + +func add_status_message(message: String): + var label = Label.new() + label.text = message + hud.status_messages.add_child(label) + await get_tree().create_timer(3.0).timeout + label.queue_free() diff --git a/Stages/Wintermaul/notification_manager.gd.uid b/Stages/Wintermaul/notification_manager.gd.uid new file mode 100644 index 0000000..4260170 --- /dev/null +++ b/Stages/Wintermaul/notification_manager.gd.uid @@ -0,0 +1 @@ +uid://bmuymcnxw1mv1 diff --git a/Stages/Wintermaul/wintermaul.gd b/Stages/Wintermaul/wintermaul.gd index 0de2cdb..73ad8c4 100644 --- a/Stages/Wintermaul/wintermaul.gd +++ b/Stages/Wintermaul/wintermaul.gd @@ -1,4 +1,3 @@ -class_name Wintermaul extends Stage @@ -19,40 +18,16 @@ var teams := Teams.new() var income_frequency := 15.0 -class PriceMapTower: - static var cost: int = 5 - - static func component_range(number_of_towers: int = 1): - return 100 * number_of_towers - static func component_range_level(component: TowerComponent, number_of_towers: int = 1): - return pow(5, component.level) * number_of_towers - - static func component_attack(number_of_towers: int = 1): - return 100 * number_of_towers - static func component_attack_level(component: TowerComponent, number_of_towers: int = 1): - return 10 * component.level * number_of_towers - - static func component_frost(number_of_towers: int = 1): - return 100 * number_of_towers - static func component_frost_level(component: TowerComponent, number_of_towers: int = 1): - return 10 * component.level * number_of_towers - - static func component_burn(number_of_towers: int = 1): - return 100 * number_of_towers - static func component_burn_level(component: TowerComponent, number_of_towers: int = 1): - return 10 * component.level * number_of_towers - - static func component_poison(number_of_towers: int = 1): - return 100 * number_of_towers - static func component_poison_level(component: TowerComponent, number_of_towers: int = 1): - return 10 * component.level * number_of_towers - var starting_lives := 10 var starting_money := 50 var starting_income := 5 var use_premade_teams := false var premade_teams := {} +@onready var selection_manager: SelectionManager = $SelectionManager +@onready var money_manager: MoneyManager = $MoneyManager +@onready var notification_manager: NotificationManager = $NotificationManager + func _init(): super._init() @@ -122,7 +97,7 @@ func place_tower(remote_data: Dictionary): var player = Network.get_player(tower.owner_id) player.towers[tower.global_position] = tower - player.money -= PriceMapTower.cost + player.money -= money_manager.get_tower_price() Network.players_changed.emit() _place_tower(%Towers, tower) @@ -154,15 +129,15 @@ func spawn_unit(remote_data: Dictionary): func can_place_tower(): - if Client.player.money < PriceMapTower.cost: - add_status_message("Not enough money to build tower") + if Client.player.money < money_manager.get_tower_price(): + notification_manager.add_status_message("Not enough money to build tower") return false return true func can_spawn_unit(unit: Unit): if Client.player.money < unit.unit_resource.cost: - add_status_message("Not enough money to spawn unit") + notification_manager.add_status_message("Not enough money to spawn unit") return false return true @@ -182,17 +157,18 @@ func get_team(player: Player) -> Team: return null -func get_spawn(): +func get_spawn() -> Spawn: return %Spawn -func get_overwrite_target(): +func get_spawn_target() -> Node2D: var team = get_team(Client.player) if team == teams.top: return [$Paths/PathNodeLeftDown, $Paths/PathNodeRightDown].pick_random() elif team == teams.bottom: return [$Paths/PathNodeLeftUp, $Paths/PathNodeRightUp].pick_random() + return null func get_builder_collision_masks(): @@ -224,7 +200,7 @@ func update_lives(team: String, lives: int): lives_changed.emit() if lives < 0: - add_status_message("Team " + team + " lost " + str(abs(lives)) + " life") + notification_manager.add_status_message("Team " + team + " lost " + str(abs(lives)) + " life") if teams[team].lives <= 0: - add_status_message("Team " + team + " lost the game") + notification_manager.add_status_message("Team " + team + " lost the game") diff --git a/Stages/Wintermaul2/Wintermaul2.tscn b/Stages/Wintermaul2/Wintermaul2.tscn index ebf97a1..d96c851 100644 --- a/Stages/Wintermaul2/Wintermaul2.tscn +++ b/Stages/Wintermaul2/Wintermaul2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=4 uid="uid://dwscklgkbhq28"] +[gd_scene load_steps=18 format=4 uid="uid://dwscklgkbhq28"] [ext_resource type="Script" uid="uid://c7qjm8tuhhe4p" path="res://Stages/Wintermaul/wintermaul.gd" id="1_sv3vj"] [ext_resource type="PackedScene" uid="uid://bylx30cweulmk" path="res://Stages/Wintermaul/HUD.tscn" id="2_ba5js"] @@ -13,6 +13,7 @@ [ext_resource type="PackedScene" uid="uid://d4hgrh7danbbx" path="res://Game/States/StateManager.tscn" id="9_r04jr"] [ext_resource type="PackedScene" uid="uid://cg16o7eqqha70" path="res://Game/States/Default/StateDefault.tscn" id="10_vqjkx"] [ext_resource type="PackedScene" uid="uid://bo5dp02vlui3l" path="res://Game/States/Build/StateBuild.tscn" id="11_8hpm2"] +[ext_resource type="PackedScene" uid="uid://mgm4npqeybbr" path="res://Game/Selection/SelectionManager.tscn" id="14_8t5ap"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_sdgwb"] shader = ExtResource("2_vy0x7") @@ -160,6 +161,8 @@ unique_name_in_owner = true [node name="StateBuild" parent="StateManager" instance=ExtResource("11_8hpm2")] +[node name="SelectionManager" parent="." instance=ExtResource("14_8t5ap")] + [node name="BuilderCollisions" type="Node2D" parent="."] visible = false |