class_name TickProcess extends Node func tick(): Log.pr("Tick Process Ticking...") do_autowood() do_whittling() do_selling() func do_autowood(): # If the autowood unlock is unlocked then automatically gain wood based on the modifier var autowood_unlock = Unlocks.get_unlock_by_id(Global.autowood_unlock_id) if autowood_unlock and autowood_unlock.is_unlocked: Log.pr("Autowood modifier", str(Unlocks.get_modifier_value("autowood_modifier"))) var wood_to_gather = max(Unlocks.get_wood_per_click() * Unlocks.get_modifier_value("autowood_modifier"), 1) Inventory.add_wood(wood_to_gather) Log.pr("Auto-gathered", str(wood_to_gather), "wood via autowood unlock.") func do_whittling(): # If there's more than 1 whole wood available, then whittle based on the efficiency modifier if Inventory.get_wood() >= 1: whittle_max_wood_possible() ## If multicraft is unlocked, whittle additional wood based on multicraft unlock var multicraft_unlock = Unlocks.get_unlock_by_id(Global.multicraft_unlock_id) if multicraft_unlock and multicraft_unlock.is_unlocked: var additional_whittles = multicraft_unlock.current_rank # Each rank allows one additional whittling action for i in range(additional_whittles): if Inventory.get_wood() >= 1: whittle_max_wood_possible() else: break func do_selling(): # If the wholesale unlock is purchased, sell blocks of 100 whittled wood if possible var wholesale_unlock = Unlocks.get_unlock_by_id(Global.wholesale_unlock_id) if wholesale_unlock and wholesale_unlock.is_unlocked: while Inventory.get_stock() >= Global.wholesale_bundle_size: Inventory.spend_stock(Global.wholesale_bundle_size) var currency_earned = Global.wholesale_bundle_size * Unlocks.get_sale_price_per_item() * Global.wholesale_discount_multiplier Inventory.add_currency(currency_earned) Log.pr("Sold 100 whittled wood for", str(currency_earned), "currency via wholesale unlock.") # If there's whittled wood available to sell, sell it for currency if Inventory.get_stock() > 0: var whittle_wood_to_sell = Inventory.get_stock() # Sell whatever people are willing to buy var purchase_rate = Global.base_purchase_rate * Unlocks.get_modifier_value("purchase_rate_modifier") var max_stock_to_sell = floor(purchase_rate) # Sell up to the max stock to sell this tick, but no more than available stock # We should always sell at least one, up to the max var actual_stock_to_sell = min(whittle_wood_to_sell, max(1, max_stock_to_sell)) Inventory.spend_stock(actual_stock_to_sell) var currency_earned = actual_stock_to_sell * Unlocks.get_sale_price_per_item() Inventory.add_currency(currency_earned) func whittle_max_wood_possible(): # Get the items that can be produced per tick var items_produced_per_tick = Unlocks.get_items_produced_per_tick() Log.pr("Items produced per tick:", str(items_produced_per_tick)) var wood_needed = ceil(items_produced_per_tick) # Whittle as much wood as possible this tick, up to the max allowed by efficiency var wood_to_whittle = min(Inventory.get_wood(), wood_needed) var actual_items_produced = wood_to_whittle Inventory.spend_wood(wood_to_whittle) Inventory.add_stock(actual_items_produced) Log.pr("Whittled", str(wood_to_whittle), "wood into", str(actual_items_produced), "whittle wood.")