whittler/scenes/scripts/ui_control.gd
2026-01-28 13:22:04 +00:00

147 lines
4.9 KiB
GDScript

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