extends CharacterBody2D @onready var healthbar: ProgressBar = $ui/Healthbar var health var speed var jump_velocity var jumpcount const ROLLSPEED = 2 var is_rolling = false @onready var jump: AudioStreamPlayer2D = $Jump @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D func _ready() -> void: health = 100 speed = 130.0 jump_velocity = -300 jumpcount = 0 healthbar.init_health(health) func _physics_process(delta: float) -> void: # Add the gravity. if not is_on_floor(): if Input.is_action_pressed("move_down"): velocity += get_gravity() * delta * 1.7 elif velocity.y > 0: velocity += get_gravity() * delta * 1.3 else: velocity += get_gravity() * delta # Handle jump. if Input.is_action_just_released("jump") and velocity.y<0: velocity.y = jump_velocity/4 # Doublejump if jumpcount == 1 and Input.is_action_just_pressed("jump"): velocity.y = jump_velocity jump.play() jumpcount = 2 # Jump if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y = jump_velocity jump.play() jumpcount = 1 # Doublejump reset if !Input.is_action_just_pressed("jump") and is_on_floor(): jumpcount = 0 # Fall through if Input.is_action_pressed("move_down"): set_collision_mask_value(2, false) else: set_collision_mask_value(2, true) # Get the input direction: -1, 0, 1 var direction := Input.get_axis("move_left", "move_right") # Flip the Sprite if direction > 0 : animated_sprite.flip_h = false elif direction < 0: animated_sprite.flip_h = true # Play animations if is_on_floor(): if Input.is_action_pressed("move_down") and direction == 0: animated_sprite.play("crouch") elif direction == 0: animated_sprite.play("idle") elif is_rolling: animated_sprite.play("roll") else: animated_sprite.play("run") else: animated_sprite.play("jump") # Apply Movement # Roll if Input.is_action_just_pressed("roll"): if !is_rolling and direction and is_on_floor(): start_dash() if direction: if is_rolling: velocity.x = direction * speed * ROLLSPEED # Running else: velocity.x = direction * speed else: velocity.x = move_toward(velocity.x, 0, speed) move_and_slide() func start_dash(): is_rolling = true $RollTimer.connect("timeout", stop_dash) $RollTimer.start() func stop_dash(): is_rolling = false #Health func _process(delta: float) -> void: healthbar._set_health(health)