The_Dark_Side_of_Earth/items/generic/active_item.gd

53 lines
1.5 KiB
GDScript3
Raw Permalink Normal View History

class_name ActiveItem extends Item
@onready var active_item_uses = get_tree().get_root().get_node_or_null("main/UIOverlay/ActiveItemUses")
2025-09-17 15:59:14 +02:00
@export var sprite : Texture2D
@export var uses_left_icon : PackedScene
@export var uses = 1:
set(new_uses):
uses = new_uses
2025-10-12 18:26:36 +02:00
refresh_uses_ui()
2025-09-17 15:59:14 +02:00
2025-10-12 18:26:36 +02:00
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
2025-09-17 15:59:14 +02:00
2025-10-12 18:26:36 +02:00
# Intended to be overridden by item classes.
func actually_collect():
pass
func trigger_activation():
activate()
if uses != -1:
uses -= 1
if uses == 0:
remove()
2025-10-12 18:26:36 +02:00
# Intended to be overridden by item classes.
2025-09-17 15:59:14 +02:00
func activate():
2025-10-12 18:26:36 +02:00
pass
2025-10-12 18:26:36 +02:00
# 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()