class_name EnemyHurtbox extends Area2D @export var max_hp : int @onready var hp = max_hp @export var flash_duration = 0.2 @export var canvasItem : CanvasItem @export var flashColor : Color = Color(1.5, 1.5, 1.5) @export var id_block_time = 0.12 var flash_time = 0 var blocked_damage_ids : Array[int] = [] signal damage_taken(damage, dir, id) signal died func _process(delta: float) -> void: flash_time = max(flash_time-delta, 0) if(flash_time <= 0 and 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 flash_time = flash_duration hp = max(hp-damage, 0) damage_taken.emit(damage, dir, id) if(hp <= 0): die() return true return false 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(9999)