From 9859ddfe8717cc6f20886ae0c2ed0bd7f661e50c Mon Sep 17 00:00:00 2001 From: Kilokem Date: Wed, 30 Apr 2025 21:29:28 +0200 Subject: [PATCH] Alternative way to place tovers and enemies --- Game/Maps/map_1.tscn | 62 +++++++++++++++++++++++++++++++++++++- Game/Towers/towers.gd | 6 ++-- Game/Traps/mine.tscn | 10 +++++- Game/Traps/stick_trap.tscn | 12 +++++++- Game/Traps/traps.gd | 15 ++++++++- Game/Traps/wall.tscn | 14 +++++++-- 6 files changed, 110 insertions(+), 9 deletions(-) diff --git a/Game/Maps/map_1.tscn b/Game/Maps/map_1.tscn index 219e5a3..c24e88f 100644 --- a/Game/Maps/map_1.tscn +++ b/Game/Maps/map_1.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=134 format=4 uid="uid://bgme05i7taycc"] +[gd_scene load_steps=141 format=4 uid="uid://bgme05i7taycc"] [ext_resource type="Texture2D" uid="uid://f1npbjsw71nk" path="res://Assets/Tiles/Fields/FieldsTile_01.png" id="1_fdpq6"] [ext_resource type="Script" uid="uid://xo6vbicdva8d" path="res://Game/Maps/map_1.gd" id="1_rec5e"] @@ -461,6 +461,27 @@ _data = { } point_count = 15 +[sub_resource type="RectangleShape2D" id="RectangleShape2D_rec5e"] +size = Vector2(864, 22) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_hg5c4"] +size = Vector2(861, 23) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_h3dak"] +size = Vector2(992, 24) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_6egdt"] +size = Vector2(1163, 13) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_n3ya7"] +size = Vector2(850.25, 5.375) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_4tlg5"] +size = Vector2(1161, 9.5) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_sglle"] +size = Vector2(185, 319) + [node name="Map1" type="Node2D"] script = ExtResource("1_rec5e") @@ -493,4 +514,43 @@ offset_top = 583.0 offset_right = 1152.0 offset_bottom = 647.0 +[node name="TrapArea" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="TrapArea"] +position = Vector2(434, 163) +shape = SubResource("RectangleShape2D_rec5e") +debug_color = Color(0.798903, 0.0385002, 1, 0.42) + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="TrapArea"] +position = Vector2(497.5, 317.5) +shape = SubResource("RectangleShape2D_hg5c4") +debug_color = Color(0.798903, 0.0385002, 1, 0.42) + +[node name="CollisionShape2D3" type="CollisionShape2D" parent="TrapArea"] +position = Vector2(498, 479) +shape = SubResource("RectangleShape2D_h3dak") +debug_color = Color(0.798903, 0.0385002, 1, 0.42) + +[node name="TowerArea" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="TowerArea"] +position = Vector2(582, 58.5) +shape = SubResource("RectangleShape2D_6egdt") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="TowerArea"] +position = Vector2(416, 237) +shape = SubResource("RectangleShape2D_n3ya7") + +[node name="CollisionShape2D3" type="CollisionShape2D" parent="TowerArea"] +position = Vector2(527.125, 391.313) +shape = SubResource("RectangleShape2D_n3ya7") + +[node name="CollisionShape2D4" type="CollisionShape2D" parent="TowerArea"] +position = Vector2(579, 559) +shape = SubResource("RectangleShape2D_4tlg5") + +[node name="CollisionShape2D5" type="CollisionShape2D" parent="TowerArea"] +position = Vector2(1061.5, 285.5) +shape = SubResource("RectangleShape2D_sglle") + [connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/Game/Towers/towers.gd b/Game/Towers/towers.gd index 30339e3..f425df6 100644 --- a/Game/Towers/towers.gd +++ b/Game/Towers/towers.gd @@ -25,12 +25,12 @@ func _process(delta: float) -> void: if follower: position = get_viewport().get_mouse_position() if not name.contains("MortarTower"): - if get_node("Area2D").get_overlapping_bodies().size() > 1: + if get_node("Area2D").get_overlapping_bodies().size() > 1 or self.get_node("CharacterBody2D") not in get_parent().get_node("TowerArea").get_overlapping_bodies(): get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(255, 0, 0, 0.3) else: get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(1, 1, 1, 1) else: - if get_node("Area2D").get_overlapping_bodies().size() > 1: + if get_node("Area2D").get_overlapping_bodies().size() > 1 or self.get_node("CharacterBody2D") not in get_parent().get_node("TowerArea").get_overlapping_bodies(): get_node("CharacterBody2D/lifter - 1").modulate = Color(255, 0, 0, 0.3) get_node("CharacterBody2D/lifter - 2").modulate = Color(255, 0, 0, 0.3) get_node("CharacterBody2D/MortarPart(2)").modulate = Color(255, 0, 0, 0.3) @@ -74,7 +74,7 @@ func get_if_moving_state(): func _input(event): if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: if abs(position) <= get_viewport().get_mouse_position(): - if get_node("Area2D").get_overlapping_bodies().size() <= 1: + if get_node("Area2D").get_overlapping_bodies().size() <= 1 and self.get_node("CharacterBody2D") in get_parent().get_node("TowerArea").get_overlapping_bodies(): follower = false func choose_target(body : Node2D) -> void: diff --git a/Game/Traps/mine.tscn b/Game/Traps/mine.tscn index e61a2b3..6df1a0c 100644 --- a/Game/Traps/mine.tscn +++ b/Game/Traps/mine.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://ctbmgsp8dfel3"] +[gd_scene load_steps=10 format=3 uid="uid://ctbmgsp8dfel3"] [ext_resource type="Script" uid="uid://3gn70ilm20tw" path="res://Game/Traps/traps.gd" id="1_6fgim"] [ext_resource type="Texture2D" uid="uid://dn22pudsmyrrg" path="res://Assets/Traps/Mine/49.png" id="2_6m2fs"] @@ -36,6 +36,8 @@ animations = [{ [sub_resource type="CircleShape2D" id="CircleShape2D_uiyu1"] +[sub_resource type="CircleShape2D" id="CircleShape2D_57sxm"] + [node name="Mine" type="Node2D"] script = ExtResource("1_6fgim") @@ -56,3 +58,9 @@ autoplay = "idle" [node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D/Area2D"] scale = Vector2(6, 6) shape = SubResource("CircleShape2D_uiyu1") + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource("CircleShape2D_57sxm") +debug_color = Color(0.811824, 0.00210331, 0.983083, 0.42) diff --git a/Game/Traps/stick_trap.tscn b/Game/Traps/stick_trap.tscn index 8545412..c69adaa 100644 --- a/Game/Traps/stick_trap.tscn +++ b/Game/Traps/stick_trap.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=5 format=3 uid="uid://pqy8rrvjthgl"] +[gd_scene load_steps=6 format=3 uid="uid://pqy8rrvjthgl"] [ext_resource type="Texture2D" uid="uid://4bah0c8unbl8" path="res://Assets/Traps/Sticks/Tile2_59.png" id="1_dnq4b"] [ext_resource type="Script" uid="uid://3gn70ilm20tw" path="res://Game/Traps/traps.gd" id="1_metvu"] @@ -7,6 +7,9 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_m1bdk"] radius = 32.0 +[sub_resource type="RectangleShape2D" id="RectangleShape2D_metvu"] +size = Vector2(49.5, 18) + [node name="StickTrap" type="Node2D"] script = ExtResource("1_metvu") @@ -28,3 +31,10 @@ offset = Vector2(-10, 0) position = Vector2(5, 0) scale = Vector2(0.8, 0.8) shape = SubResource("CircleShape2D_m1bdk") + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2(4.25, 11) +shape = SubResource("RectangleShape2D_metvu") +debug_color = Color(0.811824, 0.00210331, 0.983083, 0.42) diff --git a/Game/Traps/traps.gd b/Game/Traps/traps.gd index 229f227..9623150 100644 --- a/Game/Traps/traps.gd +++ b/Game/Traps/traps.gd @@ -16,6 +16,18 @@ func _ready() -> void: func _process(delta: float) -> void: if follower: position = get_viewport().get_mouse_position() + if name.contains("Mine"): + if get_node("Area2D").get_overlapping_bodies().size() > 1 or self.get_node("CharacterBody2D") not in get_parent().get_node("TrapArea").get_overlapping_bodies(): + get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(255, 0, 0, 0.3) + else: + get_node("CharacterBody2D/AnimatedSprite2D").modulate = Color(1, 1, 1, 1) + if name.contains("StickTrap") or name.contains("Wall"): + if get_node("Area2D").get_overlapping_bodies().size() > 1 or self.get_node("CharacterBody2D") not in get_parent().get_node("TrapArea").get_overlapping_bodies(): + get_node("CharacterBody2D/Sprite2D").modulate = Color(255, 0, 0, 0.3) + get_node("CharacterBody2D/Sprite2D2").modulate = Color(255, 0, 0, 0.3) + else: + get_node("CharacterBody2D/Sprite2D").modulate = Color(1, 1, 1, 1) + get_node("CharacterBody2D/Sprite2D2").modulate = Color(1, 1, 1, 1) func get_if_moving_state(): return follower @@ -23,7 +35,8 @@ func get_if_moving_state(): func _input(event): if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: if abs(position) <= get_viewport().get_mouse_position(): - follower = false + if get_node("Area2D").get_overlapping_bodies().size() <= 1 and self.get_node("CharacterBody2D") in get_parent().get_node("TrapArea").get_overlapping_bodies(): + follower = false func Explode_Mine() -> void: get_node("CharacterBody2D/AnimatedSprite2D").scale = Vector2(1,1) diff --git a/Game/Traps/wall.tscn b/Game/Traps/wall.tscn index 3dc92fc..0f894b3 100644 --- a/Game/Traps/wall.tscn +++ b/Game/Traps/wall.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://cc5j50rtwlfld"] +[gd_scene load_steps=9 format=3 uid="uid://cc5j50rtwlfld"] [ext_resource type="Script" uid="uid://3gn70ilm20tw" path="res://Game/Traps/traps.gd" id="1_3ht3o"] [ext_resource type="Texture2D" uid="uid://ri5c5u8gbjde" path="res://Assets/Traps/Wall/Tile2_49.png" id="1_y07rg"] @@ -24,6 +24,9 @@ corner_radius_bottom_left = 20 [sub_resource type="RectangleShape2D" id="RectangleShape2D_3ht3o"] size = Vector2(38, 59) +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xk2lx"] +size = Vector2(20, 59) + [node name="Wall" type="Node2D"] script = ExtResource("1_3ht3o") @@ -40,7 +43,7 @@ position = Vector2(2.38419e-07, -0.999999) scale = Vector2(0.8, 0.8) shape = SubResource("RectangleShape2D_bxxpj") -[node name="Tile257" type="Sprite2D" parent="CharacterBody2D"] +[node name="Sprite2D" type="Sprite2D" parent="CharacterBody2D"] position = Vector2(3, 13) scale = Vector2(1, 0.923) texture = ExtResource("2_3ht3o") @@ -65,6 +68,13 @@ shape = SubResource("RectangleShape2D_3ht3o") [node name="Timer" type="Timer" parent="CharacterBody2D"] wait_time = 0.3 +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2(0, -1.5) +shape = SubResource("RectangleShape2D_xk2lx") +debug_color = Color(0.811824, 0.00210331, 0.983083, 0.42) + [connection signal="body_shape_entered" from="CharacterBody2D/Area2D" to="." method="_on_area_2d_body_shape_entered"] [connection signal="body_shape_exited" from="CharacterBody2D/Area2D" to="." method="_on_area_2d_body_shape_exited"] [connection signal="timeout" from="CharacterBody2D/Timer" to="." method="_on_timer_timeout"]