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))