whittler/scripts/tick_process.gd
Dan Baker 0fe23420ab All
2025-12-02 07:45:23 +00:00

73 lines
3.2 KiB
GDScript

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.")