XP system

This commit is contained in:
2025-02-02 21:47:45 -08:00
parent 783dcd0ca3
commit c23a7b6d75
9 changed files with 75 additions and 10 deletions

View File

@ -3,6 +3,7 @@ import {getSkills} from "./skills.ts";
export class PlayerProgress {
#stats: Record<Stat, number>
#exp: number;
#blood: number
#skillsLearned: number[] // use the raw ID representation for indexOf
#untrimmedSkillsAvailable: Skill[]
@ -14,6 +15,7 @@ export class PlayerProgress {
CHA: 10,
PSI: 10,
};
this.#exp = 0;
this.#blood = 0;
this.#skillsLearned = [];
this.#untrimmedSkillsAvailable = []
@ -82,6 +84,21 @@ export class PlayerProgress {
this.#stats[stat] += amount;
}
addExperience(amt: number) {
this.#exp += amt;
}
getExperience(): number {
return this.#exp
}
spendExperience(cost: number) {
if (this.#exp < cost) {
throw `can't spend ${cost}`
}
this.#exp -= cost;
}
getStat(stat: Stat): number {
return this.#stats[stat]
}
@ -97,9 +114,6 @@ export class PlayerProgress {
getAvailableSkills(): Skill[] {
// Sort by cost, then by name, then trim down to first 6
let skillsAvailable = [...this.#untrimmedSkillsAvailable];
skillsAvailable.sort((a, b) => {
return getSkills().computeCost(a) - getSkills().computeCost(b)
});
skillsAvailable.sort((a, b) => {
let name1 = getSkills().get(a).profile.name;
let name2 = getSkills().get(b).profile.name;
@ -108,8 +122,12 @@ export class PlayerProgress {
if (name1 > name2) { return 1; }
return 0;
});
skillsAvailable.sort((a, b) => {
return getSkills().computeCost(a) - getSkills().computeCost(b)
});
return skillsAvailable.slice(0, 6)
}
}
let active: PlayerProgress = new PlayerProgress();