From 325f2a6dd32f91f04932cbfb7e876ffaf70b2e66 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Thu, 29 Jun 2023 23:01:59 -0400 Subject: [PATCH] implement drowning --- objects/player/player.gd | 18 ++++++++++-- objects/player/player.tscn | 56 ++++++++++++++++++++++++++++++++------ 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/objects/player/player.gd b/objects/player/player.gd index 1e91257..c928545 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -260,6 +260,10 @@ func _on_Dead_state_entered() -> void: #refill oxygen oxygen_timer.start() +func _on_Drowning_state_entered() -> void: + state_chart.send_event("died") + animation_player.play("drown") + func _on_Respawn_state_entered() -> void: global_position = Game.respawn_point graphics.visible = true @@ -394,6 +398,15 @@ func _process_movement(delta: float) -> void: if is_on_wall(): state_chart.send_event("push_start") +func _process_floating_up(delta: float) -> void: + graphics.global_position.y -= 50.0 * delta + var sprite_sector = Game.get_sector(Vector2(global_position.x, graphics.global_position.y)) + if sprite_sector != Game.current_sector: + graphics.visible = false + graphics.position = Vector2.ZERO + emit_signal("died") + state_chart.send_event("respawn") + # COLLISION CALLBACKS # func _on_Hitbox_body_entered(body: Node) -> void: @@ -407,10 +420,9 @@ func _on_Ducking_event_received(event): func _on_OxygenTimer_timeout(): - if underwater: die() + if underwater: + state_chart.send_event("drown") #Reset low oxygen effect when leaving level func _on_Player_tree_exited(): set_underwater_audio(false) - - diff --git a/objects/player/player.tscn b/objects/player/player.tscn index a783797..45638bf 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -97,6 +97,18 @@ tracks/3/keys = { "update": 0, "values": [ 0.0 ] } +tracks/4/type = "value" +tracks/4/path = NodePath("Graphics/Sprite:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 0, -10 ) ] +} [sub_resource type="Animation" id=18] resource_name = "blink" @@ -281,7 +293,7 @@ tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PoolRealArray( 0, 0.05, 0.1, 0.75, 0.8, 0.85, 1.05, 1.11114 ), +"times": PoolRealArray( 0, 0.05, 0.1, 0.8, 0.85, 0.9, 1.1, 1.15 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 1, "values": [ 0, 1, 2, 3, 4, 5, 6, 7 ] @@ -293,10 +305,10 @@ tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { -"times": PoolRealArray( 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 1.15 ), +"times": PoolRealArray( 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.2 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 0, -"values": [ Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 2, -10 ), Vector2( 2, -10 ) ] +"values": [ Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 1, -10 ), Vector2( 3, -10 ), Vector2( 0, -10 ), Vector2( 0, -10 ) ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:texture") @@ -311,17 +323,17 @@ tracks/3/keys = { "values": [ ExtResource( 28 ) ] } tracks/4/type = "method" -tracks/4/path = NodePath(".") +tracks/4/path = NodePath("StateChart") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/imported = false tracks/4/enabled = true tracks/4/keys = { -"times": PoolRealArray( 1.15 ), +"times": PoolRealArray( 1.3 ), "transitions": PoolRealArray( 1 ), "values": [ { -"args": [ ], -"method": "float_to_top" +"args": [ "float_up" ], +"method": "send_event" } ] } @@ -1001,7 +1013,7 @@ double_jump_force = 124.0 [node name="Sprite" type="Sprite" parent="Graphics"] unique_name_in_owner = true material = SubResource( 1 ) -position = Vector2( 1, -10 ) +position = Vector2( 0, -10 ) texture = ExtResource( 4 ) [node name="ArrowPosition" type="Position2D" parent="Graphics"] @@ -1412,6 +1424,11 @@ script = ExtResource( 10 ) to = NodePath("../../Dead") event = "hurt" +[node name="On Drown" type="Node" parent="StateChart/Root/Health/Vulnerable"] +script = ExtResource( 10 ) +to = NodePath("../../Drowning") +event = "drown" + [node name="On BecomeInvulnerable" type="Node" parent="StateChart/Root/Health/Vulnerable"] script = ExtResource( 10 ) to = NodePath("../../Invulnerable") @@ -1443,6 +1460,27 @@ to = NodePath("../../Respawn") event = "respawn" guard_expression = "can_respawn" +[node name="Drowning" type="Node" parent="StateChart/Root/Health"] +script = ExtResource( 9 ) +initial_state = NodePath("DrownStart") + +[node name="On Respawn" type="Node" parent="StateChart/Root/Health/Drowning"] +script = ExtResource( 10 ) +to = NodePath("../../Respawn") +event = "respawn" +guard_expression = "can_respawn" + +[node name="DrownStart" type="Node" parent="StateChart/Root/Health/Drowning"] +script = ExtResource( 11 ) + +[node name="On FloatUp" type="Node" parent="StateChart/Root/Health/Drowning/DrownStart"] +script = ExtResource( 10 ) +to = NodePath("../../FloatingUp") +event = "float_up" + +[node name="FloatingUp" type="Node" parent="StateChart/Root/Health/Drowning"] +script = ExtResource( 11 ) + [node name="StateDebugLayer" type="CanvasLayer" parent="."] layer = 128 @@ -1509,4 +1547,6 @@ align = 1 [connection signal="state_physics_processing" from="StateChart/Root/Movement/Climbing" to="." method="_process_climbing"] [connection signal="state_entered" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_entered"] [connection signal="state_entered" from="StateChart/Root/Health/Dead" to="." method="_on_Dead_state_entered"] +[connection signal="state_entered" from="StateChart/Root/Health/Drowning" to="." method="_on_Drowning_state_entered"] +[connection signal="state_physics_processing" from="StateChart/Root/Health/Drowning/FloatingUp" to="." method="_process_floating_up"] [connection signal="timeout" from="OxygenTimer" to="." method="_on_OxygenTimer_timeout"]