extends CharacterBody2D const SPEED = 600.0 const JUMP_VELOCITY = -1000.0 const MAX_JUMP_DURATION = 0.3 const MIN_JUMP_DURATION = 0.01 const GRAVITY = 980 const FALL_GRAVITY_MULTIPLIER = 2 var isFacingRight: bool var jump_timer = 0.0 var is_jumping = false @onready var actionableFinder: Area2D = $Marker2D/ActionableFinder func _unhandled_input(event: InputEvent) -> void: if Input.is_action_just_pressed("ui_accept"): var actionables = actionableFinder.get_overlapping_areas() if actionables.size() > 0: actionables[0].action() return func _physics_process(delta): # Apply gravity if not is_on_floor(): var gravity_multiplier = FALL_GRAVITY_MULTIPLIER if velocity.y > 0 else 2 velocity.y += GRAVITY * gravity_multiplier * delta # Handle Jump if Input.is_action_just_pressed("jump") and is_on_floor(): start_jump() if is_jumping: if Input.is_action_pressed("jump"): continue_jump(delta) else: end_jump() # Handle horizontal movement var direction = Input.get_axis("move_left", "move_right") if direction < 0: isFacingRight = false elif direction > 0: isFacingRight = true if isFacingRight: $Marker2D.scale.x = 1 $AnimatedSprite2D.scale.x = 1 * 0.2 else: $Marker2D.scale.x = -1 $AnimatedSprite2D.scale.x = -1 * 0.2 if direction: velocity.x = direction * SPEED else: velocity.x = move_toward(velocity.x, 0, SPEED) move_and_slide() func start_jump(): velocity.y = JUMP_VELOCITY is_jumping = true func continue_jump(delta): pass func end_jump(): if velocity.y < 0: velocity.y *= 0.20 is_jumping = false func _on_kill_zone_body_entered(body: Node2D) -> void: pass # Replace with function body.