From cb6a9e13f4055eb0b622f93a52b5da8ffcf7017c Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sat, 25 Nov 2023 18:40:39 -0500 Subject: [PATCH] respawn animation (implements #213) --- graphics/player/sg_respawn.png | Bin 0 -> 4676 bytes graphics/player/sg_respawn.png.import | 35 +++++++++++++++++++ objects/player/player.gd | 10 +++++- objects/player/player.tscn | 47 +++++++++++++++++++++++++- 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 graphics/player/sg_respawn.png create mode 100644 graphics/player/sg_respawn.png.import diff --git a/graphics/player/sg_respawn.png b/graphics/player/sg_respawn.png new file mode 100644 index 0000000000000000000000000000000000000000..35ca9b190d10d6544ec71f14c7344080e2ccdefd GIT binary patch literal 4676 zcmeHKdsGuw8Xt>A3|OclzGVn|Jf_PelSx97DdAB-$!atLQWUIACX+Cbm&rf^C@P2? z?24$}s!)6{x{F|4QBhXGT1o2zU({7minLX-~}g0w|BN3U8uD&sJy6( z=1QmMdUF!bUTE8$%Q@Aue92#Y7Pc=}vviz|dHKcK?o*czEiXy=q>J8pj&twhZD%~= zjjOMW=!&=zqS=8>SiT^BRNTTp-`d_p9q`$!T)HiWK8BZCiW34#7CemV^xQbX?ZQ|u zU#Qz}YjJ4(U)6a-MZQt~`={*7eOYtqqvz1So93rK{@c8n5Hw^39UiWfhljsP2_*8x zlC`p^6QL7NE=-8Luqx->5U(@J(tF$4g$G!XyS-BK;wH`HcIQkPAz$_Bj+XhRN94Y{ zEv}AzQB%C8r1;5TXa7gu?IJQ_<6w!ZN`>gEKjG-TR$Xtx#Sdcg53;nzFNgJ{PMM5 zT#9C7O@SSyj(&%MnAsbwp&$X3cp}!*M58Ud!e8qmprD%KQNO9e9 zKXmi1dueN|)`Oj$4>wI)8nRPqK4Lb~3}5a30TUwQ{WjuF{7gn-q$Ec!Q;n1;7W-MwobfF3QvEc>_HxOk_F$=?mz0JuI|e~JscEhX}!tm z1;~EGlA$%P$$BF;hsK%Cz(9a|KkggWuX1-911p6Bk1&#Hj_~9WGPYxVTx}$2HSQb= z0xNdVF&|BIiLVImj*b2d=$e(Bp(r= zVhJMTqk)J@7)T%zwOAdfl8QxvsAd4fY%>kIlF$u|$^oSYP$IrWNU8`4BBrDmB9w|T z1PBO31VRz0Br1_qLpq_SSz3NU+1RU#$S!Nlh?B1i?@M6vYHMpO0grSiS@oh;U4Z zpduU{U~g2@nvDNt?btkUP;bejXbV_B!zt?BQ8Cn_-dXQdM?1F?3_CXkPLRDRScr5= z?Tiy(^{U8Z!l0$V>CxA&ujKUav;wKYBtij-Au6#z3hE~jf{{po5JG|?)Di*{h&ETQ4~{ln@zvsT>rAba-rM}Pd6yTIiP6CC2J zz5Me}`G4PVd{TuE&Q%&NHjnV$@0PtD>Gp208>ZV9`(&M_?BAY2VzPp3Zuh8K=1oMQ z_Kszh&ve7;C)Xx?nezC_rls0cPY+GmC8_dS9_NDj`Q-QIg}Z7;e{-??66apx>2tnG zf**qIhZCE=%WixxrL3W@Ok-6v4sG!nQXs1cINMy?bvb7^WMDl~wLd!9csgkVKVRqf z)s*DD#}?hp#MXE;mv3&b;4b8TT6%6`^{{5ou9Y1fw-!JzbY+*vFD_eyRW>4$_v-?t zdfhJPb6bOto=T|lq#mDq{vdbS>O@-?kqZuCSh?0xmlQK< z_x`Qda_1J;6$LC#7+sw28W-eY;99PXlPsA}UJT#2s^Va6;uc+LKsNW;XTI3yH&*VR zvA09|qA3ds_4i_B&Gp%E@*(26t7qgPLrH}^Q+MGGK4GXmr)%2m0%KXv?ye!egBg{Hpf#N-s>yY1DfV@h|`Hm|yW+dclok$+6`ozwB5f7V^f{@|>( hZIb>auV&Aco*_LR^h)fy6m$dx$s=b)RDP6{^IvOm)nNbt literal 0 HcmV?d00001 diff --git a/graphics/player/sg_respawn.png.import b/graphics/player/sg_respawn.png.import new file mode 100644 index 0000000..6083c74 --- /dev/null +++ b/graphics/player/sg_respawn.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/sg_respawn.png-83125dc5d93640f1f36a4388495f77b6.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/player/sg_respawn.png" +dest_files=[ "res://.import/sg_respawn.png-83125dc5d93640f1f36a4388495f77b6.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/objects/player/player.gd b/objects/player/player.gd index cf61e36..3fb1ca7 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -313,9 +313,12 @@ func _on_Drowning_state_entered() -> void: animation_player.call_deferred("play", "drown") func _on_Respawn_state_entered() -> void: + animation_player.play("respawn") global_position = Game.respawn_point graphics.visible = true - state_chart.call_deferred("send_event", "get_real") + +func _on_Respawn_state_exited() -> void: + pass func _on_Edge_state_entered(): animation_player.play("edge") @@ -521,3 +524,8 @@ func _on_OxygenTimer_timeout(): #Reset low oxygen effect when leaving level func _on_Player_tree_exited(): set_underwater_audio(false) + + +func _on_animation_finished(anim_name: String) -> void: + if anim_name == "respawn": + state_chart.send_event("get_real") diff --git a/objects/player/player.tscn b/objects/player/player.tscn index 6da76fb..fa3ec55 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=53 format=2] +[gd_scene load_steps=55 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] [ext_resource path="res://graphics/player/palettes/default.png" type="Texture" id=2] @@ -28,6 +28,7 @@ [ext_resource path="res://graphics/player/sg_jump_ladder.png" type="Texture" id=26] [ext_resource path="res://graphics/player/sg_edge.png" type="Texture" id=27] [ext_resource path="res://graphics/player/sg_drown.png" type="Texture" id=28] +[ext_resource path="res://graphics/player/sg_respawn.png" type="Texture" id=29] [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 3 ) @@ -774,6 +775,47 @@ tracks/3/keys = { "values": [ 0.0 ] } +[sub_resource type="Animation" id=25] +resource_name = "respawn" +length = 0.4 +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("Graphics/Sprite:texture") +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": [ ExtResource( 29 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Graphics/Sprite:hframes") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 8 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Graphics/Sprite:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7 ] +} + [sub_resource type="Animation" id=11] resource_name = "shoot_airborne" length = 0.001 @@ -1155,6 +1197,7 @@ anims/idle = SubResource( 6 ) anims/jump = SubResource( 8 ) anims/ladder_jump = SubResource( 21 ) anims/push = SubResource( 17 ) +anims/respawn = SubResource( 25 ) anims/shoot_airborne = SubResource( 11 ) anims/shoot_grounded = SubResource( 10 ) anims/stim = SubResource( 19 ) @@ -1586,6 +1629,7 @@ align = 1 [connection signal="tree_exited" from="." to="." method="_on_Player_tree_exited"] [connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"] [connection signal="state_physics_processing" from="StateChart/Root/Movement" to="." method="_process_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded" to="." method="_on_Grounded_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded" to="." method="_process_grounded"] @@ -1628,6 +1672,7 @@ align = 1 [connection signal="state_entered" from="StateChart/Root/Movement/Teleporting" to="." method="_on_Teleporting_state_entered"] [connection signal="state_exited" from="StateChart/Root/Movement/Teleporting" to="." method="_on_Inactive_state_exited"] [connection signal="state_entered" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_entered"] +[connection signal="state_exited" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_exited"] [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_exited" from="StateChart/Root/Health/Drowning" to="." method="_on_Drowning_state_exited"]