newlon/scripts/components/generic_hurtbox.gd
2025-08-09 21:35:02 +05:00

45 lines
1.1 KiB
GDScript

extends Area2D
class_name GenericHurtbox
@export_flags("NORMAL:1","LOW:2","HIGH:4") var lookup_layers : int = 0
var entities : Array[Entity] = []
signal entity_added(entity : Entity)
signal entity_removed(entity : Entity)
signal collision_start
signal collision_end
func _ready() -> void:
area_entered.connect(on_area_entered)
area_exited.connect(on_area_exited)
func on_area_entered(area: Area2D):
if area is GenericCollider:
if lookup_layers & area.layer != 0:
add_entity(area.get_parent())
func on_area_exited(area: Area2D):
if area is GenericCollider:
if lookup_layers & area.layer != 0:
remove_entity(area.get_parent())
func add_entity(entity : Entity):
entities.append(entity)
entity_added.emit(entity)
if entities.size() == 1:
collision_start.emit()
func remove_entity(entity : Entity):
entities.erase(entity)
entity_removed.emit(entity)
if entities.size() == 0:
collision_end.emit()
func get_colliding_entity() -> Entity:
if entities.size() == 0:
return null
return entities[0]
func is_colliding() -> bool:
return entities.size() > 0