phaser3-rex-plugins
Version:
204 lines (184 loc) • 4.74 kB
TypeScript
import EventEmitter from '../../utils/eventemitter/EventEmitter';
export default LevelCounter;
declare namespace LevelCounter {
/**
* Experience table type.
*/
type TableType = ((level: number) => number) |
number[] |
{ [level: number]: number }
/**
* Configuration options for creating a LevelCounter.
*/
interface IConfig {
/**
* Experience table.
*/
table: TableType,
/**
* Maximum allowed level.
*/
maxLevel?: number,
/**
* Initial experience value.
*/
exp?: number,
}
/**
* Callback fired when level increases.
*
* @param level - New level.
* @param fromExp - Previous experience value.
* @param toExp - Current experience value.
* @param levelStartExp - Start experience of this level.
* @param levelEndExp - End experience of this level.
*/
type LevelUpCallback = (
level: number,
fromExp: number,
toExp: number,
levelStartExp: number,
levelEndExp: number
) => void;
}
/**
* Experience and level progression helper.
*/
declare class LevelCounter extends EventEmitter {
/**
* Create a LevelCounter instance.
*
* @param config - Configuration options.
*/
constructor(config: LevelCounter.IConfig);
/**
* Current experience value.
*/
exp: number;
/**
* Current level value.
*/
level: number;
/**
* Required experience to reach next level.
*/
readonly requiredExp: number;
/**
* Set the experience table.
*
* @param table - Experience table.
* @returns This LevelCounter instance.
*/
setTable(table: LevelCounter.TableType): this;
/**
* Set maximum level.
*
* @param maxLevel - Maximum level.
* @returns This LevelCounter instance.
*/
setMaxLevel(maxLevel?: number): this;
/**
* Whether max level is enabled.
*/
readonly hasMaxLevel: boolean;
/**
* Maximum level value.
*/
readonly maxLevel: number;
/**
* Maximum experience value.
*/
readonly maxExp: number;
/**
* Reset current experience.
*
* @param exp - Experience value.
* @returns This LevelCounter instance.
*/
resetExp(exp: number): this;
/**
* Get current experience.
*
* @returns Current experience.
*/
getExp(): number;
/**
* Get experience required for a level.
*
* @param level - Target level.
* @returns Experience value.
*/
getExp(level: number): number;
/**
* Get current level.
*
* @returns Current level.
*/
getLevel(): number;
/**
* Get level from experience.
*
* @param exp - Experience value.
* @param level - Start level hint.
* @returns Resolved level.
*/
getLevel(exp: number, level?: number): number;
/**
* Get experience needed to next level.
*
* @param level - Current level.
* @param exp - Current experience.
* @returns Required experience to next level.
*/
getRequiredExpToNextLevel(
level?: number,
exp?: number
): number;
/**
* Check whether level and experience are valid.
*
* @param level - Level value.
* @param exp - Experience value.
* @returns True if valid.
*/
checkLevel(level: number, exp: number): boolean;
/**
* Gain experience.
*
* @param incExp - Experience increment.
* @param callback - Level-up callback.
* @param scope - Callback scope.
* @returns This LevelCounter instance.
*/
gainExp(
incExp: number,
callback?: LevelCounter.LevelUpCallback,
scope?: Object
): this;
/**
* Set experience value.
*
* @param exp - Experience value.
* @param callback - Level-up callback.
* @param scope - Callback scope.
* @returns This LevelCounter instance.
*/
setExp(
exp: number,
callback?: LevelCounter.LevelUpCallback,
scope?: Object
): this;
/**
* Set level value.
*
* @param level - Level value.
* @param callback - Level-up callback.
* @param scope - Callback scope.
* @returns This LevelCounter instance.
*/
setLevel(
level: number,
callback?: LevelCounter.LevelUpCallback,
scope?: Object
): this;
}