extends Control @onready var currency_label: Label = %CurrencyLabel @onready var wood_label: Label = %WoodLabel @onready var stock_label: Label = %StockLabel @onready var modifiers_label: Label = %ModifiersLabel @onready var timer_label : Label = %Timer @onready var game_complete_screen : Panel = %GameCompleted @onready var continue_button : TextureButton = %ContinueButton var game_timer : Timer var elapsed_time := 0.0 func _ready(): populate_modifiers_display() populate_unlock_buttons() update_currency_label() update_wood_label() update_stock_label() game_timer = Timer.new() game_timer.wait_time = 1.0 game_timer.one_shot = false game_timer.autostart = true add_child(game_timer) game_timer.timeout.connect(_on_timer_tick) currency_label.add_theme_color_override("font_color", Global.money_color) wood_label.add_theme_color_override("font_color", Global.wood_color) stock_label.add_theme_color_override("font_color", Global.stock_color) Inventory.currency_changed.connect(_on_currency_changed) Inventory.currency_added.connect(spawn_currency_increase) Inventory.wood_changed.connect(_on_currency_changed) Inventory.wood_added.connect(spawn_wood_increase) Inventory.stock_added.connect(spawn_stock_increase) Inventory.stock_changed.connect(_on_currency_changed) Unlocks.item_unlocked.connect(populate_unlock_buttons) GameManager.currency_goal_met.connect(_on_currency_goal_met) # get_tree().paused = true func update_currency_label(): currency_label.text = Global.currency_symbol + " " + str(int(Inventory.get_currency())) func update_wood_label(): wood_label.text = "W: " + str(int(Inventory.get_wood())) func update_stock_label(): stock_label.text = "S: " + str(int(Inventory.get_stock())) func spawn_currency_increase(value, _total): spawn_inventory_change_value(value, _total, "+", Global.currency_symbol, Global.money_color) func spawn_wood_increase(value, _total): spawn_inventory_change_value(value, _total, "+", "", Global.wood_color) func spawn_stock_increase(value, _total): spawn_inventory_change_value(value, _total, "+", "", Global.stock_color) func spawn_inventory_change_value(value, _total, display_sign: String = "+", symbol: String = "", label_color: Color = Color.WHITE): var float_label = Label.new() float_label.text = display_sign + symbol + str(int(abs(value))) float_label.add_theme_font_size_override("font_size", 16) float_label.modulate = label_color # Add random offset around center var random_x = randf_range(-60, 30) var random_y = randf_range(-40, 20) float_label.position = Vector2(random_x, random_y) add_child(float_label) # Animate the label var tween = create_tween() tween.set_parallel(true) # Run both animations simultaneously # Move up tween.tween_property(float_label, "position:y", float_label.position.y - 50, 1.0) # Fade out tween.tween_property(float_label, "modulate:a", 0.0, 1.0) # Remove from scene when done tween.chain().tween_callback(float_label.queue_free) func populate_unlock_buttons(): var unlocks_container = $UnlockContainer for child in unlocks_container.get_children(): child.free() for unlock_data in Unlocks.unlocks.unlocks: var unlock_button_scene = load("res://scenes/button.tscn") var unlock_button = unlock_button_scene.instantiate() unlocks_container.add_child(unlock_button) unlock_button.setup(unlock_data) func populate_modifiers_display(): var modifiers_text = "" modifiers_text = modifiers_text + "Sale Price: " + Global.currency_symbol + str(Unlocks.get_sale_price_per_item()) + "\n" modifiers_text = modifiers_text + "Items Produced Per Tick: " + str(Unlocks.get_items_produced_per_tick()) + "\n" modifiers_text = modifiers_text + "Wood per Click: " + str(Unlocks.get_wood_per_click()) + "\n\n" modifiers_text = modifiers_text + "Demand: " + str(int(Unlocks.get_sale_demand())) + "\n\n" modifiers_text = modifiers_text + "Current Modifiers:\n" for key in Unlocks.current_modifiers.keys(): var display_name = key.replace("_modifier", "").replace("_", " ").capitalize() var percentage = int((Unlocks.current_modifiers[key] - 1.0) * 100) modifiers_text += "%s: %s%%\n" % [display_name, str(percentage)] modifiers_label.text = modifiers_text func _on_currency_changed(_value): populate_modifiers_display() update_currency_label() update_wood_label() update_stock_label() if Inventory.get_currency() >= Global.target_currency: game_timer.stop() func _on_timer_tick(): elapsed_time += 1 timer_label.text = format_time(elapsed_time) func _on_currency_goal_met(): Log.pr("Currency goal met!") get_tree().paused = true game_complete_screen.visible = true func format_time(seconds: float) -> String: var total_seconds := int(seconds) var hours := total_seconds / 3600 var minutes := (total_seconds % 3600) / 60 var secs := total_seconds % 60 return "%02d:%02d:%02d" % [hours, minutes, secs] func _on_continue_button_pressed() -> void: Global.game_continue_pressed = true game_complete_screen.visible = false get_tree().paused = false