class_name EnemyHurtbox extends Area2D # HP Management @export var max_hp : int @onready var hp = max_hp : set(new_hp): if new_hp > max_hp: new_hp = max_hp if new_hp < 0 : new_hp = 0 hp = new_hp if hp == 0: die() @export var flash_duration = 0.2 @export var canvasItem : CanvasItem @export var flashColor : Color = Color(1.5, 1.5, 1.5) # Instance-Specific Damage Cooldown @export var id_block_time = 0.12 var blocked_damage_ids : Array[int] = [] signal damage_taken(damage, dir, id) signal died # Reset Hit Flash func _on_flash_ended(): if canvasItem != null: canvasItem.modulate = Color(1,1,1) func hurt(damage : int, dir : Vector2 = Vector2.ZERO, id : int = -1) -> bool: if not id in blocked_damage_ids: block_id(id) if canvasItem != null: canvasItem.modulate = flashColor $FlashTimer.start(flash_duration) hp -= damage damage_taken.emit(damage, dir, id) return true return false # When taking damage, prevent damage from that instance for id_block_time. func block_id(id : int): blocked_damage_ids.append(id) await get_tree().create_timer(id_block_time).timeout var id_pos = blocked_damage_ids.find(id) if not id_pos == -1: blocked_damage_ids.remove_at(id_pos) func die(): died.emit() func destroy(): hurt(10 * max_hp)