Icicle.gd 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. class_name Icicle
  2. extends Enemy
  3. var falling := false
  4. const ICICLE_DESTRUCTION = preload("res://Scenes/Parts/Particles/IcicleDestruction.tscn")
  5. func _physics_process(delta: float) -> void:
  6. if falling:
  7. handle_movement(delta)
  8. else:
  9. detect_player()
  10. func detect_player() -> void:
  11. var shaking := false
  12. for i in get_tree().get_nodes_in_group("Players"):
  13. var distance = abs(i.global_position.x - global_position.x)
  14. if i.global_position.y > global_position.y:
  15. if distance <= 32:
  16. fall()
  17. elif distance <= 64:
  18. shaking = true
  19. if shaking:
  20. $AnimationPlayer.play("Shake")
  21. else:
  22. $AnimationPlayer.play("RESET")
  23. func handle_movement(delta: float) -> void:
  24. apply_enemy_gravity(delta)
  25. apply_enemy_gravity(delta / 2)
  26. if is_on_floor():
  27. destroy()
  28. move_and_slide()
  29. func destroy() -> void:
  30. AudioManager.play_sfx("icicle_break", global_position)
  31. summon_particles()
  32. queue_free()
  33. func summon_particles() -> void:
  34. var node = ICICLE_DESTRUCTION.instantiate()
  35. node.global_position = global_position - Vector2(0, 8)
  36. add_sibling(node)
  37. func fall() -> void:
  38. AudioManager.play_sfx("icicle_fall", global_position)
  39. falling = true