extends Spatial signal item_dump_completed signal item_dumped signal player_failed_interact export var enabled = true export (Array,Resource) var items_required onready var one_item_node : Spatial = $"%one_item" onready var two_item_node : Spatial = $"%two_item" onready var one_item_balloon : ItemBalloon = $"%one_item_balloon" onready var two_item_balloon1 : ItemBalloon = $"%two_item_balloon1" onready var two_item_balloon2 : ItemBalloon = $"%two_item_balloon2" var items_remaining = [] func _ready(): assert(items_required.size() <= 2) update_item_balloons() func reset(): items_remaining.clear() for item in items_required: assert(item != null) items_remaining.push_back(item) update_item_balloons() func on_player_interact(player) -> bool: if not enabled: emit_signal("player_failed_interact") return false if items_remaining.empty(): emit_signal("player_failed_interact") return false if not player.has_item(): emit_signal("player_failed_interact") return false if not items_remaining.has(player.item_in_hand.item_type): emit_signal("player_failed_interact") return false # Remove the player's item and mark off the item on the remaining list var item = player.drop_item_in_hand() items_remaining.erase(item.item_type) item.queue_free() emit_signal("item_dumped") update_item_balloons() # Check if everything's been checked off if items_remaining.empty(): emit_signal("item_dump_completed") return true func update_item_balloons(): if items_remaining.size() == 0: one_item_node.visible = false two_item_node.visible = false elif items_remaining.size() == 1: one_item_node.visible = true two_item_node.visible = false one_item_balloon.attach_item(items_remaining[0]) else: one_item_node.visible = false two_item_node.visible = true two_item_balloon1.attach_item(items_remaining[0]) two_item_balloon2.attach_item(items_remaining[1])