WallSlide.gd 912 B

123456789101112131415161718192021222324252627282930
  1. extends PlayerState
  2. var direction := 0
  3. var fall_off := 0.0
  4. func enter(_msg := {}) -> void:
  5. fall_off = 0
  6. direction = player.direction
  7. player.direction *= -1
  8. func physics_update(delta: float) -> void:
  9. if player.input_direction == player.direction or player.input_direction == 0:
  10. fall_off += 4 * delta
  11. player.apply_gravity(delta)
  12. player.velocity.y = clamp(player.velocity.y, -INF, 50)
  13. player.sprite.play("Skid")
  14. player.velocity.x = 50 * direction
  15. if Global.player_action_just_pressed("jump", player.player_id):
  16. jump_off()
  17. if player.is_on_floor() or player.is_on_wall() == false or fall_off >= 1:
  18. player.velocity.x = 50 * player.input_direction
  19. state_machine.transition_to("Normal")
  20. player.move_and_slide()
  21. func jump_off() -> void:
  22. AudioManager.play_sfx("bump", player.global_position)
  23. player.state_machine.transition_to("Normal")
  24. player.jump()
  25. player.velocity.x = 120 * player.direction