class_name ActiveItem extends Item @onready var active_item_uses = get_tree().get_root().get_node_or_null("main/UIOverlay/ActiveItemUses") @export var sprite : Texture2D @export var uses_left_icon : PackedScene @export var uses = 1: set(new_uses): uses = new_uses refresh_uses_ui() func refresh_uses_ui(): # Set the amount and type of child nodes active_item_uses has according to num_uses. if active_item_uses != null: while active_item_uses.get_children().size() > uses: active_item_uses.remove_child(active_item_uses.get_child(0)) if uses_left_icon != null: while active_item_uses.get_children().size() < uses: active_item_uses.add_child(uses_left_icon.instantiate()) # Called when the active item is touched. It will only be collected if # the player has space, in which case actually_collect() is called. func collect() -> bool: if (player.active_item == null or (player.active_item.item_name == item_name and player.active_item.uses < uses)): player.active_item = self uses = uses actually_collect() return true return false # Intended to be overridden by item classes. func actually_collect(): pass func trigger_activation(): activate() if uses != -1: uses -= 1 if uses == 0: remove() # Intended to be overridden by item classes. func activate(): pass # When removed, also removes the reference from the player and removes the uses. func remove(reset_player_active = true): if player.active_item == self: uses = 0 if reset_player_active: player.active_item = null self.queue_free()