X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/92f6f55bfa3f838fcbcb445a2bc2a271398c45fd..refs/heads/state-machine:/player/moves/dash.gd diff --git a/player/moves/dash.gd b/player/moves/dash.gd index aaf7081..7bac154 100644 --- a/player/moves/dash.gd +++ b/player/moves/dash.gd @@ -1,6 +1,7 @@ extends Move class_name Dash +@export var dash_length := 10.0 @onready var timer: Timer = $Timer @@ -10,25 +11,38 @@ var new_position: Vector3 func should_enter(input: InputPacket) -> String: if finished: - input.actions.sort_custom(moves_priority_sort) - return input.actions[0] - return "dash" + input.player_actions.sort_custom(moves_priority_sort) + return input.player_actions[0] + return state_name -func update(_input: InputPacket, delta: float): - player.global_position = lerp( - player.global_position, - new_position, - (player.dash_length / timer.wait_time) * delta - ) +func update(input: InputPacket, delta: float): + if new_position: + player.global_position = lerp( + player.global_position, + new_position, + (player.dash_length / timer.wait_time) * delta + ) + else: + new_position = player.global_position + Vector3( + input.player_movement_direction.x, 0, input.player_movement_direction.y + ) * dash_length + rotate_skin(new_position) func on_enter_state(): - player.skin.transition_dash() - new_position = player.global_position + player.last_movement_direction * player.dash_length + new_position = Vector3.ZERO finished = false timer.start() func _on_timer_timeout() -> void: finished = true + + +func rotate_skin(towards: Vector3): + var skin_target_angle := Vector3.BACK.signed_angle_to( + towards - player.global_position, + Vector3.UP + ) + player.skin.global_rotation.y = skin_target_angle