Starting item and inventory tools, sketched spear animation templates.
This commit is contained in:
@@ -25,9 +25,14 @@ var armor : Armor
|
||||
var accessory : Accessory
|
||||
var inventory : Dictionary[Vector2, Item] = {}
|
||||
var inventory_size : Vector2i = Vector2i(6,1)
|
||||
var inventory_count : int = 0
|
||||
|
||||
var quest_sprite : QuestSprite
|
||||
|
||||
signal changed()
|
||||
signal levelled()
|
||||
signal died()
|
||||
|
||||
func _init() -> void:
|
||||
stats = StatBlock.new()
|
||||
|
||||
@@ -45,10 +50,12 @@ func generate() -> void:
|
||||
max_energy = stats.INT * 10 + stats.FAI * 10
|
||||
life = max_life
|
||||
energy = max_energy
|
||||
changed.emit()
|
||||
|
||||
func assign_quest(quest : Quest) -> void:
|
||||
self.quest = quest
|
||||
quest.initiate(self)
|
||||
changed.emit()
|
||||
|
||||
func full_name() -> String:
|
||||
return given_name + " " + surname
|
||||
@@ -57,18 +64,65 @@ func gain_level() -> void:
|
||||
level += 1
|
||||
#TODO: Make stats improve based on job
|
||||
Game.notice("%s has reached level %d!" % [full_name(), level])
|
||||
#TODO: Make Sideview display level up
|
||||
changed.emit()
|
||||
levelled.emit()
|
||||
|
||||
func gain_exp(amount : int) -> void:
|
||||
exp += amount
|
||||
while exp >= get_tnl():
|
||||
exp -= get_tnl()
|
||||
gain_level()
|
||||
changed.emit()
|
||||
|
||||
func gain_gold(amount :int) -> void:
|
||||
gold += amount
|
||||
changed.emit()
|
||||
|
||||
func get_tnl() -> int:
|
||||
if job:
|
||||
return job.get_tnl(level)
|
||||
else:
|
||||
return level * 10
|
||||
|
||||
func find_open_inventory_slot(item : Item) -> Vector2:
|
||||
var first_open : Vector2 = Vector2(-1,-1)
|
||||
for j in range(inventory_size.y):
|
||||
for i in range(inventory_size.x):
|
||||
var curr_slot : Item = inventory.get(Vector2(i,j))
|
||||
if curr_slot != null:
|
||||
#TODO: Figure out how to handle split stacking later?
|
||||
if curr_slot.name == item.name and curr_slot.max_quantity < curr_slot.quantity + item.quantity:
|
||||
return Vector2(i,j)
|
||||
elif first_open == Vector2(-1,-1):
|
||||
first_open = Vector2(i,j)
|
||||
return first_open
|
||||
|
||||
func try_pickup_item(item : Item) -> bool:
|
||||
if inventory_count >= inventory_size.x * inventory_size.y:
|
||||
return false
|
||||
pickup_item(item)
|
||||
return true
|
||||
|
||||
func pickup_item(item : Item) -> void:
|
||||
var open_slot = find_open_inventory_slot(item)
|
||||
if inventory.has(open_slot):
|
||||
inventory[open_slot].quantity += item.quantity
|
||||
else:
|
||||
if inventory_count >= inventory_size.x * inventory_size.y:
|
||||
printerr("Cannot fit additional item!")
|
||||
inventory[open_slot] = item
|
||||
inventory_count+=1
|
||||
changed.emit()
|
||||
|
||||
func move_item(from : Vector2, to: Vector2) -> void:
|
||||
if !inventory.has(from):
|
||||
printerr("Cannot move item from %s to %s, %s is empty!" % [from, to, from])
|
||||
var itm = inventory[from]
|
||||
if inventory.has(to):
|
||||
var itm2 = inventory[to]
|
||||
inventory[from] = itm2
|
||||
else:
|
||||
inventory.erase(from)
|
||||
inventory[to] = itm
|
||||
changed.emit()
|
||||
|
||||
Reference in New Issue
Block a user