extends CharacterBody2D # Serialized Variables @export var speed = 20 @export_range(0, 1) var dampning_function = 0.6 @export var animation_player : AnimationPlayer # Engine Callbacks func _physics_process(delta : float): move_player(delta) pass # Getting player input into a vector func get_move_vector(): var input_direction = Input.get_vector("move_left", "move_right", "move_up", "move_down").normalized() return input_direction # Calculates the players velocity based on input and moves it func move_player(delta : float): # Damp Players Velocity if no Input if get_move_vector() == Vector2.ZERO: self.velocity = self.velocity * (1 - min(1, dampning_function * 60 * delta)) # Set Player's velocity to the Input direction with a magnitude of Speed synced with frame rate else: self.velocity = get_move_vector().normalized() * speed * delta * 60 # Animate the player animate_player_movement() # Finally, update the Player's physics calculations self.move_and_slide() pass func animate_player_movement(): var move_vector = get_move_vector() match move_vector: Vector2.ZERO: animation_player.play("Idle") Vector2.LEFT: animation_player.play("MoveLeft") Vector2.RIGHT: animation_player.play("MoveRight") Vector2.UP: animation_player.play("MoveUp") Vector2.DOWN: animation_player.play("MoveDown") _: animation_player.play("Idle")