Refactor player animation and collision based entrances
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
extends Node
|
||||
|
||||
# sprite_animation_changer.gd
|
||||
|
||||
# When the player actually changes state or direction, this component will decide
|
||||
# which sprite animation should play
|
||||
|
||||
@export var sprite: AnimatedSprite2D
|
||||
|
||||
var _cached_dv: Vector2
|
||||
var _cached_state: PlayerStateMachine.States
|
||||
|
||||
var _walking_animation_data = {
|
||||
Vector2.LEFT: ["walking-side", true],
|
||||
Vector2.RIGHT: ["walking-side", false],
|
||||
Vector2.UP: ["walking-up", false],
|
||||
Vector2.DOWN: ["walking-down", false]
|
||||
}
|
||||
|
||||
var _idle_animation_data = {
|
||||
Vector2.LEFT: ["idle-side", true],
|
||||
Vector2.RIGHT: ["idle-side", false],
|
||||
Vector2.UP: ["idle-up", false],
|
||||
Vector2.DOWN: ["idle-down", false]
|
||||
}
|
||||
|
||||
func OnStateChanged(to_state: PlayerStateMachine.States, _from_state: PlayerStateMachine.States) -> void:
|
||||
_cached_state = to_state
|
||||
if to_state == PlayerStateMachine.States.WALKING:
|
||||
_to_walking_state()
|
||||
return
|
||||
if to_state == PlayerStateMachine.States.IDLE:
|
||||
_to_idle_state()
|
||||
return
|
||||
|
||||
|
||||
func OnMovementQueued(dv: Vector2) -> void:
|
||||
_cached_dv = Vector2Utils.GetClosestDirectionVector(dv)
|
||||
|
||||
if _cached_state == PlayerStateMachine.States.WALKING:
|
||||
# Direction changed while walking, update animation, just run _to_walking_state again
|
||||
_to_walking_state()
|
||||
|
||||
|
||||
func _to_walking_state() -> void:
|
||||
if _walking_animation_data.has(_cached_dv):
|
||||
var animation_data = _walking_animation_data[_cached_dv]
|
||||
var animation_name = animation_data[0] as String
|
||||
var is_flipped = animation_data[1] as bool
|
||||
|
||||
sprite.animation = animation_name
|
||||
sprite.flip_h = is_flipped
|
||||
sprite.play()
|
||||
|
||||
|
||||
func _to_idle_state() -> void:
|
||||
if _idle_animation_data.has(_cached_dv):
|
||||
var animation_data = _idle_animation_data[_cached_dv]
|
||||
var animation_name = animation_data[0] as String
|
||||
var is_flipped = animation_data[1] as bool
|
||||
|
||||
sprite.animation = animation_name
|
||||
sprite.flip_h = is_flipped
|
||||
sprite.play()
|
||||
Reference in New Issue
Block a user