add key animation when player lands on it

This commit is contained in:
Teatov 2025-08-03 00:03:47 +10:00
parent f1af3e00cc
commit 9cf81ffe62
4 changed files with 30 additions and 1 deletions

View File

@ -1,8 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://b8gu0udt0ow8t"]
[gd_scene load_steps=4 format=3 uid="uid://b8gu0udt0ow8t"]
[ext_resource type="Script" uid="uid://dmfdlb4ae57qv" path="res://scripts/player.gd" id="1_3vyb7"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3vyb7"]
[sub_resource type="BoxMesh" id="BoxMesh_u8vuu"]
material = SubResource("StandardMaterial3D_3vyb7")
size = Vector3(0.6, 0.6, 0.6)
[node name="Player" type="Node3D"]

View File

@ -35,6 +35,9 @@ class_name GameKey extends Node3D
@export var _idle_frequency := Vector2(0.25, -0.25)
@export var _press_offset: float = 0.4
@export_subgroup("Player")
@export var _hop_land_offset: float = 0.8
@export_group("SFX")
@export var _press_sfx: AudioStream
@export var _release_sfx: AudioStream
@ -97,6 +100,7 @@ func _ready() -> void:
_keyboard.keys_requested.connect(_on_keyboard_keys_requested)
_keyboard.is_configuring_changed.connect(_on_keyboard_is_configuring_changed)
_keyboard.player_key_changed.connect(_on_keyboard_player_key_changed)
_keyboard.player_finished_move.connect(_on_keyboard_player_finished_move)
_set_labels()
_adjacency_light.visible = false
@ -415,4 +419,9 @@ func _on_keyboard_is_configuring_changed(value: bool) -> void:
func _on_keyboard_player_key_changed(game_key: GameKey) -> void:
_adjacency_light.visible = KeyAdjacency.is_adjacent(game_key, self)
func _on_keyboard_player_finished_move(game_key: GameKey) -> void:
if game_key == self:
_push(Vector3.DOWN * _hop_land_offset)
#endregion

View File

@ -7,6 +7,7 @@ signal prompt_page_turned(page: int)
signal keys_requested(filter_func: Callable)
signal is_configuring_changed(value: bool)
signal player_key_changed(game_key: GameKey)
signal player_finished_move(game_key: GameKey)
@export_group("References")
@export var _keys_holder: Node3D
@ -117,10 +118,15 @@ func _unhandled_input(event: InputEvent) -> void:
func emit_key_press(game_key: GameKey, event: InputEventKey) -> void:
key_press_changed.emit(game_key, event)
func emit_player_key_change(game_key: GameKey) -> void:
player_key_changed.emit(game_key)
func emit_player_finished_move(game_key: GameKey) -> void:
player_finished_move.emit(game_key)
func request_key_by_keycode(keycode: Key) -> GameKey:
var found_key: GameKey
var result := request_keys(

View File

@ -14,6 +14,7 @@ var _starting_keycode: Key = KEY_H
var _rotation: Quaternion
var _move_timer: float
var _is_moving: bool
var _prev_pos: Vector3
#endregion
@ -44,6 +45,9 @@ func _move(game_key: GameKey) -> void:
_prev_pos = _current_key.player_pos_marker.global_position
_move_timer = _move_duration
if _is_moving:
_finish_move(true)
_is_moving = true
_current_key = game_key
_keyboard.emit_player_key_change(game_key)
@ -58,6 +62,9 @@ func _animate(delta: float) -> void:
return
if _move_timer <= 0:
if _is_moving:
_is_moving = false
_finish_move(false)
global_position = _animate_position()
else:
_move_timer -= delta
@ -84,6 +91,10 @@ func _animate_rotation() -> Vector3:
)
func _finish_move(_interrupted: bool) -> void:
_keyboard.emit_player_finished_move(_current_key)
#endregion