From 7c94312749e126170d7ed272e41b40a8bcfad6f4 Mon Sep 17 00:00:00 2001 From: pennyrigate Date: Fri, 27 Jan 2023 07:19:24 -0500 Subject: [PATCH] falling blocks now have an animation before reappearing --- .../falling_block/falling_block.gd | 11 ++++- .../falling_block/falling_block.tscn | 49 +++++++++++++++++-- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/objects/environment/falling_block/falling_block.gd b/objects/environment/falling_block/falling_block.gd index 6d4d500..eed6938 100644 --- a/objects/environment/falling_block/falling_block.gd +++ b/objects/environment/falling_block/falling_block.gd @@ -6,6 +6,8 @@ onready var startpos = position onready var fall_timer = $FallTimer onready var refresh_timer = $RefreshTimer onready var crush_area = $CrushArea +onready var collision_shape = $CollisionShape2D +onready var anims = $AnimationPlayer func _physics_process(delta): #Fall @@ -17,6 +19,9 @@ func _physics_process(delta): var player = area.get_parent() if player.is_on_floor(): player.die() + #Play animation when disappearing + if !refresh_timer.is_stopped() && refresh_timer.get_time_left() <= 0.6: + anims.play("disappear") func _on_Area2D_area_entered(area): if area.is_in_group("player"): @@ -28,8 +33,12 @@ func _on_VisibilityNotifier2D_screen_exited(): fall = false func _on_RefreshTimer_timeout(): - position = startpos + collision_shape.disabled = true # disable collision + # re-enable collision and set position at end of frame + call_deferred("set_position", startpos) + collision_shape.call_deferred("set_disabled", false) fall = false + anims.play("idle") func _on_FallTimer_timeout(): fall = true diff --git a/objects/environment/falling_block/falling_block.tscn b/objects/environment/falling_block/falling_block.tscn index b706086..f90b080 100644 --- a/objects/environment/falling_block/falling_block.tscn +++ b/objects/environment/falling_block/falling_block.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://graphics/falling_block/falling_block_cave.png" type="Texture" id=1] [ext_resource path="res://objects/environment/falling_block/falling_block.gd" type="Script" id=2] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 4, 1 ) +extents = Vector2( 4, 1.5 ) [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 4, 0.5 ) @@ -12,6 +12,38 @@ extents = Vector2( 4, 0.5 ) [sub_resource type="RectangleShape2D" id=3] extents = Vector2( 3, 0.5 ) +[sub_resource type="Animation" id=4] +resource_name = "disappear" +length = 0.6 +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.00203761, 0.1, 0.2, 0.3, 0.4, 0.5 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ true, false, true, false, true, false ] +} + +[sub_resource type="Animation" id=5] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + [node name="FallingBlock" type="KinematicBody2D"] collision_layer = 4 script = ExtResource( 2 ) @@ -21,7 +53,7 @@ texture = ExtResource( 1 ) centered = false [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2( 4, 2 ) +position = Vector2( 4, 2.5 ) shape = SubResource( 1 ) [node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] @@ -30,7 +62,6 @@ position = Vector2( 4, 4 ) scale = Vector2( 0.4, 0.4 ) [node name="Area2D" type="Area2D" parent="."] -visible = false collision_mask = 2 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] @@ -38,18 +69,26 @@ position = Vector2( 4, -0.5 ) shape = SubResource( 2 ) [node name="FallTimer" type="Timer" parent="."] +process_mode = 0 wait_time = 0.15 one_shot = true [node name="RefreshTimer" type="Timer" parent="."] +process_mode = 0 wait_time = 2.0 +one_shot = true [node name="CrushArea" type="Area2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="CrushArea"] -position = Vector2( 4, 3.5 ) +position = Vector2( 4, 4.5 ) shape = SubResource( 3 ) +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "idle" +anims/disappear = SubResource( 4 ) +anims/idle = SubResource( 5 ) + [connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] [connection signal="area_entered" from="Area2D" to="." method="_on_Area2D_area_entered"] [connection signal="area_exited" from="Area2D" to="." method="_on_Area2D_area_exited"]