64 lines
1.7 KiB
GDScript
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])
|