Fix research
This commit is contained in:
74
core/research/research_row.gd
Normal file
74
core/research/research_row.gd
Normal file
@@ -0,0 +1,74 @@
|
||||
class_name ResearchRow
|
||||
extends HBoxContainer
|
||||
|
||||
@onready var _name_label: Label = $VBoxContainer/NameLabel
|
||||
@onready var _level_label: Label = $VBoxContainer/HBoxContainer/LevelLabel
|
||||
@onready var _progress_bar: ProgressBar = $VBoxContainer/HBoxContainer/ProgressBar
|
||||
@onready var _multiplier_label: Label = $VBoxContainer/HBoxContainer/MultiplierLabel
|
||||
@onready var _buff_label: Label = $VBoxContainer/HBoxContainer/BuffLabel
|
||||
|
||||
var _research: ResearchData
|
||||
var _game_state: LevelGameState
|
||||
|
||||
func _ready() -> void:
|
||||
_game_state = find_parent("LevelGameState")
|
||||
if _game_state == null:
|
||||
push_error("ResearchRow: 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)
|
||||
|
||||
func setup(research: ResearchData) -> void:
|
||||
_research = research
|
||||
if _name_label:
|
||||
_name_label.text = research.name
|
||||
|
||||
func get_research_id() -> StringName:
|
||||
if _research == null:
|
||||
return &""
|
||||
return _research.id
|
||||
|
||||
func update_display(level: int, progress: float, multiplier: float, xp_current: BigNumber, xp_needed: BigNumber) -> void:
|
||||
if _level_label:
|
||||
_level_label.text = "Level %d" % level
|
||||
|
||||
if _progress_bar:
|
||||
_progress_bar.value = progress * 100
|
||||
|
||||
if _multiplier_label:
|
||||
_multiplier_label.text = "+%d%%" % int((multiplier - 1.0) * 100)
|
||||
|
||||
if _buff_label and _research != null:
|
||||
if not _research.associated_buff_id.is_empty():
|
||||
var buff: GeneratorBuffData = _game_state.get_buff(_research.associated_buff_id)
|
||||
if buff != null and _game_state.is_buff_active(buff.id):
|
||||
var buff_level: int = _game_state.get_buff_level(buff.id)
|
||||
var effect: float = buff.get_effect_multiplier(buff_level) - 1.0
|
||||
_buff_label.text = "%s: +%d%% XP" % [buff.text, int(effect * 100)]
|
||||
else:
|
||||
_buff_label.text = ""
|
||||
else:
|
||||
_buff_label.text = ""
|
||||
|
||||
func _on_research_xp_changed(research_id: StringName, _new_xp: BigNumber) -> void:
|
||||
if _research != null and research_id == _research.id:
|
||||
_update_from_state()
|
||||
|
||||
func _on_research_level_up(research_id: StringName, _old_level: int, _new_level: int) -> void:
|
||||
if _research != null and research_id == _research.id:
|
||||
_update_from_state()
|
||||
|
||||
func _update_from_state() -> void:
|
||||
if _research == null or _game_state == null:
|
||||
return
|
||||
|
||||
var xp: BigNumber = _game_state.get_research_xp(_research.id)
|
||||
var level: int = _game_state.get_research_level(_research.id)
|
||||
|
||||
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)
|
||||
|
||||
update_display(level, progress, multiplier, xp_current, xp_needed)
|
||||
Reference in New Issue
Block a user