77 lines
1.8 KiB
GDScript
77 lines
1.8 KiB
GDScript
@tool
|
|
extends Inventory
|
|
|
|
class_name InOutInventory
|
|
|
|
@export var input_capacity : int
|
|
@export var output_capacity : int
|
|
|
|
@export_storage var input_array : Array[InventorySlot]
|
|
@export_storage var output_slot : InventorySlot
|
|
|
|
func resize() -> void:
|
|
input_array.resize(input_capacity)
|
|
for i in range(input_capacity):
|
|
input_array[i] = InventorySlot.new()
|
|
output_slot = InventorySlot.new()
|
|
|
|
func _init() -> void:
|
|
super()
|
|
resize.call_deferred()
|
|
|
|
func add(stack : Stack, _context: InventoryContext = null) -> Stack:
|
|
if stack == null:
|
|
return stack
|
|
for i in range(input_capacity):
|
|
if input_array[i].can_be_merged(stack.held_item):
|
|
stack_added.emit(stack,i)
|
|
input_array[i].merge_stack(stack)
|
|
if stack.is_valid() == false:
|
|
return null
|
|
return stack
|
|
|
|
func can_add(item : Item = null, _context: InventoryContext = null) -> bool:
|
|
if item == null:
|
|
return false
|
|
else:
|
|
for i in range(input_capacity):
|
|
if input_array[i].can_be_merged(item):
|
|
return true
|
|
return false
|
|
|
|
|
|
## Tries to take first item. Returns null if no items in inventory
|
|
func pop() -> Stack:
|
|
if output_slot.held_item != null:
|
|
var extracted = output_slot.extract()
|
|
stack_taken.emit(extracted,0)
|
|
return extracted
|
|
return null
|
|
|
|
func peek() -> Stack:
|
|
if output_slot.held_item != null:
|
|
var peeked = output_slot.as_stack()
|
|
return peeked
|
|
return null
|
|
|
|
## Tries to take certain item from inventory. Returns null if no item found
|
|
func take(item: Item,amount: int) -> Stack:
|
|
if item != output_slot.filter:
|
|
return null
|
|
var extracted = output_slot.extract_stack(amount)
|
|
return extracted
|
|
|
|
func find_input(item : Item) -> int:
|
|
for i in range(input_capacity):
|
|
if input_array[i].held_item == item:
|
|
return i
|
|
return -1
|
|
|
|
func find(item : Item) -> int:
|
|
if output_slot.held_item == item:
|
|
return 0
|
|
return -1
|
|
|
|
func refresh() -> void:
|
|
for i in range(input_capacity):
|
|
input_array[i].updated = false
|