71 lines
1.8 KiB
GDScript
71 lines
1.8 KiB
GDScript
class_name InventoryDialog
|
|
extends MarginContainer
|
|
|
|
@export var slot_scene:PackedScene
|
|
|
|
# Crafting
|
|
@onready var recipe_list:ItemList = %RecipeList
|
|
@onready var ingredients_container:ItemGrid = %IngredientsContainer
|
|
@onready var results_container:ItemGrid = %ResultsContainer
|
|
@onready var craft_button = %CraftButton
|
|
|
|
# Backpack
|
|
@onready var inventory_container:ItemGrid = %InventoryContainer
|
|
|
|
var _inventory:Inventory = null
|
|
var _selected_recipe:Recipe
|
|
|
|
|
|
func open(recipes:Array[Recipe], inventory:Inventory):
|
|
_inventory = inventory
|
|
|
|
show()
|
|
|
|
recipe_list.clear()
|
|
for recipe in recipes:
|
|
var index = recipe_list.add_item(recipe.name)
|
|
recipe_list.set_item_metadata(index, recipe)
|
|
|
|
inventory_container.displayStacks(inventory.get_item_stacks())
|
|
|
|
recipe_list.select(0)
|
|
_on_recipe_list_item_selected(0)
|
|
|
|
|
|
func _on_close_button_pressed():
|
|
hide()
|
|
|
|
|
|
func _unhandled_key_input(event:InputEvent):
|
|
var key_event:InputEventKey = event as InputEventKey
|
|
if visible and key_event.pressed and key_event.get_keycode_with_modifiers() == KEY_ESCAPE:
|
|
get_viewport().set_input_as_handled()
|
|
hide()
|
|
|
|
|
|
func update_crafting_widgets(recipe:Recipe):
|
|
ingredients_container.display(recipe.ingredients)
|
|
results_container.display(recipe.results)
|
|
|
|
craft_button.disabled = not _inventory.has_all(recipe.ingredients)
|
|
|
|
|
|
func _on_recipe_list_item_selected(index):
|
|
var recipe:Recipe = recipe_list.get_item_metadata(index)
|
|
|
|
_selected_recipe = recipe
|
|
print("Selected recipe is: " + str(recipe) + " with index " + str(index))
|
|
|
|
update_crafting_widgets(_selected_recipe)
|
|
|
|
|
|
func _on_craft_button_pressed():
|
|
for item in _selected_recipe.ingredients:
|
|
_inventory.remove_item(item)
|
|
|
|
for item in _selected_recipe.results:
|
|
_inventory.add_item(item)
|
|
|
|
inventory_container.displayStacks(_inventory.get_item_stacks())
|
|
update_crafting_widgets(_selected_recipe)
|