Podoboo.gd 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. extends Node2D
  2. var velocity := 5.0
  3. var play_sfx := false
  4. @onready var starting_y := global_position.y
  5. @export_range(0, 3) var jump_delay := 1
  6. var can_jump := true
  7. signal killed
  8. const BASE_LINE := 48
  9. func _ready() -> void:
  10. if Global.current_game_mode != Global.GameMode.LEVEL_EDITOR and global_position.y > -32:
  11. Global.log_warning("Podoboo is too low! Forgot to update!")
  12. func _physics_process(delta: float) -> void:
  13. velocity += (5 / delta) * delta
  14. velocity = clamp(velocity, -INF, 280)
  15. global_position.y += velocity * delta
  16. global_position.y = clamp(global_position.y, -INF, BASE_LINE)
  17. if global_position.y >= BASE_LINE and can_jump:
  18. can_jump = false
  19. do_jump()
  20. $Sprite.flip_v = velocity > 0
  21. func do_jump() -> void:
  22. if jump_delay > 0:
  23. $Timer.start(jump_delay)
  24. await $Timer.timeout
  25. if play_sfx:
  26. AudioManager.play_sfx("podoboo", global_position)
  27. velocity = calculate_jump_height()
  28. print(velocity)
  29. await get_tree().physics_frame
  30. can_jump = true
  31. func damage_player(player: Player) -> void:
  32. player.damage()
  33. func calculate_jump_height() -> float:
  34. global_position.y = BASE_LINE
  35. return -sqrt(2 * 5 * abs(starting_y - (global_position.y))) * 8
  36. const SMOKE_PARTICLE = preload("uid://d08nv4qtfouv1")
  37. func flag_die() -> void:
  38. die()
  39. func die() -> void:
  40. killed.emit()
  41. queue_free()