extends CharacterBody2D @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D @onready var jump_sound: AudioStreamPlayer2D = $JumpSound @onready var death_sound: AudioStreamPlayer2D = $DeathSound @onready var respawn_timer: Timer = $RespawnTimer @onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D const SPEED = 320.0 const JUMP_VELOCITY = -850.0 var alive = true var can_move = true func _ready() -> void: floor_snap_length = 12 func _physics_process(delta: float) -> void: if !alive: return # Add animation if velocity.x > 1 or velocity.x < -1: animated_sprite_2d.animation = "running" else: animated_sprite_2d.animation = "idle" # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta animated_sprite_2d.animation = "jumping" if can_move: # Handle jump. if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y = JUMP_VELOCITY jump_sound.play() # Get the input direction and handle the movement/deceleration. # As good practice, you should replace UI actions with custom gameplay actions. var direction := Input.get_axis("left", "right") if direction: velocity.x = direction * SPEED else: velocity.x = move_toward(velocity.x, 0, SPEED) move_and_slide() if direction == 1: animated_sprite_2d.flip_h = false elif direction == -1: animated_sprite_2d.flip_h = true func _die() -> void: alive = false call_deferred("_disable_collision") print(collision_shape_2d) animated_sprite_2d.animation = "dying" death_sound.play() respawn_timer.start() func _disable_collision(): collision_shape_2d.disabled = true func _enable_collision(): collision_shape_2d.disabled = false func _on_respawn_timer_timeout() -> void: call_deferred("_enable_collision") position = Vector2(50, 150) alive = true