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)