159 lines
4.5 KiB
GDScript
159 lines
4.5 KiB
GDScript
extends Window
|
|
|
|
var itemShopDisplayScene = preload("res://UI/Shopping/ItemShopDisplay.tscn")
|
|
@onready var inventoryItemDisplayer = %PlayerInventoryItems
|
|
@onready var shopItemDisplayer = %ShopInventoryItems
|
|
@onready var playerTradeItemDisplayer = %PlayerTradeItems
|
|
@onready var shopTradeItemDisplayer = %ShopTradeItems
|
|
|
|
@onready var costDisplay = %CostDisplay
|
|
|
|
var shopItems = []
|
|
|
|
var playerTradeItems:Inventory
|
|
var shopTradeItems:Inventory
|
|
|
|
func _ready():
|
|
inventoryItemDisplayer.buttonPressed.connect(add_to_player_trade)
|
|
playerTradeItemDisplayer.buttonPressed.connect(remove_from_player_trade)
|
|
|
|
shopItemDisplayer.buttonPressed.connect(add_to_shop_trade)
|
|
shopTradeItemDisplayer.buttonPressed.connect(remove_from_shop_trade)
|
|
|
|
shopItemDisplayer.quantitiesShown = false
|
|
|
|
playerTradeItemDisplayer.negativeOptions = true
|
|
shopTradeItemDisplayer.negativeOptions = true
|
|
|
|
playerTradeItemDisplayer.positiveOptions = false
|
|
shopTradeItemDisplayer.positiveOptions = false
|
|
|
|
func opened():
|
|
get_tree().paused = true
|
|
set_up_inventory()
|
|
set_up_shop_inventory()
|
|
|
|
playerTradeItems = Inventory.new()
|
|
shopTradeItems = Inventory.new()
|
|
|
|
update_cost_display()
|
|
|
|
func set_up_inventory():
|
|
inventoryItemDisplayer.inventory = InventoryManager.get_inventory()
|
|
inventoryItemDisplayer.update_display()
|
|
|
|
func set_up_shop_inventory():
|
|
shopItemDisplayer.inventory.items = shopItems
|
|
for i in shopItems.size():
|
|
shopItemDisplayer.inventory.quantities.append(1)
|
|
|
|
shopItemDisplayer.update_display()
|
|
|
|
func add_to_shop_trade(item):
|
|
shopTradeItems.add_item(item)
|
|
|
|
shopTradeItemDisplayer.inventory = shopTradeItems
|
|
shopTradeItemDisplayer.update_display()
|
|
|
|
update_cost_display()
|
|
|
|
func remove_from_shop_trade(item):
|
|
shopTradeItems.remove_item(item)
|
|
|
|
shopTradeItemDisplayer.inventory = shopTradeItems
|
|
shopTradeItemDisplayer.update_display()
|
|
|
|
update_cost_display()
|
|
|
|
func add_to_player_trade(item):
|
|
InventoryManager.remove_item_from_inventory(item)
|
|
playerTradeItems.add_item(item)
|
|
|
|
playerTradeItemDisplayer.inventory = playerTradeItems
|
|
playerTradeItemDisplayer.update_display()
|
|
inventoryItemDisplayer.update_display()
|
|
|
|
update_cost_display()
|
|
|
|
func remove_from_player_trade(item):
|
|
InventoryManager.add_item_to_inventory(item)
|
|
playerTradeItems.remove_item(item)
|
|
|
|
playerTradeItemDisplayer.inventory = playerTradeItems
|
|
playerTradeItemDisplayer.update_display()
|
|
inventoryItemDisplayer.update_display()
|
|
|
|
update_cost_display()
|
|
|
|
func update_cost_display():
|
|
var cost = get_cost()
|
|
costDisplay.set_display(cost)
|
|
|
|
func get_cost():
|
|
var playerOffering = 0
|
|
var shopOffering = 0
|
|
|
|
for i in range(playerTradeItems.items.size()):
|
|
playerOffering += playerTradeItems.items[i].value * playerTradeItems.quantities[i]
|
|
|
|
for i in range(shopTradeItems.items.size()):
|
|
shopOffering += shopTradeItems.items[i].value * shopTradeItems.quantities[i]
|
|
|
|
return playerOffering - shopOffering
|
|
|
|
func reset_items():
|
|
for i in range(playerTradeItems.items.size()):
|
|
var currentItem = playerTradeItems.items[i]
|
|
InventoryManager.add_item_to_inventory(currentItem, playerTradeItems.quantities[i])
|
|
|
|
playerTradeItems = Inventory.new()
|
|
playerTradeItemDisplayer.inventory = playerTradeItems
|
|
playerTradeItemDisplayer.update_display()
|
|
|
|
shopTradeItems = Inventory.new()
|
|
shopTradeItemDisplayer.inventory = shopTradeItems
|
|
shopTradeItemDisplayer.update_display()
|
|
|
|
func _on_leave_button_pressed():
|
|
reset_items()
|
|
get_tree().paused = false
|
|
hide()
|
|
|
|
func _on_confirm_button_pressed():
|
|
var currentCost = get_cost()*-1
|
|
var currentGrapesOwned = InventoryManager.get_grape_count()
|
|
|
|
if currentGrapesOwned >= currentCost:
|
|
$NotEnoughGrapesLabel.hide_now()
|
|
if shopTradeItems.items.size() > 0 or playerTradeItems.items.size() > 0:
|
|
$AcceptedLabel.show_up()
|
|
if currentCost > 0:
|
|
$AcceptedLabel.text = "Offer accepted (" + str(currentCost*-1) + " grapes)"
|
|
elif currentCost < 0:
|
|
$AcceptedLabel.text = "Offer accepted (+" + str(currentCost*-1) + " grapes)"
|
|
else:
|
|
$AcceptedLabel.text = "Offer accepted"
|
|
confirm_trade()
|
|
else:
|
|
$NotEnoughGrapesLabel.show_up()
|
|
$AcceptedLabel.hide_now()
|
|
|
|
func confirm_trade():
|
|
var currentCost = get_cost()
|
|
InventoryManager.alter_grape_count(currentCost)
|
|
|
|
for i in range(shopTradeItems.items.size()):
|
|
InventoryManager.add_item_to_inventory(shopTradeItems.items[i], shopTradeItems.quantities[i])
|
|
|
|
playerTradeItems = Inventory.new()
|
|
playerTradeItemDisplayer.inventory = playerTradeItems
|
|
playerTradeItemDisplayer.update_display()
|
|
|
|
shopTradeItems = Inventory.new()
|
|
shopTradeItemDisplayer.inventory = shopTradeItems
|
|
shopTradeItemDisplayer.update_display()
|
|
|
|
inventoryItemDisplayer.update_display()
|
|
|
|
update_cost_display()
|