136 lines
3.4 KiB
GDScript
136 lines
3.4 KiB
GDScript
extends Window
|
|
|
|
@onready var inventoryDisplayer = %InventoryDisplayer
|
|
|
|
var shownBasket
|
|
|
|
var messageFadeDelay = 1
|
|
var messageFadeSpeed = 1
|
|
|
|
func _ready():
|
|
inventoryDisplayer.buttonPressed.connect(place_basket)
|
|
inventoryDisplayer.set_title("Baskets")
|
|
|
|
func _process(delta):
|
|
if %Message.self_modulate.a > 0:
|
|
if messageFadeDelay > 0:
|
|
messageFadeDelay -= delta
|
|
else:
|
|
%Message.self_modulate.a -= (messageFadeSpeed * delta)
|
|
|
|
func opened():
|
|
get_tree().paused = true
|
|
%Message.self_modulate.a = 0
|
|
|
|
shownBasket = get_parent().get_current_basket()
|
|
|
|
initialize_inventory()
|
|
update_basket_display()
|
|
|
|
func initialize_inventory():
|
|
var playerInventory = InventoryManager.get_inventory()
|
|
inventoryDisplayer.inventory = filter_inventory(playerInventory)
|
|
inventoryDisplayer.update_display()
|
|
|
|
func update_inventory():
|
|
inventoryDisplayer.update_display()
|
|
|
|
func update_basket_display():
|
|
if shownBasket != null:
|
|
%BasketSprite.texture = shownBasket.get_sprite()
|
|
else:
|
|
%BasketSprite.texture = null
|
|
|
|
if shownBasket != null:
|
|
var maxSpace = BasketWeaving.get_basket_space(shownBasket)
|
|
var spaceUsed = get_parent().get_used_space(shownBasket)
|
|
%BasketSpace.text = "Space: " + str(spaceUsed) + "/" + str(maxSpace)
|
|
|
|
if maxSpace < spaceUsed:
|
|
%BasketSpace.set("theme_override_colors/font_color", Color.RED)
|
|
else:
|
|
%BasketSpace.set("theme_override_colors/font_color", Color.WHITE)
|
|
else:
|
|
%BasketSpace.text = "Space: 0/0"
|
|
|
|
if shownBasket != null:
|
|
%BasketName.text = shownBasket.get_name()
|
|
else:
|
|
%BasketName.text = "No basket placed"
|
|
|
|
if shownBasket != null:
|
|
%ReturnButton.visible = true
|
|
else:
|
|
%ReturnButton.visible = false
|
|
|
|
func remove_basket():
|
|
if shownBasket != null:
|
|
inventoryDisplayer.inventory.add_item(shownBasket)
|
|
|
|
shownBasket = null
|
|
|
|
update_inventory()
|
|
update_basket_display()
|
|
|
|
func place_basket(basket):
|
|
if shownBasket != null:
|
|
inventoryDisplayer.inventory.add_item(shownBasket)
|
|
|
|
inventoryDisplayer.inventory.remove_item(basket)
|
|
shownBasket = basket
|
|
|
|
update_inventory()
|
|
update_basket_display()
|
|
|
|
func filter_inventory(inventory):
|
|
var filteredInv:Inventory = inventory.duplicate()
|
|
|
|
var i = filteredInv.items.size() - 1
|
|
while i >= 0:
|
|
var currentItem:Item = filteredInv.items[i]
|
|
if not Item.types.Basket in currentItem.itemTypes:
|
|
filteredInv.remove_item(currentItem, filteredInv.quantities[i])
|
|
i -= 1
|
|
|
|
return filteredInv
|
|
|
|
func not_enough_space_message():
|
|
%Message.self_modulate.a = 1
|
|
messageFadeDelay = 1
|
|
|
|
func _on_confirm_button_pressed():
|
|
var maxSpace = 0
|
|
if shownBasket != null:
|
|
maxSpace = BasketWeaving.get_basket_space(shownBasket)
|
|
var spaceUsed = get_parent().get_used_space(shownBasket)
|
|
if spaceUsed > maxSpace:
|
|
if shownBasket == null:
|
|
%Message.text = "Empty basket contents first"
|
|
else:
|
|
%Message.text = "Not Enough Space in New Basket"
|
|
not_enough_space_message()
|
|
return
|
|
|
|
get_parent().change_current_basket(shownBasket)
|
|
get_parent().update_basket_display()
|
|
|
|
if shownBasket.get_name(false) == "Wustard Basket":
|
|
var wustardItems = 0
|
|
var basketInv = InventoryManager.get_inventory(get_parent().basketInvName)
|
|
for item:Item in basketInv.items:
|
|
if item.get_name().contains("Wustard") and !item.get_name().contains("Empty"):
|
|
wustardItems += 1
|
|
if wustardItems >= 5:
|
|
AchievementManager.complete_achievement("Wustard Lover")
|
|
break
|
|
|
|
get_tree().paused = false
|
|
hide()
|
|
|
|
func _on_cancel_button_pressed():
|
|
get_tree().paused = false
|
|
hide()
|
|
|
|
func _on_return_button_pressed():
|
|
remove_basket()
|