Revamp goals as resources
This commit is contained in:
@@ -95,6 +95,7 @@ func _ready() -> void:
|
||||
_ensure_registered()
|
||||
cycle_progress_seconds = 0.0
|
||||
|
||||
GameState.currency_changed.connect(_on_currency_changed)
|
||||
GameState.generator_state_changed.connect(_on_generated_state_changed)
|
||||
|
||||
## Updates click cooldown/click grants and runs automatic production cycles.
|
||||
@@ -209,10 +210,16 @@ func get_buff_level(buff_id: StringName) -> int:
|
||||
_ensure_registered()
|
||||
return GameState.get_generator_buff_level(_generator_id, buff_id)
|
||||
|
||||
func is_buff_unlocked(buff_id: StringName) -> bool:
|
||||
_ensure_registered()
|
||||
return GameState.is_generator_buff_unlocked(_generator_id, buff_id)
|
||||
|
||||
func get_buff_cost(buff_id: StringName) -> BigNumber:
|
||||
var buff: GeneratorBuffData = _find_buff(buff_id)
|
||||
if buff == null:
|
||||
return BigNumber.from_float(0.0)
|
||||
if not is_buff_unlocked(buff.id):
|
||||
return BigNumber.from_float(0.0)
|
||||
|
||||
var level: int = get_buff_level(buff.id)
|
||||
return buff.get_cost_for_level(level)
|
||||
@@ -231,6 +238,9 @@ func can_buy_buff(buff_id: StringName) -> bool:
|
||||
if buff == null:
|
||||
return false
|
||||
|
||||
if not is_buff_unlocked(buff.id):
|
||||
return false
|
||||
|
||||
var current_level: int = get_buff_level(buff.id)
|
||||
if not buff.can_purchase_next_level(current_level):
|
||||
return false
|
||||
@@ -251,6 +261,9 @@ func buy_buff(buff_id: StringName) -> bool:
|
||||
if buff == null:
|
||||
return false
|
||||
|
||||
if not is_buff_unlocked(buff.id):
|
||||
return false
|
||||
|
||||
var current_level: int = get_buff_level(buff.id)
|
||||
if not buff.can_purchase_next_level(current_level):
|
||||
return false
|
||||
@@ -274,6 +287,8 @@ func is_buff_maxed(buff_id: StringName) -> bool:
|
||||
var buff: GeneratorBuffData = _find_buff(buff_id)
|
||||
if buff == null:
|
||||
return true
|
||||
if not is_buff_unlocked(buff.id):
|
||||
return false
|
||||
|
||||
return not buff.can_purchase_next_level(get_buff_level(buff.id))
|
||||
|
||||
@@ -438,6 +453,8 @@ func _get_multiplier_for_buff_kind(kind: GeneratorBuffData.BuffKind) -> float:
|
||||
continue
|
||||
if buff.kind != kind:
|
||||
continue
|
||||
if not is_buff_unlocked(buff.id):
|
||||
continue
|
||||
|
||||
multiplier *= buff.get_effect_multiplier(get_buff_level(buff.id))
|
||||
|
||||
@@ -494,7 +511,38 @@ func _register_buffs() -> void:
|
||||
if buff_id_text.is_empty():
|
||||
continue
|
||||
|
||||
GameState.register_generator_buff(_generator_id, StringName(buff_id_text), 0)
|
||||
var buff_id: StringName = StringName(buff_id_text)
|
||||
GameState.register_generator_buff(_generator_id, buff_id, 0)
|
||||
var persisted_level: int = GameState.get_generator_buff_level(_generator_id, buff_id)
|
||||
var starts_unlocked: bool = buff.unlocked or persisted_level > 0
|
||||
GameState.register_generator_buff_unlocked(_generator_id, buff_id, starts_unlocked)
|
||||
|
||||
_evaluate_buff_unlock_goals()
|
||||
|
||||
func _evaluate_buff_unlock_goals() -> void:
|
||||
for buff in get_buffs():
|
||||
_try_unlock_buff_from_goal(buff)
|
||||
|
||||
func _try_unlock_buff_from_goal(buff: GeneratorBuffData) -> void:
|
||||
if buff == null:
|
||||
return
|
||||
|
||||
var buff_id_text: String = String(buff.id).strip_edges()
|
||||
if buff_id_text.is_empty():
|
||||
return
|
||||
|
||||
var buff_id: StringName = StringName(buff_id_text)
|
||||
if GameState.is_generator_buff_unlocked(_generator_id, buff_id):
|
||||
return
|
||||
if not buff.has_unlock_goal():
|
||||
return
|
||||
if not buff.is_unlock_goal_met():
|
||||
return
|
||||
|
||||
GameState.set_generator_buff_unlocked(_generator_id, buff_id, true)
|
||||
|
||||
func _on_currency_changed(_changed_currency_id: StringName, _new_amount: BigNumber) -> void:
|
||||
_evaluate_buff_unlock_goals()
|
||||
|
||||
## Default unlocked state loaded from generator data.
|
||||
func _default_unlocked_state() -> bool:
|
||||
|
||||
Reference in New Issue
Block a user