Decouple everything from globals
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
class_name PrestigeManager
|
||||
extends Node
|
||||
|
||||
signal prestige_state_changed(total_prestige: BigNumber, pending_gain: BigNumber)
|
||||
@@ -23,6 +24,7 @@ const MULTIPLIER_MODE_ADDITIVE: int = 0
|
||||
const MULTIPLIER_MODE_MULTIPLICATIVE_POWER: int = 1
|
||||
|
||||
@export var config: Resource
|
||||
@export var game_state: LevelGameState
|
||||
|
||||
var total_prestige_earned: BigNumber = BigNumber.from_float(0.0)
|
||||
var current_prestige_unspent: BigNumber = BigNumber.from_float(0.0)
|
||||
@@ -33,13 +35,17 @@ var last_reset_time: int = 0
|
||||
|
||||
func _ready() -> void:
|
||||
if config == null:
|
||||
config = load("res://docs/gyms/prestige/primary_prestige.tres") as Resource
|
||||
config = load("res://docs/gyms/tiny_sword/prestige/primary_prestige.tres") as Resource
|
||||
|
||||
if not _is_config_valid():
|
||||
push_warning("PrestigeManager has invalid or missing config; prestige is disabled.")
|
||||
return
|
||||
|
||||
var loaded_state: Dictionary = GameState.get_external_save_data(SAVE_KEY)
|
||||
if game_state == null:
|
||||
push_warning("PrestigeManager: game_state reference is not set.")
|
||||
return
|
||||
|
||||
var loaded_state: Dictionary = game_state.get_external_save_data(SAVE_KEY)
|
||||
if loaded_state.is_empty():
|
||||
_initialize_run_tracking_from_current_state()
|
||||
else:
|
||||
@@ -47,7 +53,7 @@ func _ready() -> void:
|
||||
_validate_loaded_run_tracking()
|
||||
_save_state_to_game_state()
|
||||
|
||||
GameState.currency_changed.connect(_on_currency_changed)
|
||||
game_state.currency_changed.connect(_on_currency_changed)
|
||||
prestige_state_changed.emit(get_total_prestige(), calculate_pending_gain())
|
||||
prestige_threshold_changed.emit(get_next_prestige_threshold())
|
||||
|
||||
@@ -134,13 +140,16 @@ func perform_prestige() -> bool:
|
||||
prestige_resets_count += 1
|
||||
last_reset_time = Time.get_unix_time_from_system()
|
||||
|
||||
GameState.reset_for_prestige(true, false)
|
||||
if game_state:
|
||||
game_state.reset_for_prestige(true, false)
|
||||
_reset_all_buff_levels()
|
||||
_reinitialize_generators_after_prestige_reset()
|
||||
GameState.emit_currency_changed_for_all()
|
||||
if game_state:
|
||||
game_state.emit_currency_changed_for_all()
|
||||
_initialize_run_tracking_from_current_state()
|
||||
_save_state_to_game_state()
|
||||
GameState.save_game()
|
||||
if game_state:
|
||||
game_state.save_game()
|
||||
|
||||
var total: BigNumber = get_total_prestige()
|
||||
var next_threshold: BigNumber = get_next_prestige_threshold()
|
||||
@@ -261,9 +270,12 @@ func _get_basis_value() -> BigNumber:
|
||||
if source_currency_id == &"":
|
||||
return BigNumber.from_float(0.0)
|
||||
|
||||
if game_state == null:
|
||||
return BigNumber.from_float(0.0)
|
||||
|
||||
match _get_config_int("basis", BASIS_LIFETIME_TOTAL):
|
||||
BASIS_RUN_TOTAL:
|
||||
var lifetime_now: BigNumber = GameState.get_total_currency_acquired_by_id(source_currency_id)
|
||||
var lifetime_now: BigNumber = game_state.get_total_currency_acquired_by_id(source_currency_id)
|
||||
var run_total: BigNumber = lifetime_now.subtract(run_start_total_source_currency)
|
||||
if run_total.mantissa < 0.0:
|
||||
return BigNumber.from_float(0.0)
|
||||
@@ -271,7 +283,7 @@ func _get_basis_value() -> BigNumber:
|
||||
BASIS_RUN_MAX:
|
||||
return _copy_big_number(run_peak_source_currency)
|
||||
_:
|
||||
return _copy_big_number(GameState.get_total_currency_acquired_by_id(source_currency_id))
|
||||
return _copy_big_number(game_state.get_total_currency_acquired_by_id(source_currency_id))
|
||||
|
||||
func _initialize_run_tracking_from_current_state() -> void:
|
||||
if config == null:
|
||||
@@ -283,8 +295,13 @@ func _initialize_run_tracking_from_current_state() -> void:
|
||||
run_peak_source_currency = BigNumber.from_float(0.0)
|
||||
return
|
||||
|
||||
run_start_total_source_currency = _copy_big_number(GameState.get_total_currency_acquired_by_id(source_currency_id))
|
||||
run_peak_source_currency = _copy_big_number(GameState.get_currency_amount_by_id(source_currency_id))
|
||||
if game_state == null:
|
||||
run_start_total_source_currency = BigNumber.from_float(0.0)
|
||||
run_peak_source_currency = BigNumber.from_float(0.0)
|
||||
return
|
||||
|
||||
run_start_total_source_currency = _copy_big_number(game_state.get_total_currency_acquired_by_id(source_currency_id))
|
||||
run_peak_source_currency = _copy_big_number(game_state.get_currency_amount_by_id(source_currency_id))
|
||||
_save_state_to_game_state()
|
||||
|
||||
func _validate_loaded_run_tracking() -> void:
|
||||
@@ -297,11 +314,14 @@ func _validate_loaded_run_tracking() -> void:
|
||||
run_peak_source_currency = BigNumber.from_float(0.0)
|
||||
return
|
||||
|
||||
var current_currency: BigNumber = GameState.get_currency_amount_by_id(source_currency_id)
|
||||
if game_state == null:
|
||||
return
|
||||
|
||||
var current_currency: BigNumber = game_state.get_currency_amount_by_id(source_currency_id)
|
||||
if current_currency.is_greater_than(run_peak_source_currency):
|
||||
run_peak_source_currency = _copy_big_number(current_currency)
|
||||
|
||||
var lifetime_now: BigNumber = GameState.get_total_currency_acquired_by_id(source_currency_id)
|
||||
var lifetime_now: BigNumber = game_state.get_total_currency_acquired_by_id(source_currency_id)
|
||||
if run_start_total_source_currency.is_greater_than(lifetime_now):
|
||||
run_start_total_source_currency = _copy_big_number(lifetime_now)
|
||||
|
||||
@@ -327,12 +347,16 @@ func _deserialize_state(raw_state: Dictionary) -> void:
|
||||
current_prestige_unspent = _copy_big_number(total_prestige_earned)
|
||||
|
||||
func _save_state_to_game_state() -> void:
|
||||
GameState.set_external_save_data(SAVE_KEY, _serialize_state())
|
||||
if game_state:
|
||||
game_state.set_external_save_data(SAVE_KEY, _serialize_state())
|
||||
|
||||
func _reset_all_buff_levels() -> void:
|
||||
for buff_id in GameState._buff_levels.keys():
|
||||
GameState.set_buff_level(buff_id, 0)
|
||||
GameState.set_buff_unlocked(buff_id, false)
|
||||
if game_state == null:
|
||||
return
|
||||
|
||||
for buff_id in game_state._buff_levels.keys():
|
||||
game_state.set_buff_level(buff_id, 0)
|
||||
game_state.set_buff_unlocked(buff_id, false)
|
||||
|
||||
func _reinitialize_generators_after_prestige_reset() -> void:
|
||||
var scene_root: Node = get_tree().current_scene
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
class_name PrestigePanel
|
||||
extends PanelContainer
|
||||
|
||||
@export var game_state: LevelGameState
|
||||
|
||||
@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
|
||||
@@ -18,8 +20,8 @@ func _ready() -> void:
|
||||
manager.prestige_state_changed.connect(_on_prestige_state_changed)
|
||||
if manager != null and manager.has_signal("prestige_performed"):
|
||||
manager.prestige_performed.connect(_on_prestige_performed)
|
||||
if not GameState.currency_changed.is_connected(_on_currency_changed):
|
||||
GameState.currency_changed.connect(_on_currency_changed)
|
||||
if game_state and not game_state.currency_changed.is_connected(_on_currency_changed):
|
||||
game_state.currency_changed.connect(_on_currency_changed)
|
||||
|
||||
_refresh_ui()
|
||||
|
||||
@@ -33,7 +35,7 @@ func _on_reset_button_pressed() -> void:
|
||||
|
||||
var pending: BigNumber = manager.call("calculate_pending_gain")
|
||||
var source_currency_id: StringName = manager.call("get_source_currency_id")
|
||||
var source_currency_name: String = GameState.get_currency_name(source_currency_id)
|
||||
var source_currency_name: String = game_state.get_currency_name(source_currency_id) if game_state else ""
|
||||
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)
|
||||
if not source_currency_name.is_empty():
|
||||
confirm_message = "%s\n\nBased on %s progression." % [confirm_message, source_currency_name]
|
||||
@@ -43,7 +45,8 @@ func _on_reset_button_pressed() -> void:
|
||||
_confirm_dialog.popup_centered_ratio(0.4)
|
||||
|
||||
func _on_save_button_pressed() -> void:
|
||||
GameState.save_game()
|
||||
if game_state:
|
||||
game_state.save_game()
|
||||
|
||||
func _on_prestige_state_changed(_total: BigNumber, _pending: BigNumber) -> void:
|
||||
_refresh_ui()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[ext_resource type="Script" uid="uid://dmsmmgtbrul1t" path="res://core/prestige/prestige_panel.gd" id="1_panel"]
|
||||
[ext_resource type="PackedScene" path="res://core/prestige/prestige_progress_bar.tscn" id="2_7b6yg"]
|
||||
[ext_resource type="Resource" uid="uid://dwmfvmusfskk6" path="res://docs/gyms/prestige/primary_prestige.tres" id="3_r8h5p"]
|
||||
[ext_resource type="Resource" uid="uid://dwmfvmusfskk6" path="res://docs/gyms/tiny_sword/prestige/primary_prestige.tres" id="3_r8h5p"]
|
||||
|
||||
[node name="PrestigePanel" type="PanelContainer" unique_id=789062217]
|
||||
offset_right = 420.0
|
||||
|
||||
Reference in New Issue
Block a user