From 499b5c35462ff995f55db0f7508badcc7edea5e9 Mon Sep 17 00:00:00 2001 From: siyahas Date: Sun, 17 Nov 2024 01:26:08 +0300 Subject: [PATCH] 4.12 Connecting Signals Dynamically --- project.godot | 4 ++++ scenes/level.tscn | 2 -- scenes/saw_trap.tscn | 32 ++++++++++++++++---------------- scenes/spike_ball_trap.tscn | 32 ++++++++++++++++---------------- scripts/level.gd | 7 +++++++ scripts/trap.gd | 1 + 6 files changed, 44 insertions(+), 34 deletions(-) diff --git a/project.godot b/project.godot index 3aa2c19..26e6d10 100644 --- a/project.godot +++ b/project.godot @@ -23,6 +23,10 @@ window/size/window_width_override=1440 window/size/window_height_override=810 window/stretch/mode="canvas_items" +[global_group] + +traps="some kind of trap that causes player to take damage in various ways" + [input] move_left={ diff --git a/scenes/level.tscn b/scenes/level.tscn index 5128f2a..db6f5a6 100644 --- a/scenes/level.tscn +++ b/scenes/level.tscn @@ -79,5 +79,3 @@ position = Vector2(272, 163) position = Vector2(188, 113) [connection signal="body_entered" from="Deathzone" to="." method="_on_death_zone_body_entered"] -[connection signal="touched_player" from="Traps/SawTrap" to="." method="_on_trap_touched_player"] -[connection signal="touched_player" from="Traps/SpikeBallTrap" to="." method="_on_trap_touched_player"] diff --git a/scenes/saw_trap.tscn b/scenes/saw_trap.tscn index f175abf..56cd531 100644 --- a/scenes/saw_trap.tscn +++ b/scenes/saw_trap.tscn @@ -6,6 +6,21 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_1ysy5"] radius = 18.0 +[sub_resource type="Animation" id="Animation_gqn61"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Area2D/Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + [sub_resource type="Animation" id="Animation_0uemr"] resource_name = "spin" length = 0.400005 @@ -24,28 +39,13 @@ tracks/0/keys = { "values": [0, 1, 2, 3, 4, 5, 6, 7] } -[sub_resource type="Animation" id="Animation_gqn61"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Area2D/Sprite2D:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_q37r8"] _data = { "RESET": SubResource("Animation_gqn61"), "spin": SubResource("Animation_0uemr") } -[node name="SawTrap" type="Node2D"] +[node name="SawTrap" type="Node2D" groups=["traps"]] script = ExtResource("1_23awk") [node name="Area2D" type="Area2D" parent="."] diff --git a/scenes/spike_ball_trap.tscn b/scenes/spike_ball_trap.tscn index 2000d88..54bbefd 100644 --- a/scenes/spike_ball_trap.tscn +++ b/scenes/spike_ball_trap.tscn @@ -6,6 +6,21 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_1ysy5"] radius = 11.0 +[sub_resource type="Animation" id="Animation_7h84l"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Area2D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} + [sub_resource type="Animation" id="Animation_qms3f"] resource_name = "move" length = 2.0 @@ -23,28 +38,13 @@ tracks/0/keys = { "values": [Vector2(0, 0), Vector2(100, 0)] } -[sub_resource type="Animation" id="Animation_7h84l"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Area2D:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 0)] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_14ytm"] _data = { "RESET": SubResource("Animation_7h84l"), "move": SubResource("Animation_qms3f") } -[node name="SpikeBallTrap" type="Node2D"] +[node name="SpikeBallTrap" type="Node2D" groups=["traps"]] script = ExtResource("1_x0eb1") [node name="Area2D" type="Area2D" parent="."] diff --git a/scripts/level.gd b/scripts/level.gd index 1fb7e2d..dca351f 100644 --- a/scripts/level.gd +++ b/scripts/level.gd @@ -3,6 +3,13 @@ extends Node2D @onready var player: CharacterBody2D = $Player @onready var start_position: Marker2D = $StartPosition +func _ready() -> void: + var traps = get_tree().get_nodes_in_group("traps") + + for trap in traps: + if trap is Trap: + trap.touched_player.connect(_on_trap_touched_player) + # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: diff --git a/scripts/trap.gd b/scripts/trap.gd index 780609f..3e39145 100644 --- a/scripts/trap.gd +++ b/scripts/trap.gd @@ -1,4 +1,5 @@ extends Node +class_name Trap signal touched_player