45 lines
1.1 KiB
GDScript
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
|