Fix research xp generation
This commit is contained in:
@@ -8,6 +8,7 @@ const RESEARCH_ROW_SCENE: PackedScene = preload("res://core/research/research_ro
|
||||
|
||||
var _game_state: LevelGameState
|
||||
var _research_rows: Dictionary = {}
|
||||
var _active_research_id: StringName = &""
|
||||
|
||||
func _ready() -> void:
|
||||
_game_state = find_parent("LevelGameState")
|
||||
@@ -25,13 +26,17 @@ func _build_research_rows() -> void:
|
||||
for child in _research_rows_container.get_children():
|
||||
child.queue_free()
|
||||
_research_rows.clear()
|
||||
_active_research_id = &""
|
||||
|
||||
if _game_state.research_catalogue:
|
||||
for research in _game_state.research_catalogue.get_all_research():
|
||||
var row: ResearchRow = RESEARCH_ROW_SCENE.instantiate()
|
||||
_research_rows_container.add_child(row)
|
||||
row.setup(research)
|
||||
row.active_changed.connect(_on_research_active_changed.bind(research.id))
|
||||
_research_rows[research.id] = row
|
||||
|
||||
_load_active_research_state()
|
||||
|
||||
func _refresh_all() -> void:
|
||||
for row in _research_rows.values():
|
||||
@@ -58,3 +63,49 @@ func _on_research_xp_changed(research_id: StringName, _new_xp: BigNumber) -> voi
|
||||
func _on_research_level_up(research_id: StringName, _old_level: int, _new_level: int) -> void:
|
||||
if _research_rows.has(research_id):
|
||||
_refresh_row(_research_rows[research_id])
|
||||
|
||||
func _on_research_active_changed(is_active: bool, research_id: StringName) -> void:
|
||||
if is_active:
|
||||
if _active_research_id != &"" and _active_research_id != research_id:
|
||||
var existing_row: ResearchRow = _research_rows.get(_active_research_id)
|
||||
if existing_row != null:
|
||||
existing_row.set_active(false, false)
|
||||
_active_research_id = research_id
|
||||
_save_active_research_state()
|
||||
else:
|
||||
if _active_research_id == research_id:
|
||||
_active_research_id = &""
|
||||
_save_active_research_state()
|
||||
|
||||
func _load_active_research_state() -> void:
|
||||
if _game_state == null:
|
||||
return
|
||||
|
||||
var save_data: Dictionary = _game_state.get_external_save_data("research_active")
|
||||
if save_data.has("active_research_id"):
|
||||
var loaded_id: String = String(save_data.get("active_research_id", ""))
|
||||
if not loaded_id.is_empty():
|
||||
_active_research_id = StringName(loaded_id)
|
||||
var row: ResearchRow = _research_rows.get(_active_research_id)
|
||||
if row != null:
|
||||
row.set_active(true, false)
|
||||
|
||||
func _save_active_research_state() -> void:
|
||||
if _game_state == null:
|
||||
return
|
||||
|
||||
var save_data: Dictionary = {}
|
||||
if _active_research_id != &"":
|
||||
save_data["active_research_id"] = String(_active_research_id)
|
||||
_game_state.set_external_save_data("research_active", save_data)
|
||||
|
||||
func get_active_research_id() -> StringName:
|
||||
return _active_research_id
|
||||
|
||||
func is_research_active(research_id: StringName) -> bool:
|
||||
return _active_research_id == research_id
|
||||
|
||||
func activate_research(research_id: StringName) -> void:
|
||||
if _research_rows.has(research_id):
|
||||
var row: ResearchRow = _research_rows[research_id]
|
||||
row.set_active(true)
|
||||
|
||||
Reference in New Issue
Block a user