func process_physics(delta: float) -> PlayerState:
if !sprite_node_position_tween or !sprite_node_position_tween.is_running():
if Input.is_action_pressed("east") and !parent.ray_cast_east.is_colliding():
_move_player(Vector2(1, 0))
elif Input.is_action_pressed("west") and !parent.ray_cast_west.is_colliding():
_move_player(Vector2(-1, 0))
elif Input.is_action_pressed("north") and !parent.ray_cast_north.is_colliding():
_move_player(Vector2(0, -1))
elif Input.is_action_pressed("south") and !parent.ray_cast_south.is_colliding():
_move_player(Vector2(0, 1))
return null
func _move_player(direction: Vector2) -> void:
parent.global_position += direction * TILE_SIZE
if sprite_node_position_tween:
sprite_node_position_tween.kill()
sprite_node_position_tween = create_tween()
sprite_node_position_tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
sprite_node_position_tween.tween_property(
parent.animated_sprite,
"global_position",
parent.global_position,
TILE_TRANSITION_SPEED
).set_trans(Tween.TRANS_SINE)
parent.player_moved.emit()