Add prestige

This commit is contained in:
2026-03-22 10:50:37 +01:00
parent bb1a96b63c
commit c914b0c590
15 changed files with 1032 additions and 7 deletions

View File

@@ -87,6 +87,8 @@ var cycle_progress_seconds: float = 0.0
var _generator_id: StringName = &""
## Prevents duplicate state registration in GameState.
var _is_registered: bool = false
## Prevents re-entrant registration while GameState emits synchronous callbacks.
var _is_registering: bool = false
## Resolves and registers this generator state before gameplay updates.
func _ready() -> void:
@@ -127,7 +129,7 @@ func _grant_cycle_income(cycle_count: int) -> void:
if data == null or cycle_count <= 0:
return
var effective_run_multiplier: float = run_multiplier * get_automatic_production_multiplier()
var effective_run_multiplier: float = get_effective_auto_run_multiplier()
var per_cycle: float = data.production_per_cycle(owned, effective_run_multiplier, purchased_count)
if per_cycle <= 0.0:
return
@@ -308,6 +310,19 @@ func is_buff_maxed(buff_id: StringName) -> bool:
func get_automatic_production_multiplier() -> float:
return _get_multiplier_for_buff_kind(GeneratorBuffData.BuffKind.AUTO_PRODUCTION_MULTIPLIER)
func get_effective_auto_run_multiplier() -> float:
return run_multiplier * get_automatic_production_multiplier() * _get_prestige_multiplier()
func reset_runtime_state_for_prestige() -> void:
_is_registered = false
_is_registering = false
cycle_progress_seconds = 0.0
_remaining_click_cooldown_seconds = 0.0
_ensure_registered()
_evaluate_generator_unlock_goal(false)
_evaluate_buff_unlock_goals()
visible = is_available_to_player()
func get_manual_click_multiplier() -> float:
return _get_multiplier_for_buff_kind(GeneratorBuffData.BuffKind.MANUAL_CLICK_MULTIPLIER)
@@ -369,6 +384,21 @@ func _get_click_cooldown_seconds() -> float:
func _grants_click_while_hovering() -> bool:
return grants_click_while_hovering
func _get_prestige_multiplier() -> float:
var manager: Node = get_node_or_null("/root/PrestigeManager")
if manager == null:
return 1.0
if not manager.has_method("get_total_multiplier"):
return 1.0
var raw_multiplier: Variant = manager.call("get_total_multiplier")
if raw_multiplier is float:
return maxf(raw_multiplier, 0.0)
if raw_multiplier is int:
return maxf(float(raw_multiplier), 0.0)
return 1.0
## Returns this generator's resolved state id.
func get_generator_id() -> StringName:
_ensure_registered()
@@ -522,7 +552,7 @@ func _resolve_generator_id() -> StringName:
## Ensures this generator has a state entry in GameState.
func _ensure_registered() -> void:
if _is_registered:
if _is_registered or _is_registering:
return
if _generator_id == &"":
@@ -530,6 +560,7 @@ func _ensure_registered() -> void:
if _generator_id == &"":
return
_is_registering = true
GameState.register_generator(
_generator_id,
_default_unlocked_state(),
@@ -538,6 +569,7 @@ func _ensure_registered() -> void:
)
_register_buffs()
_is_registered = true
_is_registering = false
func _register_buffs() -> void:
for buff in get_buffs():
@@ -632,4 +664,4 @@ func _on_area_2d_mouse_exited() -> void:
func _on_generated_state_changed(generator_id: StringName, _state: Dictionary) -> void:
if generator_id == _generator_id:
visible = true
visible = is_available_to_player()