62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
module TS.SpaceTac {
|
|
/**
|
|
* Level and experience system for a ship.
|
|
*/
|
|
export class ShipLevel {
|
|
private level = 1;
|
|
private experience = 0;
|
|
|
|
/**
|
|
* Get current level
|
|
*/
|
|
get(): number {
|
|
return this.level;
|
|
}
|
|
|
|
/**
|
|
* Get the next experience goal to reach, to gain one level
|
|
*/
|
|
getNextGoal(): number {
|
|
return isum(imap(irange(this.level), i => (i + 1) * 100));
|
|
}
|
|
|
|
/**
|
|
* Force experience gain, to reach a given level
|
|
*/
|
|
forceLevel(level: number) {
|
|
while (this.level < level) {
|
|
this.addExperience(this.getNextGoal());
|
|
this.checkLevelUp();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check for level-up
|
|
*
|
|
* Returns true if level changed
|
|
*/
|
|
checkLevelUp(): boolean {
|
|
let changed = false;
|
|
while (this.experience > this.getNextGoal()) {
|
|
this.level++;
|
|
changed = true;
|
|
}
|
|
return changed;
|
|
}
|
|
|
|
/**
|
|
* Add experience points
|
|
*/
|
|
addExperience(points: number) {
|
|
this.experience += points;
|
|
}
|
|
|
|
/**
|
|
* Get skill points given by current level
|
|
*/
|
|
getSkillPoints(): number {
|
|
return 5 + 5 * this.level;
|
|
}
|
|
}
|
|
}
|