60 lines
1.7 KiB
GDScript
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))
|