project-dung/scripts/item_dump.gd

64 lines
1.7 KiB
GDScript

extends Spatial
signal item_dump_completed
signal item_dumped
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)
reset()
update_item_balloons()
func reset():
items_remaining.clear()
for item in items_required:
assert(item != null)
items_remaining.push_back(item)
func on_player_interact(player) -> bool:
if not enabled:
return false
if items_remaining.empty():
return false
if not player.has_item():
return false
if not items_remaining.has(player.item_in_hand.item_type):
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])