summaryrefslogtreecommitdiff
path: root/Stages/Wintermaul
diff options
context:
space:
mode:
Diffstat (limited to 'Stages/Wintermaul')
-rw-r--r--Stages/Wintermaul/HUD.gd42
-rw-r--r--Stages/Wintermaul/Units/ina.tres2
-rw-r--r--Stages/Wintermaul/Units/laplus.tres2
-rw-r--r--Stages/Wintermaul/Units/tux.tres2
-rw-r--r--Stages/Wintermaul/Wintermaul.tscn29
-rw-r--r--Stages/Wintermaul/hud_tower.gd76
-rw-r--r--Stages/Wintermaul/money_manager.gd50
-rw-r--r--Stages/Wintermaul/money_manager.gd.uid1
-rw-r--r--Stages/Wintermaul/notification_manager.gd13
-rw-r--r--Stages/Wintermaul/notification_manager.gd.uid1
-rw-r--r--Stages/Wintermaul/wintermaul.gd50
11 files changed, 172 insertions, 96 deletions
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")