46 lines
1.2 KiB
GDScript
46 lines
1.2 KiB
GDScript
class_name PlayerState
|
|
extends AbstractState
|
|
|
|
|
|
@export var player: Player
|
|
|
|
|
|
@export var idle_state: PlayerState
|
|
@export var walk_left_state: PlayerState
|
|
@export var walk_right_state: PlayerState
|
|
@export var dead_state: PlayerState
|
|
@export var jump_state: PlayerState
|
|
@export var jump_left_state: PlayerState
|
|
@export var jump_right_state: PlayerState
|
|
@export var fall_state: PlayerState
|
|
@export var fall_left_state: PlayerState
|
|
@export var fall_right_state: PlayerState
|
|
|
|
|
|
func physics_process(_delta: float) -> void:
|
|
if player.is_dead:
|
|
switch_state.emit(dead_state)
|
|
elif player.velocity.is_zero_approx():
|
|
switch_state.emit(idle_state)
|
|
elif is_zero_approx(player.velocity.y):
|
|
if player.velocity.x < 0:
|
|
switch_state.emit(walk_left_state)
|
|
else:
|
|
switch_state.emit(walk_right_state)
|
|
else:
|
|
if player.velocity.y < 0:
|
|
if is_zero_approx(player.velocity.x):
|
|
switch_state.emit(jump_state)
|
|
elif player.velocity.x < 0:
|
|
switch_state.emit(jump_left_state)
|
|
else:
|
|
switch_state.emit(jump_right_state)
|
|
else:
|
|
if is_zero_approx(player.velocity.x):
|
|
switch_state.emit(fall_state)
|
|
elif player.velocity.x < 0:
|
|
switch_state.emit(fall_left_state)
|
|
else:
|
|
switch_state.emit(fall_right_state)
|
|
|