37 lines
936 B
GDScript
37 lines
936 B
GDScript
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
|