BlockBouncingDetection.gd 927 B

123456789101112131415161718192021222324252627282930313233
  1. class_name BlockBouncingDetection
  2. extends Node
  3. @export_enum("Collision", "Hitbox") var detection_type := 0
  4. @export var hitbox: Area2D = null
  5. @export var can_change_direction := false
  6. signal block_bounced(block: Block)
  7. func _physics_process(_delta: float) -> void:
  8. if detection_type == 0:
  9. collision_detect()
  10. else:
  11. hitbox_detect()
  12. func collision_detect() -> void:
  13. var collision: KinematicCollision2D = owner.move_and_collide(Vector2.DOWN, true)
  14. if is_instance_valid(collision):
  15. if collision.get_collider() is Block:
  16. if collision.get_collider().bouncing:
  17. block_bounced.emit(collision.get_collider())
  18. return
  19. func hitbox_detect() -> void:
  20. if is_instance_valid(hitbox) == false: return
  21. for i in hitbox.get_overlapping_bodies():
  22. if i is Block:
  23. if i.bouncing:
  24. block_bounced.emit(i)
  25. if can_change_direction:
  26. owner.direction = sign(owner.global_position.x - i.global_position.x)
  27. return