extends KinematicBody2D const SPEED = 130 const JUMPFORCE = -500 const GRAVITY = 20 var velocity = Vector2() var direction = Enum.DIRECTION.RIGHT var canDoubleJump = false var hasPlayedFallStop = false func _physics_process(_delta): if Input.is_action_pressed("ui_left"): velocity.x = -SPEED direction = Enum.DIRECTION.LEFT $Sprite.flip_h = true if self.is_running(): velocity.x *= 2 $Sprite.play("run") else: $Sprite.play("walk") elif Input.is_action_pressed("ui_right"): velocity.x = SPEED direction = Enum.DIRECTION.RIGHT $Sprite.flip_h = false if self.is_running(): velocity.x *= 2 $Sprite.play("run") else: $Sprite.play("walk") else: $Sprite.play("idle") # jump and fall animation if not is_on_floor(): $Sprite.play("jump") if has_node("CheckFallStop"): if velocity.y > -JUMPFORCE: $CheckFallLanding.set_enabled(true) $CheckFallStop.set_enabled(true) if $CheckFallLanding.is_colliding(): $Sprite.play("fall_stop_landing") elif $CheckFallStop.is_colliding(): $Sprite.play("fall_stop") else: $Sprite.play("fall") else: $CheckFallLanding.set_enabled(false) $CheckFallStop.set_enabled(true) # fall down velocity.y += GRAVITY # jump if Input.is_action_just_pressed("ui_up"): if is_on_floor(): canDoubleJump = true velocity.y = JUMPFORCE elif not is_on_floor() and not is_on_wall() and canDoubleJump: canDoubleJump = false velocity.y = JUMPFORCE if is_on_wall(): velocity.y *= 0.8 $Sprite.play("wall") if Input.is_action_just_pressed("ui_up"): Input.action_release("ui_left") Input.action_release("ui_right") velocity.y = JUMPFORCE * 0.75 if direction == Enum.DIRECTION.LEFT: velocity.x = 2000 $Sprite.flip_h = false elif direction == Enum.DIRECTION.RIGHT: velocity.x = -2000 $Sprite.flip_h = true velocity = move_and_slide(velocity, Vector2.UP) # stop velocity.x = lerp(velocity.x, 0, 0.7) func is_running(): return Input.is_action_pressed("ui_accept") and is_on_floor() func check_flag(): # $Sprite.play("dance anim") print("FLAG CHECKED")