From 9c6af1c0349884c154fc542e9a09b0d84005ef74 Mon Sep 17 00:00:00 2001 From: yuki Date: Mon, 24 Nov 2025 21:07:58 -0300 Subject: [PATCH] create player snoozing animation --- scenes/player/assets/yukotsuki.aseprite | Bin 8775 -> 20663 bytes scenes/player/player.tscn | 16 ++++++++++++---- scenes/player/player_state.gd | 1 + scenes/player/states/player_paused.gd | 5 +++++ scenes/player/states/player_paused.gd.uid | 1 + scenes/player/states/player_waking.gd | 7 +++++++ scenes/player/states/player_waking.gd.uid | 1 + scenes/player/states/player_walking.gd | 1 + scenes/room/states/room_entering.gd | 21 +++++++++++++++++++-- 9 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 scenes/player/states/player_paused.gd create mode 100644 scenes/player/states/player_paused.gd.uid create mode 100644 scenes/player/states/player_waking.gd create mode 100644 scenes/player/states/player_waking.gd.uid diff --git a/scenes/player/assets/yukotsuki.aseprite b/scenes/player/assets/yukotsuki.aseprite index 85811451b9ea1dadfd830a0f16a786c75b50ea5a..ef84370d3977eabb7639d7be57b6069afb19fe57 100644 GIT binary patch delta 2917 zcmX@^vV9>V`}P0^h6hU(CbC!ZUS(xq`1MhYA%%f~L2P61GDh}|K$e68+hi-Iera9? zc?JeXpa2YTFcjzI=T~LsrB6P|GCPQeD&-9cjv}_WMC8Fb9S319TFeLcA@Lbml8G!R)$X>Rewyb;B234#rlaW9cri% z#Lzg9p(Xh{%<%_cQ=c}qKFs>aglytIsEKhbYL78YOhK3^?bO@r z$i<+@!~A*sq#xaJ+W-DDY6%tQTer70wlOd~-28b#wqRJG?q#=^d(7@$Q~PA9R{!}W zV{Jv^m#yKU1wJ{?)qcax&qsE#-DC@Hp2>A=Y?J*3%+k|<;moSQ1PpRPhW|ii5WvsC z$51h+w)Y_K0Rs-^z0yqE9=z`O%f7;iHPh}Za}CpJh6OJIpG}n&ku)>ypRs$^*WLa_ zr&af@;Mm(zzi0D-Q+lUDXWaRE#%Y4hYewhU+Co{A1NfvTpJ$1f{9asQvOVit#{9`W z9PWd`C0y0WX#^#3k`nO+&e@Hiz;U^_Kf0uXdwawidk2x6)5}hZ9?-tP*kSu=#>P{r z!5jH*>uz0sUnExb&*p!JIHJ!QPI?%>*IlUG{xz#gnAZJjV7Q2<2m-@8weKXzIF{{P zb_=Cdem|7jQ}jQSg*i+pwPJ(v2S$rm3j#h`&D&`5YhKrmG>@7s(Q=}lTbtjnGSbpx z%-Gfak!kIN`w7`IdnYoTdslq!S4MtMP3zXS_WlQ|=FYPu^(`hp6ITQUJXg&CdbbAT z-FhLQcT4+rgF`Q$Yt{zdNwF1d%J1!6&oxY4a$@m=c?aYhG#nQmf_gW=SViXTG_Z)|9S_`q?h-~_}Unq84eh_ z-~2G^rp8?Dq%$Y$V)y7Kew@|*|Jh~cva?RPkxSDyr<}+Mmf0Ml<%m&rb7ezQ6uA9^ iQeo2AVpzkAR?Q@s`P6IJ(WLzeYwHFvgBrEqhAsdGeO%H2 delta 69 zcmdnKkny++ySowt!-J)~6WJ?y*RV1${Q4-$kix*gAiA-486*2NAWK4lb+Q#x|0HIM ZNz8ncEtpjp87Idw_c1bTe#6`%2LQQ467~Q9 diff --git a/scenes/player/player.tscn b/scenes/player/player.tscn index fd2f9d8..3f25747 100644 --- a/scenes/player/player.tscn +++ b/scenes/player/player.tscn @@ -1,11 +1,13 @@ -[gd_scene load_steps=11 format=3 uid="uid://cqm5besqgsb7x"] +[gd_scene load_steps=13 format=3 uid="uid://cqm5besqgsb7x"] [ext_resource type="Script" uid="uid://dpsocqnk0e6le" path="res://scenes/player/player.gd" id="1_dovo2"] [ext_resource type="SpriteFrames" uid="uid://6v5nyv2wo47g" path="res://scenes/player/assets/yukotsuki.aseprite" id="2_dovo2"] [ext_resource type="Script" uid="uid://diths5s8vd7lr" path="res://classes/state_machine/state_machine.gd" id="2_lvxji"] [ext_resource type="Script" uid="uid://cl6snimpmxcvu" path="res://scenes/player/states/player_idle.gd" id="3_p47bc"] [ext_resource type="Script" uid="uid://bg5fu1ildsdnq" path="res://scenes/player/states/player_walking.gd" id="4_p47bc"] +[ext_resource type="Script" uid="uid://d1ar1gtjoowhw" path="res://scenes/player/states/player_waking.gd" id="5_0owmy"] [ext_resource type="Texture2D" uid="uid://5mm8pi5i0yal" path="res://scenes/player/assets/pointlight_texture.aseprite" id="5_75vfm"] +[ext_resource type="Script" uid="uid://cgiphcl4t75v8" path="res://scenes/player/states/player_paused.gd" id="6_qek5x"] [sub_resource type="Animation" id="Animation_75vfm"] resource_name = "default" @@ -68,6 +70,14 @@ metadata/_custom_type_script = "uid://bebe1y51hwns8" script = ExtResource("4_p47bc") metadata/_custom_type_script = "uid://bebe1y51hwns8" +[node name="Waking" type="Node" parent="PlayerStateMachine"] +script = ExtResource("5_0owmy") +metadata/_custom_type_script = "uid://bebe1y51hwns8" + +[node name="Paused" type="Node" parent="PlayerStateMachine"] +script = ExtResource("6_qek5x") +metadata/_custom_type_script = "uid://bebe1y51hwns8" + [node name="PointLight2D" type="PointLight2D" parent="."] enabled = false energy = 0.0 @@ -83,11 +93,9 @@ libraries = { [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] position = Vector2(0, -16) sprite_frames = ExtResource("2_dovo2") -animation = &"idle" +animation = &"snoozing" [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -7) shape = SubResource("CapsuleShape2D_gmlin") debug_color = Color(0.28459275, 0.61933166, 0.3529686, 0.41960785) - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] diff --git a/scenes/player/player_state.gd b/scenes/player/player_state.gd index d9d121f..3de0b37 100644 --- a/scenes/player/player_state.gd +++ b/scenes/player/player_state.gd @@ -2,6 +2,7 @@ class_name PlayerState extends State const IDLE = "Idle" const WALKING = "Walking" +const WAKING = "Waking" var player: Player diff --git a/scenes/player/states/player_paused.gd b/scenes/player/states/player_paused.gd new file mode 100644 index 0000000..552254c --- /dev/null +++ b/scenes/player/states/player_paused.gd @@ -0,0 +1,5 @@ +extends PlayerState + + +func _enter(_previous_state_path: String, _data: Dictionary[StringName, Variant] = {}) -> void: + player.sprite.pause() diff --git a/scenes/player/states/player_paused.gd.uid b/scenes/player/states/player_paused.gd.uid new file mode 100644 index 0000000..1665bb6 --- /dev/null +++ b/scenes/player/states/player_paused.gd.uid @@ -0,0 +1 @@ +uid://cgiphcl4t75v8 diff --git a/scenes/player/states/player_waking.gd b/scenes/player/states/player_waking.gd new file mode 100644 index 0000000..8263bd0 --- /dev/null +++ b/scenes/player/states/player_waking.gd @@ -0,0 +1,7 @@ +extends PlayerState + + +func _enter(_previous_state_path: String, _data: Dictionary[StringName, Variant] = {}) -> void: + player.sprite.play("snoozing") + await player.sprite.animation_finished + finished.emit(IDLE) diff --git a/scenes/player/states/player_waking.gd.uid b/scenes/player/states/player_waking.gd.uid new file mode 100644 index 0000000..8a27df9 --- /dev/null +++ b/scenes/player/states/player_waking.gd.uid @@ -0,0 +1 @@ +uid://d1ar1gtjoowhw diff --git a/scenes/player/states/player_walking.gd b/scenes/player/states/player_walking.gd index 0f52567..09c5f14 100644 --- a/scenes/player/states/player_walking.gd +++ b/scenes/player/states/player_walking.gd @@ -13,6 +13,7 @@ func _state_physics_update(_delta: float) -> void: player.velocity = direction * player.max_speed * player.speed_mult player.move_and_slide() + player.global_position = player.global_position.round() #endregion if watch_state([WALKING]): return diff --git a/scenes/room/states/room_entering.gd b/scenes/room/states/room_entering.gd index 04cf884..691f968 100644 --- a/scenes/room/states/room_entering.gd +++ b/scenes/room/states/room_entering.gd @@ -3,11 +3,12 @@ extends RoomState var trans_tween: Tween var player_light_tween: Tween +var wake_timer: Timer func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void: print("entering room") - room.player = _instantiate_player() + room.player = _instantiate_player(true) assert(room.player != null, "player is null") room.camera.global_position = room.config.camera_position @@ -64,12 +65,23 @@ func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void: trans_tween.tween_property(room.canvas_modulate, "color", Color.WHITE, room.config.transition_in_duration).set_trans(room.config.transition_in_type).set_ease(Tween.EASE_OUT) await trans_tween.finished + finished.emit(PLAYING) -func _instantiate_player() -> Player: +func _instantiate_player(waking: bool) -> Player: var p: Player = room.player_scene.instantiate() room.add_child(p) + if waking: + wake_timer = Timer.new() + p.add_child(wake_timer) + wake_timer.one_shot = true + wake_timer.start(room.config.transition_in_duration) + + wake_timer.timeout.connect(_on_wake_timer) + + p.state_machine._transition_to_next_state(PlayerState.PAUSED) + if room.initial_spawn != Vector2i.ZERO: p.global_position = room.initial_spawn else: @@ -80,3 +92,8 @@ func _instantiate_player() -> Player: p.global_position = room.config.initial_spawn return p + + +func _on_wake_timer() -> void: + room.player.state_machine._transition_to_next_state(PlayerState.WAKING) + wake_timer.queue_free()