mtd/Scripts/StatusEffector.gd

37 lines
936 B
GDScript3
Raw Normal View History

extends Node3D
class_name StatusEffector
@export var hbox : HBoxContainer
var icon_scene = preload("res://Scenes/status_icon.tscn")
var effects : Array[StatusEffect]
var icons : Array[TextureRect]
func add_effect(new_effect : StatusEffect):
var icon_present = false
for effect in effects:
if effect.stats == new_effect.stats:
icon_present = true
new_effect.expired.connect(remove_effect)
effects.append(new_effect)
if !icon_present:
var icon = icon_scene.instantiate()
icon.texture = new_effect.stats.icon
icons.append(icon)
hbox.add_child(icon)
func remove_effect(expiring_effect : StatusEffect):
effects.erase(expiring_effect)
var has_remaining_stack = false
for effect in effects:
if effect.stats == expiring_effect.stats:
has_remaining_stack = true
if !has_remaining_stack:
for icon in icons:
if icon.texture == expiring_effect.stats.icon:
icons.erase(icon)
icon.queue_free()
break