extends Area3D class_name Hitbox @export var debug_color_hit: Color = Color(Color.YELLOW, 0.5) @export var debug_color_standby: Color = Color(Color.GREEN, 0.5) @onready var model: CharacterModel = $"../.." @onready var shape: CollisionShape3D = $CollisionShape3D @onready var hit_effect: HitEffect = $HitEffect var _last_hit: float = 0 func _ready() -> void: shape.debug_color = debug_color_standby func _process(delta: float) -> void: for area in get_overlapping_areas(): if area is Hurtbox: on_hit(area) _last_hit += delta if _last_hit > 1.0: # TODO: all these guys share the same collision shape shape.debug_color = debug_color_standby func on_hit(area: Hurtbox): if is_being_attacked_by(area): _last_hit = 0 shape.debug_color = debug_color_hit hit_effect.trigger() area.ignore_list.append(self) var hit_pkt := area.get_hit_packet() model.current_state.react_to_hit(hit_pkt) hit_pkt.queue_free() func is_being_attacked_by(area: Hurtbox): return area.is_attacking and not area.ignore_list.has(self)