Skip to content

ExperienceManager

Manages XP, levels and experience curves. Accessible via engine.exp.

typescript
import { ExperienceManager } from 'catalyst-engine';

Conceptual guide: Experience and levels.

Constructor

typescript
new ExperienceManager(
  config: IExperienceConfig,
  startLevel: number = 1,
  startXP: number = 0
)
ParameterTypeDefaultDescription
configIExperienceConfigExperience curve.
startLevelnumber1Initial level.
startXPnumber0Initial XP within the current level.

In normal use it is instantiated by the CatalystEngine with the default values only.

Properties

PropertyTypeDescription
currentLevel (getter)numberCurrent level.
currentXP (getter)numberXP accumulated in the current level.
onLevelUp((result: ILevelUpResult) => void) | nullCallback invoked on every level up.
onXPGained((currentXP: number, nextLevelXP: number) => void) | nullCallback invoked on every XP gain.

TIP

The callbacks are wired by the facade to the Event Bus. In game code, listen to the events LEVEL_UP / XP_GAINED instead of overriding the callbacks.

Methods

getXPRequirementForLevel()

typescript
getXPRequirementForLevel(level: number): number

Returns the XP needed to reach the given level (per-level threshold, not cumulative). Level ≤ 1 requires 0.

Curve typeResult
LINEARbaseXP × (level - 1)
EXPONENTIALround(baseXP × (level - 1) ^ multiplier)
CUSTOM_TABLEcustomTable[level], or Infinity if missing
typescript
engine.exp.getXPRequirementForLevel(3); // threshold for level 3

gainExperience()

typescript
gainExperience(amount: number): ILevelUpResult

Adds amount XP and gains all possible levels in one go, subtracting the thresholds and carrying over the excess. Invokes onLevelUp (if any level ups occurred) and then onXPGained.

Returns an ILevelUpResult:

typescript
const result = engine.exp.gainExperience(250);
// { levelsGained, currentLevel, excessXP, statsUpgraded }

Released under the MIT License.