52 lines
1.3 KiB
GDScript
52 lines
1.3 KiB
GDScript
extends Spatial
|
|
|
|
export var recipes: Resource
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
assert(recipes != null)
|
|
update_coin_machine_status()
|
|
|
|
func get_craft_recipe_item():
|
|
var items_in_slots = [$slot_1.item_in_hold.item_type, $slot_2.item_in_hold.item_type]
|
|
return recipes.find_recipe(items_in_slots)
|
|
|
|
func can_craft_recipe():
|
|
return get_craft_recipe_item() != null
|
|
|
|
func craft_item():
|
|
var crafted_item = get_craft_recipe_item()
|
|
if crafted_item == null:
|
|
return
|
|
$slot_1.destroy_item()
|
|
$slot_2.destroy_item()
|
|
$craft_item_holder.spawn_item(crafted_item)
|
|
|
|
func _on_coin_machine_coin_requirement_met(player):
|
|
if not $slot_1.has_item():
|
|
print("Slot 1 item missing")
|
|
return
|
|
if not $slot_2.has_item():
|
|
print("Slot 2 item missing")
|
|
return
|
|
craft_item()
|
|
|
|
func should_enable_coin_machine():
|
|
if $craft_item_holder.has_item():
|
|
return false
|
|
if not $slot_1.has_item() or not $slot_2.has_item():
|
|
return false
|
|
return can_craft_recipe()
|
|
|
|
func update_coin_machine_status():
|
|
$coin_machine.enabled = should_enable_coin_machine()
|
|
|
|
func _on_craft_item_holder_item_changed(item):
|
|
update_coin_machine_status()
|
|
|
|
func _on_slot_1_item_changed(item):
|
|
update_coin_machine_status()
|
|
|
|
func _on_slot_2_item_changed(item):
|
|
update_coin_machine_status()
|