From 77d610eccbeec8abc4b6c8ec463361d175ee0afd Mon Sep 17 00:00:00 2001 From: Kilokem Date: Wed, 27 Aug 2025 15:40:42 +0200 Subject: [PATCH] Game Won, Game Over and Tower fixes --- Game/Maps/map_1.gd | 6 ++- Game/Maps/map_1.tscn | 2 +- Game/Towers/towers.gd | 24 +++++---- Game/sidepanel.gd | 24 +++++++++ Game/sidepanel.tscn | 111 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+), 12 deletions(-) diff --git a/Game/Maps/map_1.gd b/Game/Maps/map_1.gd index 8f82d82..84fada3 100644 --- a/Game/Maps/map_1.gd +++ b/Game/Maps/map_1.gd @@ -31,6 +31,8 @@ func _on_timer_timeout() -> void: if not get_node("Path2D").get_children(): endwave = false get_node("CanvasLayer/SidePanel").Update_waves(currentwave + 1) #updating waves + if currentwave >= 5: + get_node("CanvasLayer/SidePanel").GameWon() else: spawnMonster() @@ -40,6 +42,8 @@ func spawnMonster(): if w[0] > 0: if randf() < w[1]: #chance of generating any kind of enemy w[0] -= 1 + if w[0] <= 0: + endwave = true var chosen = randf() var sum = 0.0 for i in range(2,5): @@ -53,7 +57,7 @@ func spawnMonster(): break else: currentwave += 1 - endwave = true + func decrease_life(damage) -> void: get_node("CanvasLayer/SidePanel").Update_Lifes(-damage) diff --git a/Game/Maps/map_1.tscn b/Game/Maps/map_1.tscn index 3d1552e..cea521a 100644 --- a/Game/Maps/map_1.tscn +++ b/Game/Maps/map_1.tscn @@ -1549,7 +1549,7 @@ texture = ExtResource("65_ef8wx") curve = SubResource("Curve2D_6abe5") [node name="Timer" type="Timer" parent="."] -wait_time = 0.5 +wait_time = 0.2 autostart = true [node name="TrapArea" type="Area2D" parent="."] diff --git a/Game/Towers/towers.gd b/Game/Towers/towers.gd index b39b12e..b0498c5 100644 --- a/Game/Towers/towers.gd +++ b/Game/Towers/towers.gd @@ -20,6 +20,7 @@ var lifteramount = 0 func _ready() -> void: follower = true get_node("CharacterBody2D/Area2D").body_entered.connect(choose_target) + get_node("CharacterBody2D/Area2D").body_exited.connect(choose_target) get_node("Timer").timeout.connect(shoot) set_process_input(true) set_properties() @@ -70,10 +71,12 @@ func set_properties() -> void: get_node("Timer").wait_time = 0.5 bulletSpeed = 600 hitpoint = 25 + get_node("CharacterBody2D/Area2D/CollisionShape2D").shape.radius = 150 if self.name.contains("WizardTower"): get_node("Timer").wait_time = 1.0 bulletSpeed = 450 hitpoint = 15 + get_node("CharacterBody2D/Area2D/CollisionShape2D").shape.radius = 150 if self.name.contains("MortarTower"): #??? not sure if necessary yet get_node("Timer").wait_time = 2 hitpoint = 80 @@ -90,16 +93,17 @@ func _input(event): func choose_target(body : Node2D) -> void: if not follower: var surroinding_enemies = get_node("CharacterBody2D/Area2D").get_overlapping_bodies() - target = surroinding_enemies[0] - if self.name.contains("ArcherTower") or self.name.contains("MortarTower"): - for i in surroinding_enemies: - if i.get_parent().get_progress() > target.get_parent().get_progress(): - target = i - if self.name.contains("WizardTower"): - for i in surroinding_enemies: - if i.get_parent().get_progress() < target.get_parent().get_progress(): - target = i - pass + target = null + if surroinding_enemies.size() > 0: + target = surroinding_enemies[0] + if self.name.contains("ArcherTower") or self.name.contains("MortarTower"): + for i in surroinding_enemies: + if i.get_parent().get_progress() > target.get_parent().get_progress(): + target = i + if self.name.contains("WizardTower"): + for i in surroinding_enemies: + if i.get_parent().get_progress() < target.get_parent().get_progress(): + target = i func shoot() -> void: if target != null: diff --git a/Game/sidepanel.gd b/Game/sidepanel.gd index e3c208f..3827695 100644 --- a/Game/sidepanel.gd +++ b/Game/sidepanel.gd @@ -31,8 +31,14 @@ var coins = 0 func _ready() -> void: get_node("pausemenu").hide() get_node("pausemenu").z_index = 5 + get_node("GameOver").hide() + get_node("GameOver").z_index = 5 + get_node("GameWon").hide() + get_node("GameWon").z_index = 5 get_node("Panel").show() get_node("Panel").z_index = 5 + get_node("WaveCounter").show() + get_node("WaveCounter").z_index = 5 stickspawner.connect("button_up", Spawn_Stick) stickspawner.tooltip_text = "Cost: 10\nReturn: 5" @@ -57,6 +63,8 @@ func _ready() -> void: func _process(delta : float)-> void: coinlabel.text = "Coins: " + str(coins) livelabel.text = "Lives: " + str(lives) + if lives <= 0: + GameOver() func set_Lifes(amount) -> void: lives = amount @@ -139,6 +147,22 @@ func _unhandled_input(event): get_parent().get_parent().get_node("Timer").stop() +func GameOver() -> void: + get_node("Panel").hide() + get_node("GameOver").show() + for i in get_node("../../Path2D").get_children(): + i.get_children()[0].set_process(false) + + for i in get_parent().get_children(): + if i.name != "sidepanel": + i.set_process(false) + var timer_node = i.get_node("Timer") if i.has_node("Timer") else null + if timer_node: + timer_node.stop() + +func GameWon() -> void: + get_node("Panel").hide() + get_node("GameWon").show() func _on_button_3_pressed() -> void: get_node("pausemenu").hide() diff --git a/Game/sidepanel.tscn b/Game/sidepanel.tscn index 738350b..b64520e 100644 --- a/Game/sidepanel.tscn +++ b/Game/sidepanel.tscn @@ -350,7 +350,118 @@ alignment = 1 layout_mode = 2 text = "Current wave: 1" +[node name="GameOver" type="PanelContainer" parent="."] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +offset_left = 409.0 +offset_top = 188.5 +offset_right = 742.0 +offset_bottom = 459.5 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_s7jra") + +[node name="VBoxContainer" type="VBoxContainer" parent="GameOver"] +layout_mode = 2 +theme_override_constants/separation = 30 +alignment = 1 + +[node name="Label2" type="Label" parent="GameOver/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_4l4p2") +theme_override_font_sizes/font_size = 64 +text = "Game Over" +horizontal_alignment = 1 + +[node name="Button2" type="Button" parent="GameOver/VBoxContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 30 +theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2") +theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8") +theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d") +theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw") +text = "Restart" + +[node name="Button" type="Button" parent="GameOver/VBoxContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 30 +theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2") +theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8") +theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d") +theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw") +text = "Exit" + +[node name="GameWon" type="PanelContainer" parent="."] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +offset_left = 438.0 +offset_top = 224.5 +offset_right = 712.0 +offset_bottom = 423.5 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_s7jra") + +[node name="VBoxContainer" type="VBoxContainer" parent="GameWon"] +layout_mode = 2 +theme_override_constants/separation = 30 +alignment = 1 + +[node name="Label2" type="Label" parent="GameWon/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 0, 1) +theme_override_fonts/font = ExtResource("2_4l4p2") +theme_override_font_sizes/font_size = 64 +text = "Congratulations!" +horizontal_alignment = 1 + +[node name="Label3" type="Label" parent="GameWon/VBoxContainer"] +layout_mode = 2 +theme_override_fonts/font = ExtResource("2_4l4p2") +theme_override_font_sizes/font_size = 24 +text = "You've protected the citadell!" +horizontal_alignment = 1 + +[node name="Button2" type="Button" parent="GameWon/VBoxContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 30 +theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2") +theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8") +theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d") +theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw") +text = "Restart" + +[node name="Button" type="Button" parent="GameWon/VBoxContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 30 +theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2") +theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8") +theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d") +theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw") +text = "Continue" + [connection signal="pressed" from="Panel/HBoxContainer4/HBoxContainer4/Button3" to="." method="_on_button_3_pressed"] [connection signal="pressed" from="pausemenu/VBoxContainer/Button3" to="." method="_on_button_3_pressed"] [connection signal="pressed" from="pausemenu/VBoxContainer/Button2" to="." method="_on_button_2_pressed"] [connection signal="pressed" from="pausemenu/VBoxContainer/Button" to="." method="_on_button_pressed"] +[connection signal="pressed" from="GameOver/VBoxContainer/Button2" to="." method="_on_button_2_pressed"] +[connection signal="pressed" from="GameOver/VBoxContainer/Button" to="." method="_on_button_pressed"] +[connection signal="pressed" from="GameWon/VBoxContainer/Button2" to="." method="_on_button_2_pressed"] +[connection signal="pressed" from="GameWon/VBoxContainer/Button" to="." method="_on_button_pressed"]