Fix research
This commit is contained in:
@@ -39,6 +39,9 @@ const HUGE_COST_EXPONENT: int = 1000000
|
||||
## Reference to generator UI
|
||||
@export var info_generator_container: GeneratorPanel
|
||||
|
||||
## Reference to research tracker
|
||||
var research_tracker: Node = null
|
||||
|
||||
## True while the pointer is inside the generator Area2D.
|
||||
var _mouse_entered: bool = false
|
||||
## Time left until next click/hover grant is allowed.
|
||||
@@ -105,6 +108,8 @@ func _ready() -> void:
|
||||
game_state.currency_changed.connect(_on_currency_changed)
|
||||
game_state.generator_state_changed.connect(_on_generated_state_changed)
|
||||
game_state.goal_completed.connect(_on_goal_completed)
|
||||
# Don't cache research_tracker here - it may not be initialized yet
|
||||
# Access it lazily when needed instead
|
||||
|
||||
_ensure_registered()
|
||||
|
||||
@@ -142,6 +147,14 @@ func _grant_cycle_income(cycle_count: int) -> void:
|
||||
var produced: BigNumber = BigNumber.from_float(per_cycle).multiply(BigNumber.from_float(float(cycle_count)))
|
||||
_add_currency(produced)
|
||||
production_tick.emit(produced, cycle_count, owned)
|
||||
|
||||
if data != null and data.research_data != null:
|
||||
var amount_float: float = produced.mantissa * pow(10.0, float(produced.exponent))
|
||||
var research_xp_amount: BigNumber = BigNumber.from_float(data.research_data.xp_per_currency_produced * amount_float)
|
||||
if game_state != null and research_xp_amount.mantissa > 0.0:
|
||||
var tracker: ResearchXPTracker = game_state.research_tracker as ResearchXPTracker
|
||||
if tracker:
|
||||
tracker.add_xp_with_buffs(data.research_data.id, research_xp_amount)
|
||||
|
||||
## Convenience helper for the next single-unit purchase cost.
|
||||
func get_next_cost() -> BigNumber:
|
||||
@@ -337,7 +350,14 @@ func get_automatic_production_multiplier() -> float:
|
||||
return _get_multiplier_for_buff_kind(GeneratorBuffData.BuffKind.AUTO_PRODUCTION_MULTIPLIER)
|
||||
|
||||
func get_effective_auto_run_multiplier() -> float:
|
||||
return run_multiplier * get_automatic_production_multiplier() * _get_prestige_multiplier()
|
||||
return run_multiplier * get_research_multiplier() * get_automatic_production_multiplier() * _get_prestige_multiplier()
|
||||
|
||||
func get_research_multiplier() -> float:
|
||||
if data == null or data.research_data == null:
|
||||
return 1.0
|
||||
if game_state == null:
|
||||
return 1.0
|
||||
return game_state.get_research_multiplier(data.research_data.id)
|
||||
|
||||
func reset_runtime_state_for_prestige() -> void:
|
||||
_is_registered = false
|
||||
@@ -383,7 +403,18 @@ func _try_grant_click_currency() -> void:
|
||||
if _remaining_click_cooldown_seconds > 0.0:
|
||||
return
|
||||
|
||||
_add_currency(_get_click_value())
|
||||
var click_value: BigNumber = _get_click_value()
|
||||
_add_currency(click_value)
|
||||
|
||||
# Grant research XP for manual clicks
|
||||
if data.research_data != null and click_value.mantissa > 0.0:
|
||||
var amount_float: float = click_value.mantissa * pow(10.0, float(click_value.exponent))
|
||||
var research_xp_amount: BigNumber = BigNumber.from_float(data.research_data.xp_per_currency_produced * amount_float)
|
||||
if game_state != null and research_xp_amount.mantissa > 0.0:
|
||||
var tracker: ResearchXPTracker = game_state.research_tracker as ResearchXPTracker
|
||||
if tracker:
|
||||
tracker.add_xp_with_buffs(data.research_data.id, research_xp_amount)
|
||||
|
||||
_remaining_click_cooldown_seconds = _get_click_cooldown_seconds()
|
||||
|
||||
## Resolves click reward from data.
|
||||
|
||||
@@ -31,6 +31,8 @@ extends Resource
|
||||
@export var click_exponent: int = 0
|
||||
@export var click_cooldown_seconds: float = 0.2
|
||||
|
||||
@export var research_data: ResearchData
|
||||
|
||||
func has_unlock_goal() -> bool:
|
||||
if unlock_goal == null:
|
||||
return false
|
||||
|
||||
@@ -5,6 +5,7 @@ enum BuffKind {
|
||||
AUTO_PRODUCTION_MULTIPLIER,
|
||||
MANUAL_CLICK_MULTIPLIER,
|
||||
RESOURCE_PURCHASE,
|
||||
RESEARCH_XP_MULTIPLIER,
|
||||
}
|
||||
|
||||
const HUGE_EXPONENT: int = 1000000
|
||||
@@ -24,6 +25,10 @@ const HUGE_EXPONENT: int = 1000000
|
||||
@export var base_effect: float = 1.0
|
||||
@export var effect_increment: float = 0.1
|
||||
|
||||
@export_group("Research XP Multiplier")
|
||||
@export var research_target_id: StringName = &""
|
||||
@export var xp_multiplier_per_level: float = 0.1
|
||||
|
||||
@export_group("Cost")
|
||||
@export var cost_currency: Currency
|
||||
@export var base_cost_mantissa: float = 10.0
|
||||
@@ -133,7 +138,9 @@ func get_effect_description(level: int) -> String:
|
||||
BuffKind.AUTO_PRODUCTION_MULTIPLIER, BuffKind.MANUAL_CLICK_MULTIPLIER:
|
||||
return "x%.2f" % get_effect_multiplier(safe_level)
|
||||
BuffKind.RESOURCE_PURCHASE:
|
||||
return "+%s" % get_resource_purchase_amount_for_level(safe_level).to_string_suffix(2)
|
||||
return "+%s" % get_resource_purchase_amount_for_level(level).to_string_suffix(2)
|
||||
BuffKind.RESEARCH_XP_MULTIPLIER:
|
||||
return "+%.0f%% XP" % ((get_effect_multiplier(safe_level) - 1.0) * 100)
|
||||
_:
|
||||
return "-"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user