The_Dark_Side_of_Earth/utils/enemy_hurtbox.gd

41 lines
1.1 KiB
GDScript

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):
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()
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)