Issix-mod/Modules/IssixModule/Internal/InventoryScreenDonation.gd
Frisk e1f8dfbcd8 Countless fixes, hiisi scene, BDSM donation system, lamia dialogue
Fixed litter guessing minigame
Fixed Hiisi's name dialogue being unavailable (#4)
Fixed Lamia's logic error where player can lock themselves of being able to help
Added donation system for player to donate their leftover BDSM gear and get something in return
Added Hiisi's first scene
2024-12-31 23:36:04 +01:00

151 lines
4.4 KiB
GDScript

# 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()