Cow_Life_Sim_RPG/UI/AshBarrel/AshBarrelWindow.gd

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)