131 lines
3.5 KiB
GDScript
131 lines
3.5 KiB
GDScript
extends Window
|
|
|
|
@onready var inventoryDisplayer = %InventoryDisplayer
|
|
|
|
func _ready():
|
|
inventoryDisplayer.buttonPressed.connect(add_ash)
|
|
|
|
func opened():
|
|
get_tree().paused = true
|
|
initialize_inventory()
|
|
initialize_barrel_contents()
|
|
update_barrel_display()
|
|
|
|
%CheckButton.button_pressed = SaveManager.get_save_value("PreventAshDuplicates", false)
|
|
|
|
func update_display(ashCount:int = -1):
|
|
update_inventory()
|
|
update_barrel_display(ashCount)
|
|
|
|
func initialize_barrel_contents():
|
|
%AshBarrelContents.display_barrel_inventory()
|
|
|
|
func add_to_barrel_display(ashName):
|
|
%AshBarrelContents.add_ash(ashName)
|
|
|
|
func update_barrel_display(ashCount:int = -1):
|
|
if ashCount == -1:
|
|
ashCount = get_ash_count()
|
|
|
|
var ashLevel = ashCount
|
|
if ashLevel > 0:
|
|
%AshBottom.visible = true
|
|
%AshBottom.self_modulate = get_ash_color()
|
|
else:
|
|
%AshBottom.visible = false
|
|
|
|
if ashLevel > 100:
|
|
ashLevel = 100
|
|
|
|
%AshProgress.value = ashLevel
|
|
|
|
var newStyleBox = %AshProgress.get("theme_override_styles/fill")
|
|
newStyleBox.bg_color = get_ash_color()
|
|
|
|
get_parent().update_ash()
|
|
|
|
func get_ash_color():
|
|
var ashColor = SaveManager.get_save_value("AshBarrelColor", "#FFFFFF")
|
|
return Color.html(ashColor)
|
|
|
|
func get_ash_count():
|
|
var ashCount = 0
|
|
|
|
var config = SaveManager.get_save_config()
|
|
var ashNames = config.get_section_keys("AshBarrel")
|
|
|
|
for i in range(ashNames.size()):
|
|
var currentAshName = ashNames[i]
|
|
var currentAshCount = SaveManager.get_value_from_section("AshBarrel", currentAshName, 0)
|
|
ashCount += currentAshCount
|
|
|
|
return ashCount
|
|
|
|
func add_ash(item:Item):
|
|
var itemName = item.get_name()
|
|
var timesAdded = SaveManager.get_value_from_section("AshBarrel", itemName, 0)
|
|
|
|
if SaveManager.get_save_value("PreventAshDuplicates", false) and timesAdded > 0:
|
|
return
|
|
|
|
timesAdded += 1
|
|
SaveManager.save_to_section("AshBarrel", itemName, timesAdded)
|
|
|
|
var ashColor:Color = SpriteGeneration.get_average_color(item.get_sprite().get_image())
|
|
var totalAsh = get_ash_count()
|
|
if totalAsh == 1:
|
|
SaveManager.set_save_value("AshBarrelColor", ashColor.to_html())
|
|
else:
|
|
var oldRatio = (totalAsh-1)/float(totalAsh)
|
|
var newRatio = 1 - oldRatio
|
|
|
|
if newRatio < 0.1:
|
|
newRatio = 0.1
|
|
|
|
var oldAshColor = get_ash_color()
|
|
var newAverageColor = oldAshColor.lerp(ashColor, newRatio)
|
|
|
|
SaveManager.set_save_value("AshBarrelColor", newAverageColor.to_html())
|
|
|
|
InventoryManager.remove_item_from_inventory(item)
|
|
|
|
if totalAsh >= 100:
|
|
AchievementManager.complete_achievement("Community Service")
|
|
|
|
var config = SaveManager.get_save_config()
|
|
var ashNames = config.get_section_keys("AshBarrel")
|
|
if ashNames.size() >= 200:
|
|
AchievementManager.complete_achievement("Arson Scientist")
|
|
|
|
update_display(totalAsh)
|
|
add_to_barrel_display(itemName)
|
|
|
|
func initialize_inventory():
|
|
update_inventory()
|
|
inventoryDisplayer.set_title("Ash Items")
|
|
|
|
func update_inventory():
|
|
var playerInventory = InventoryManager.get_inventory()
|
|
inventoryDisplayer.inventory = filter_inventory(playerInventory)
|
|
inventoryDisplayer.update_display()
|
|
|
|
func filter_inventory(inventory):
|
|
var filteredInv:Inventory = Inventory.new()
|
|
|
|
var i = inventory.items.size() - 1
|
|
while i >= 0:
|
|
var currentItem = inventory.items[i]
|
|
if Item.types.Ash in currentItem.itemTypes:
|
|
filteredInv.add_item(currentItem.duplicate(), inventory.quantities[i])
|
|
i -= 1
|
|
|
|
return filteredInv
|
|
|
|
func _on_leave_button_pressed():
|
|
get_tree().paused = false
|
|
get_parent().update_ash()
|
|
hide()
|
|
|
|
func _on_check_button_toggled(toggled_on):
|
|
SaveManager.set_save_value("PreventAshDuplicates", toggled_on)
|