knockoff/ui/inventory/inventory.gd

60 lines
1.7 KiB
GDScript

extends Node2D
class_name Inventory
var inventory : Array[Array]
func _ready():
for i in range(5):
inventory.append([])
for j in range(5):
inventory[i].append(true)
update_tiles()
func _process(delta) -> void:
if Input.is_action_just_released("select"):
if Globals.selected_item is Item:
remove_item(Globals.selected_item)
var item_head_position = global_to_inventory(Globals.selected_item.get_head_position())
insert_item(Globals.selected_item, item_head_position)
func remove_item(item : Item):
for y in range(len(inventory)):
for x in range(len(inventory[0])):
if inventory[y][x] is not Item: continue
if inventory[y][x] == item:
inventory[y][x] = true
func insert_item(item : Item, at : Vector2i):
var fits = true
if len(item.shape) + at.y > len(inventory) or len(item.shape[0]) + at.x > len(inventory[0]) or at.x < 0 or at.y < 0: fits = false
if fits:
for y in range(len(item.shape)):
for x in range(len(item.shape[0])):
if (inventory[y+at.y][x+at.x] is not bool or inventory[y+at.y][x+at.x] == false) and item.shape[y][x]: fits = false
if not fits:
item.move_away()
return
item.position = Vector2(at.x + float(len(item.shape[0]))/2, at.y + float(len(item.shape))/2) * Globals.tilesize
for y in range(len(item.shape)):
for x in range(len(item.shape[0])):
if item.shape[y][x]:
inventory[y+at.y][x+at.x] = item
func global_to_inventory(location : Vector2) -> Vector2:
location -= global_position
var new_location : Vector2i = Vector2i(location/Globals.tilesize)
return new_location
func update_tiles():
%InventoryTiles.clear()
for y in range(len(inventory)):
for x in range(len(inventory[0])):
if inventory[y][x]:
%InventoryTiles.set_cell(Vector2i(x,y),0,Vector2i(0,0))