Add prestige graph
This commit is contained in:
69
core/prestige/prestige_buff_node.gd
Normal file
69
core/prestige/prestige_buff_node.gd
Normal file
@@ -0,0 +1,69 @@
|
||||
## A single node in the prestige buff graph.
|
||||
## Each node represents a permanent upgrade that persists across prestige resets and is purchased with prestige currency.
|
||||
class_name PrestigeBuffNode
|
||||
extends Resource
|
||||
|
||||
enum EffectType {
|
||||
CURRENCY_PRODUCTION_MULTIPLIER, ## Multiply currency output by x%
|
||||
BUILDING_CREATION_BONUS, ## When a building is created, increase currency gain by x%
|
||||
WORKER_THRESHOLD_MULTIPLIER, ## When 10+ workers are assigned to a building, increase currency gain by x%
|
||||
CARRYOVER_BUILDINGS, ## After prestige, start with some buildings and workers already assigned
|
||||
UNLOCK_AUTO_BUY_WORKER, ## Unlock option to auto-buy workers
|
||||
HOVER_SPEED_BOOST, ## Hovering over a place speeds up workers instead of clicking
|
||||
UNLOCK_BUILDING, ## Unlock a new building (generator)
|
||||
WORKER_PRODUCTIVITY, ## Increase worker productivity by x%
|
||||
RESEARCH_XP_MULTIPLIER, ## Increase research XP gain by x%
|
||||
}
|
||||
|
||||
## Unique node identifier.
|
||||
@export var id: StringName = &""
|
||||
## UI display label.
|
||||
@export var display_name: String = ""
|
||||
## Tooltip / description text.
|
||||
@export_multiline var description: String = ""
|
||||
## Icon shown in the graph UI.
|
||||
@export var icon: Texture2D
|
||||
## Prerequisite node IDs that must be unlocked before this node becomes available.
|
||||
@export var parent_ids: Array[StringName] = []
|
||||
## What kind of effect this buff provides.
|
||||
@export var effect_type: EffectType = EffectType.CURRENCY_PRODUCTION_MULTIPLIER
|
||||
## Magnitude of the effect (interpreted per effect type).
|
||||
@export var effect_value: float = 1.0
|
||||
## Target generator, building, or currency ID for type-specific effects. Empty means global.
|
||||
@export var target_id: StringName = &""
|
||||
## Prestige currency cost mantissa (combined with cost_exponent for BigNumber).
|
||||
@export var cost_mantissa: float = 1.0
|
||||
## Prestige currency cost exponent (combined with cost_mantissa for BigNumber).
|
||||
@export var cost_exponent: int = 0
|
||||
## Visual tier / row in the graph UI.
|
||||
@export var tier: int = 0
|
||||
## Visual column / horizontal position in the graph UI.
|
||||
@export var x_position: float = 0.0
|
||||
|
||||
|
||||
## Builds and returns the fixed prestige currency cost as a BigNumber.
|
||||
func get_cost() -> BigNumber:
|
||||
return BigNumber.new(cost_mantissa, cost_exponent)
|
||||
|
||||
|
||||
## Returns true if this node has any prerequisite parent nodes.
|
||||
func has_parents() -> bool:
|
||||
return not parent_ids.is_empty()
|
||||
|
||||
|
||||
## Checks whether all prerequisites are unlocked in the provided dictionary.
|
||||
## [param unlocked] maps node_id (StringName) → bool (true if unlocked).
|
||||
func all_parents_unlocked(unlocked: Dictionary) -> bool:
|
||||
for parent_id in parent_ids:
|
||||
if not bool(unlocked.get(parent_id, false)):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
## Returns true if this node has valid required data (non-empty id, positive cost).
|
||||
func is_valid() -> bool:
|
||||
if id == &"":
|
||||
return false
|
||||
if cost_mantissa <= 0.0:
|
||||
return false
|
||||
return true
|
||||
Reference in New Issue
Block a user