extends CharacterBody2D @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D const JUMP_VELOCITY = -300.0 const MAX_WALK_SPEED = 130.0 const ACCELERATION = 800.0 # Acceleration for smoother movement const FRICTION = 600.0 # Deceleration when no input is given var direction: float = 0 func _process(delta: float) -> void: # Flip the sprite based on current direction if direction != 0: animated_sprite.flip_h = direction == -1 # Play animatinos if not is_on_floor(): animated_sprite.play("jump") elif direction != 0: animated_sprite.play("run") else: animated_sprite.play("idle") func _physics_process(delta: float) -> void: # Add the gravity if not is_on_floor(): velocity += get_gravity() * delta # Handle jump30 if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y += JUMP_VELOCITY # Get the input direction and handle the movement. direction = Input.get_axis("move_left", "move_right") if direction: # Only apply more move acceleration if we're at/past max walk speed # (only if accelerating towards opposite direction, or not yet at max speed) # # This implementation makes sure we don't accientaly decelerate by moving if we # got velocity from something else (e.g. a boost), which the move_towards func # would otherwise do. if sign(velocity.x) != sign(direction) or abs(velocity.x) < MAX_WALK_SPEED: velocity.x = move_toward(velocity.x, direction * MAX_WALK_SPEED, ACCELERATION * delta) else: velocity.x = move_toward(velocity.x, 0, FRICTION * delta) move_and_slide()