class_name PrestigePanel extends PanelContainer @onready var _total_value: Label = $MarginContainer/VBoxContainer/StatsGrid/TotalValue @onready var _pending_value: Label = $MarginContainer/VBoxContainer/StatsGrid/PendingValue @onready var _multiplier_value: Label = $MarginContainer/VBoxContainer/StatsGrid/MultiplierValue @onready var _basis_label: Label = $MarginContainer/VBoxContainer/StatsGrid/BasisValue @onready var _progress_bar: Node = $MarginContainer/VBoxContainer/PrestigeProgressBar @onready var _reset_button: Button = $MarginContainer/VBoxContainer/Buttons/ResetButton @onready var _save_button: Button = $MarginContainer/VBoxContainer/Buttons/SaveButton @onready var _confirm_dialog: ConfirmationDialog = $ConfirmDialog @onready var game_state: LevelGameState = find_parent("LevelGameState") var _is_waiting_for_confirm: bool = false func _ready() -> void: game_state.ready.connect(_on_game_state_ready) func _on_game_state_ready() -> void: var manager: PrestigeManager = _get_prestige_manager() manager.prestige_state_changed.connect(_on_prestige_state_changed) manager.prestige_performed.connect(_on_prestige_performed) game_state.currency_changed.connect(_on_currency_changed) _refresh_ui() func _on_reset_button_pressed() -> void: var manager: PrestigeManager = _get_prestige_manager() if not bool(manager.can_prestige()): return var pending: BigNumber = manager.calculate_pending_gain() var basis_label: String = String(manager.get_basis_label()) var basis_value: BigNumber = manager.get_basis_value_for_display() var confirm_message: String = "Reset this run for +%s prestige?\n\nThis resets currencies, owned generators, and buff levels. Lifetime totals and prestige are kept." % pending.to_string_suffix(2) confirm_message = "%s\n\nBased on %s: %s" % [confirm_message, basis_label, basis_value.to_string_suffix(2)] _confirm_dialog.dialog_text = confirm_message _is_waiting_for_confirm = true _confirm_dialog.popup_centered_ratio(0.4) func _on_save_button_pressed() -> void: if game_state: game_state.save_game() func _on_prestige_state_changed(_total: BigNumber, _pending: BigNumber) -> void: _refresh_ui() func _on_prestige_performed(_gain: BigNumber, _total: BigNumber) -> void: _refresh_ui() func _on_currency_changed(_currency_id: StringName, _new_amount: BigNumber) -> void: _refresh_ui() func _on_confirm_dialog_confirmed() -> void: if not _is_waiting_for_confirm: return _is_waiting_for_confirm = false var manager: PrestigeManager = _get_prestige_manager() if manager == null: return manager.perform_prestige() func _on_confirm_dialog_canceled() -> void: _is_waiting_for_confirm = false func _refresh_ui() -> void: var manager: PrestigeManager = _get_prestige_manager() if manager == null: visible = false return var total: BigNumber = manager.get_total_prestige() var pending: BigNumber = manager.calculate_pending_gain() var multiplier: float = float(manager.get_total_multiplier()) var basis_text: String = String(manager.get_basis_label()) var basis_value: BigNumber = manager.get_basis_value_for_display() _total_value.text = total.to_string_suffix(2) _pending_value.text = pending.to_string_suffix(2) _multiplier_value.text = "x%.2f" % multiplier _basis_label.text = "%s (%s)" % [basis_text, basis_value.to_string_suffix(2)] _reset_button.disabled = not bool(manager.can_prestige()) func _get_prestige_manager() -> PrestigeManager: return game_state.prestige_manager