fix buff unlock
This commit is contained in:
@@ -38,12 +38,16 @@ func _ready() -> void:
|
||||
_build_goal_rows()
|
||||
GameState.currency_changed.connect(_on_currency_changed)
|
||||
GameState.generator_state_changed.connect(_on_generator_state_changed)
|
||||
GameState.goal_completed.connect(_on_goal_completed)
|
||||
_refresh_ui()
|
||||
_refresh_ui.call_deferred()
|
||||
|
||||
func _on_currency_changed(_currency_id: StringName, _new_amount: BigNumber) -> void:
|
||||
_refresh_ui()
|
||||
|
||||
func _on_goal_completed(goal_id: StringName) -> void:
|
||||
_refresh_ui()
|
||||
|
||||
func _on_generator_state_changed(generator_id: StringName, _state: Dictionary) -> void:
|
||||
var generator_key: String = String(generator_id)
|
||||
if not generator_key.is_empty():
|
||||
@@ -58,7 +62,7 @@ func _load_goals() -> void:
|
||||
var scene_root: Node = get_tree().current_scene
|
||||
var search_root: Node = scene_root if scene_root != null else self
|
||||
var generator_nodes: Array[Node] = search_root.find_children("*", "CurrencyGenerator", true, false)
|
||||
var seen_goal_ids: Dictionary = {}
|
||||
|
||||
for generator_node in generator_nodes:
|
||||
var generator: CurrencyGenerator = generator_node as CurrencyGenerator
|
||||
if generator == null:
|
||||
@@ -69,23 +73,21 @@ func _load_goals() -> void:
|
||||
continue
|
||||
_generators_by_id[String(generator_id)] = generator
|
||||
|
||||
if generator.data == null:
|
||||
var seen_goal_ids: Dictionary = {}
|
||||
for goal in GameState.get_all_goals():
|
||||
if goal == null or not goal.has_id():
|
||||
continue
|
||||
if not generator.data.has_unlock_goal():
|
||||
continue
|
||||
|
||||
var resolved_goal: GoalData = generator.data.unlock_goal
|
||||
if resolved_goal == null:
|
||||
continue
|
||||
if not bool(resolved_goal.is_valid()):
|
||||
continue
|
||||
var goal_key: String = String(resolved_goal.get("id"))
|
||||
|
||||
var goal_key: String = String(goal.id)
|
||||
if seen_goal_ids.has(goal_key):
|
||||
push_warning("Goals debug UI: duplicate goal id '%s' skipped" % goal_key)
|
||||
continue
|
||||
|
||||
|
||||
var target_generator_id: StringName = _find_generator_for_goal(goal)
|
||||
if target_generator_id.is_empty():
|
||||
continue
|
||||
|
||||
seen_goal_ids[goal_key] = true
|
||||
_loaded_goals.append(GoalDefinition.new(generator_id, resolved_goal))
|
||||
_loaded_goals.append(GoalDefinition.new(target_generator_id, goal))
|
||||
|
||||
func _build_goal_rows() -> void:
|
||||
_rows_by_goal_id.clear()
|
||||
@@ -188,10 +190,9 @@ func _is_goal_met(goal: GoalDefinition) -> bool:
|
||||
return bool(goal.goal.is_met())
|
||||
|
||||
func _is_goal_completed(goal: GoalDefinition) -> bool:
|
||||
return (
|
||||
GameState.is_generator_unlocked(goal.target_generator_id)
|
||||
and GameState.is_generator_available(goal.target_generator_id)
|
||||
)
|
||||
if goal.goal == null or goal.goal.id.is_empty():
|
||||
return false
|
||||
return GameState.is_goal_completed(goal.goal.id)
|
||||
|
||||
func _on_unlock_pressed(goal_id: StringName) -> void:
|
||||
var row: GoalRow = _rows_by_goal_id.get(String(goal_id))
|
||||
@@ -276,6 +277,16 @@ func _get_generator_for_goal(goal: GoalDefinition) -> CurrencyGenerator:
|
||||
|
||||
return _generators_by_id.get(key) as CurrencyGenerator
|
||||
|
||||
func _find_generator_for_goal(goal: GoalData) -> StringName:
|
||||
for generator_id in _generators_by_id.keys():
|
||||
var generator: CurrencyGenerator = _generators_by_id[generator_id]
|
||||
if generator == null or generator.data == null:
|
||||
continue
|
||||
if generator.data.has_unlock_goal():
|
||||
if String(generator.data.get_unlock_goal_id()) == String(goal.id):
|
||||
return StringName(generator_id)
|
||||
return &""
|
||||
|
||||
func _is_manual_goal_generator(generator: CurrencyGenerator) -> bool:
|
||||
if generator == null:
|
||||
return false
|
||||
@@ -311,6 +322,9 @@ func _get_requirements_text(goal: GoalDefinition) -> String:
|
||||
required_amount.to_string_suffix(2)
|
||||
]
|
||||
)
|
||||
|
||||
if parts.is_empty():
|
||||
return "No requirements"
|
||||
return " | ".join(parts)
|
||||
|
||||
func _currency_label(currency_id: StringName) -> String:
|
||||
|
||||
Reference in New Issue
Block a user