extends CharacterBody2D @export_range(10, 1000, 10, "or_greater") var speed = 300.0 @export_range(0, 0.2, 0.001, "or_greater") var acceleration = 0.5 @export_group("Airborne") @export_range(0, 1000, 10, "or_greater") var jump_velocity = 400.0 @export_range(0, 10, 0.1, "or_greater") var gravity_modifier = 1 @onready var knight: AnimatedSprite2D = $Knight @onready var base: AnimatedSprite2D = $Base var animated_sprites = [] var is_in_cutscene = false # back to true on build var current_animation = "idle" func play_anim(): for sprite: AnimatedSprite2D in animated_sprites: sprite.play(current_animation) func play_anim_run(): current_animation = "run" func play_anim_idle(): current_animation = "idle" func play_anim_jump(): current_animation = "jump" func set_in_cutscene(): is_in_cutscene = true func set_in_play(): is_in_cutscene = false func look_left(): for sprite in animated_sprites: sprite.flip_h = true func look_right(): for sprite in animated_sprites: sprite.flip_h = false func _ready() -> void: animated_sprites = [ knight, base ] func _physics_process(delta: float) -> void: play_anim() if is_in_cutscene: play_anim_idle() velocity.x = move_toward(velocity.x, 0, speed) move_and_slide() return if not is_on_floor(): velocity += get_gravity() * delta * gravity_modifier var direction := Input.get_axis("move_left", "move_right") if direction > 0 and is_on_floor(): look_right() if direction < 0 and is_on_floor(): look_left() if not is_on_floor(): current_animation = "got_hit" else: if velocity.x != 0: play_anim_run() else: play_anim_idle() if is_on_floor(): if direction: var smoothed_speed = speed * smoothstep(0, 1, acceleration) velocity.x += direction * smoothed_speed velocity.x = clampf(velocity.x, -speed, speed) else: velocity.x = move_toward(velocity.x, 0, speed) move_and_slide() func _on_dialogue_manager_dialogue_ended() -> void: set_in_play() func _on_trigger_dialogue_body_entered(body: Node2D) -> void: set_in_cutscene()