Add prestige
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user