Fix research
This commit is contained in:
60
core/research/research_panel.gd
Normal file
60
core/research/research_panel.gd
Normal file
@@ -0,0 +1,60 @@
|
||||
class_name ResearchPanel
|
||||
extends PanelContainer
|
||||
|
||||
const RESEARCH_ROW_SCENE: PackedScene = preload("res://core/research/research_row.tscn")
|
||||
|
||||
@onready var _title_label: Label = $ScrollContainer/VBoxContainer/TitleLabel
|
||||
@onready var _research_rows_container: VBoxContainer = $ScrollContainer/VBoxContainer/ResearchRows
|
||||
|
||||
var _game_state: LevelGameState
|
||||
var _research_rows: Dictionary = {}
|
||||
|
||||
func _ready() -> void:
|
||||
_game_state = find_parent("LevelGameState")
|
||||
if _game_state == null:
|
||||
push_error("ResearchPanel: Could not find LevelGameState parent")
|
||||
return
|
||||
|
||||
_game_state.research_xp_changed.connect(_on_research_xp_changed)
|
||||
_game_state.research_level_up.connect(_on_research_level_up)
|
||||
|
||||
_build_research_rows()
|
||||
_refresh_all()
|
||||
|
||||
func _build_research_rows() -> void:
|
||||
for child in _research_rows_container.get_children():
|
||||
child.queue_free()
|
||||
_research_rows.clear()
|
||||
|
||||
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)
|
||||
_research_rows[research.id] = row
|
||||
|
||||
func _refresh_all() -> void:
|
||||
for row in _research_rows.values():
|
||||
_refresh_row(row)
|
||||
|
||||
func _refresh_row(row: ResearchRow) -> void:
|
||||
var research_id: StringName = row.get_research_id()
|
||||
var xp: BigNumber = _game_state.get_research_xp(research_id)
|
||||
var level: int = _game_state.get_research_level(research_id)
|
||||
var research: ResearchData = _game_state.research_catalogue.get_research_by_id(research_id)
|
||||
|
||||
if research != null:
|
||||
var progress: float = research.get_xp_progress(xp)
|
||||
var multiplier: float = research.get_multiplier_for_level(level)
|
||||
var xp_current: BigNumber = xp.subtract(research.get_total_xp_for_level(level))
|
||||
var xp_needed: BigNumber = research.get_xp_required_for_level_big(level + 1)
|
||||
|
||||
row.update_display(level, progress, multiplier, xp_current, xp_needed)
|
||||
|
||||
func _on_research_xp_changed(research_id: StringName, _new_xp: BigNumber) -> void:
|
||||
if _research_rows.has(research_id):
|
||||
_refresh_row(_research_rows[research_id])
|
||||
|
||||
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])
|
||||
Reference in New Issue
Block a user