151 lines
4.4 KiB
GDScript3
151 lines
4.4 KiB
GDScript3
|
# From UI/Inventory/InventoryScreen.gd
|
||
|
|
||
|
extends Control
|
||
|
|
||
|
onready var itemListContainer = $MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/VBoxContainer
|
||
|
var inventoryEntry = preload("res://UI/Inventory/InventoryEntry.tscn")
|
||
|
var inventoryGroupEntry = preload("res://UI/Inventory/InventoryGroupEntry.tscn")
|
||
|
onready var itemNameLabel = $MarginContainer/HBoxContainer/VBoxContainer/Label
|
||
|
onready var itemDescLabel = $MarginContainer/HBoxContainer/VBoxContainer/RichTextLabel
|
||
|
onready var searchInput = $MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/SearchLineEdit
|
||
|
|
||
|
#var inventory: Inventory
|
||
|
var itemsByGroup = {}
|
||
|
var selectedItem: ItemBase
|
||
|
var itemEntries = []
|
||
|
var filterEnteries = []
|
||
|
|
||
|
signal onInteractWith(item)
|
||
|
signal onInteractWithGroup(item)
|
||
|
signal onItemSelected(item)
|
||
|
|
||
|
var currentMode = ""
|
||
|
var isDonation = false
|
||
|
var isEnchant = false
|
||
|
|
||
|
var shouldGrabInput = true
|
||
|
|
||
|
func _ready():
|
||
|
if(shouldGrabInput && !OS.has_touchscreen_ui_hint()):
|
||
|
searchInput.grab_focus()
|
||
|
|
||
|
#func setInventory(inv, isFight = false):
|
||
|
#if(inventory != inv || isFightMode != isFight):
|
||
|
# isFightMode = isFight
|
||
|
# inventory = inv
|
||
|
# updateInventory()
|
||
|
|
||
|
func setItems(newItems, theMode = "donation"):
|
||
|
itemsByGroup = newItems
|
||
|
currentMode = theMode
|
||
|
isDonation = (theMode == "donation")
|
||
|
isEnchant = (theMode == "enchant")
|
||
|
updateInventory()
|
||
|
filterInventory()
|
||
|
|
||
|
func filterInventory():
|
||
|
var textToFilter = searchInput.text.to_lower()
|
||
|
if(textToFilter == ""):
|
||
|
for entry in filterEnteries:
|
||
|
entry.visible = true
|
||
|
return
|
||
|
|
||
|
for entry in filterEnteries:
|
||
|
var nameToCheck = entry.getItem().getVisibleName().to_lower()
|
||
|
|
||
|
if(textToFilter in nameToCheck):
|
||
|
entry.visible = true
|
||
|
else:
|
||
|
entry.visible = false
|
||
|
|
||
|
func updateInventory():
|
||
|
Util.delete_children(itemListContainer)
|
||
|
itemEntries = []
|
||
|
filterEnteries = []
|
||
|
|
||
|
#if(inventory == null):
|
||
|
# return
|
||
|
|
||
|
var theItemsGrouped = itemsByGroup#inventory.getItemsAndEquippedItemsTogetherGrouped()
|
||
|
if(theItemsGrouped is Array):
|
||
|
var newItemsGrouped = {}
|
||
|
for item in theItemsGrouped:
|
||
|
if(!newItemsGrouped.has(item.id)):
|
||
|
newItemsGrouped[item.id] = [item]
|
||
|
else:
|
||
|
newItemsGrouped[item.id].append(item)
|
||
|
theItemsGrouped = newItemsGrouped
|
||
|
|
||
|
for groupID in theItemsGrouped:
|
||
|
var theItems = theItemsGrouped[groupID]
|
||
|
|
||
|
if(theItems.size() == 1):
|
||
|
var item = theItems[0]
|
||
|
var entry = inventoryEntry.instance()
|
||
|
itemListContainer.add_child(entry)
|
||
|
itemEntries.append(entry)
|
||
|
filterEnteries.append(entry)
|
||
|
entry.setItem(item, currentMode)
|
||
|
|
||
|
entry.connect("onInteractButtonPressed", self, "onEntryInteractButtonPressed")
|
||
|
entry.connect("onItemSelected", self, "onEntrySelected")
|
||
|
else:
|
||
|
var newGroupEntry = inventoryGroupEntry.instance()
|
||
|
itemListContainer.add_child(newGroupEntry)
|
||
|
newGroupEntry.setItem(theItems[0], currentMode)
|
||
|
filterEnteries.append(newGroupEntry)
|
||
|
|
||
|
newGroupEntry.connect("onInteractButtonPressed", self, "onGroupEntryInteractButtonPressed")
|
||
|
# add entry to some group entries maybe here
|
||
|
for item in theItems:
|
||
|
var entry = inventoryEntry.instance()
|
||
|
newGroupEntry.addEntry(entry)
|
||
|
entry.setItem(item, currentMode)
|
||
|
itemEntries.append(entry)
|
||
|
|
||
|
entry.connect("onInteractButtonPressed", self, "onEntryInteractButtonPressed")
|
||
|
entry.connect("onItemSelected", self, "onEntrySelected")
|
||
|
newGroupEntry.updateCollapsed()
|
||
|
|
||
|
updateSelectedHighlight()
|
||
|
|
||
|
func updateSelectedHighlight():
|
||
|
for entry in itemEntries:
|
||
|
if(entry.getItem() == selectedItem):
|
||
|
entry.setSelected(true)
|
||
|
else:
|
||
|
entry.setSelected(false)
|
||
|
|
||
|
func updateSelectedInfo():
|
||
|
if(selectedItem == null):
|
||
|
itemNameLabel.text = "Pick an item"
|
||
|
itemDescLabel.bbcode_text = ""
|
||
|
return
|
||
|
itemNameLabel.text = selectedItem.getStackName()
|
||
|
itemDescLabel.bbcode_text = selectedItem.getVisibleDescription()
|
||
|
|
||
|
if isDonation:
|
||
|
var price = selectedItem.getStackSellPrice()
|
||
|
var priceStr = (str(price)+" credit") if price == 1 else (str(price)+" credits")
|
||
|
itemDescLabel.bbcode_text += "\nSell value otherwise: " +priceStr
|
||
|
if(selectedItem.getAmount() > 1):
|
||
|
itemDescLabel.bbcode_text += " (for "+str(selectedItem.getAmount())+")"
|
||
|
elif isEnchant:
|
||
|
pass
|
||
|
|
||
|
func onEntryInteractButtonPressed(theItem):
|
||
|
emit_signal("onInteractWith", theItem)
|
||
|
|
||
|
func onGroupEntryInteractButtonPressed(theItem):
|
||
|
emit_signal("onInteractWithGroup", theItem)
|
||
|
|
||
|
func onEntrySelected(theItem):
|
||
|
selectedItem = theItem
|
||
|
updateSelectedInfo()
|
||
|
updateSelectedHighlight()
|
||
|
emit_signal("onItemSelected", selectedItem)
|
||
|
|
||
|
|
||
|
func _on_SearchLineEdit_text_changed(_new_text):
|
||
|
filterInventory()
|