add key animation when player lands on it
This commit is contained in:
parent
f1af3e00cc
commit
9cf81ffe62
@ -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"]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user