Fix research
This commit is contained in:
48
core/research/research_xp_tracker.gd
Normal file
48
core/research/research_xp_tracker.gd
Normal file
@@ -0,0 +1,48 @@
|
||||
class_name ResearchXPTracker
|
||||
extends Node
|
||||
|
||||
@export var game_state: LevelGameState
|
||||
|
||||
signal research_xp_changed(research_id: StringName, new_xp: BigNumber)
|
||||
signal research_level_up(research_id: StringName, old_level: int, new_level: int)
|
||||
|
||||
func add_xp_with_buffs(research_id: StringName, base_xp: BigNumber) -> BigNumber:
|
||||
if game_state == null:
|
||||
return BigNumber.new(0.0, 0)
|
||||
|
||||
var buff_multiplier: float = game_state.get_research_xp_multiplier(research_id)
|
||||
var multiplier_bn: BigNumber = BigNumber.from_float(buff_multiplier)
|
||||
var actual_xp: BigNumber = base_xp.multiply(multiplier_bn)
|
||||
|
||||
game_state.add_research_xp(research_id, actual_xp)
|
||||
|
||||
return actual_xp
|
||||
|
||||
func _on_generator_produced(generator_id: StringName, _amount: Variant) -> void:
|
||||
var research: ResearchData = _get_research_for_generator(generator_id)
|
||||
if research == null:
|
||||
return
|
||||
|
||||
var research_catalogue: ResearchCatalogue = game_state.research_catalogue
|
||||
if research_catalogue == null:
|
||||
return
|
||||
|
||||
research = research_catalogue.get_research_by_generator_id(generator_id)
|
||||
if research == null:
|
||||
return
|
||||
|
||||
var amount_big: BigNumber = _amount
|
||||
var amount_float: float = amount_big.mantissa * pow(10.0, float(amount_big.exponent))
|
||||
if amount_float <= 0.0:
|
||||
return
|
||||
|
||||
var base_xp: BigNumber = BigNumber.from_float(research.xp_per_currency_produced * amount_float)
|
||||
if base_xp.mantissa <= 0.0:
|
||||
return
|
||||
|
||||
add_xp_with_buffs(research.id, base_xp)
|
||||
|
||||
func _get_research_for_generator(generator_id: StringName) -> ResearchData:
|
||||
if game_state == null or game_state.research_catalogue == null:
|
||||
return null
|
||||
return game_state.research_catalogue.get_research_by_generator_id(generator_id)
|
||||
Reference in New Issue
Block a user