Add skills

This commit is contained in:
2025-02-02 20:05:52 -08:00
parent 810edb7e3b
commit 06a7263ad9
9 changed files with 588 additions and 45 deletions

View File

@ -1,8 +1,11 @@
import {Stat} from "./datatypes.ts";
import {Skill, Stat} from "./datatypes.ts";
import {getSkills} from "./skills.ts";
export class PlayerProgress {
#stats: Record<Stat, number>
#blood: number
#skillsLearned: number[] // use the raw ID representation for indexOf
#untrimmedSkillsAvailable: Skill[]
constructor() {
this.#stats = {
@ -10,14 +13,63 @@ export class PlayerProgress {
INT: 10,
CHA: 10,
PSI: 10,
}
};
this.#blood = 0;
this.#skillsLearned = [];
this.#untrimmedSkillsAvailable = []
this.refill();
}
refill() {
this.#blood = 2000;
let learnableSkills = []; // TODO: Also include costing info
for (let skill of getSkills().getAllAvailableSkills().values()) {
if (this.#canBeAvailable(skill)) {
learnableSkills.push(skill);
}
}
this.#untrimmedSkillsAvailable = learnableSkills
}
hasLearned(skill: Skill) {
return this.#skillsLearned.indexOf(skill.id) !== -1;
}
learnSkill(skill: Skill) {
if (this.#skillsLearned.indexOf(skill.id) != -1) {
return
}
this.#skillsLearned.push(skill.id);
// remove entries for that skill
let skills2 = [];
for (let entry of this.#untrimmedSkillsAvailable.values()) {
if (entry.id == skill.id) { continue; }
skills2.push(entry);
}
this.#untrimmedSkillsAvailable = skills2;
}
#canBeAvailable(skill: Skill) {
// make sure we haven't learned this skill already
if (this.hasLearned(skill)) {
return false;
}
let data = getSkills().get(skill);
// make sure the prereqs are met
for (let prereq of data.prereqs.values()) {
if (!this.hasLearned(prereq)) {
return false
}
}
// ok, we're good!!
return true;
}
add(stat: Stat, amount: number) {
@ -41,6 +93,11 @@ export class PlayerProgress {
spendBlood(amt: number) {
this.#blood -= amt;
}
getAvailableSkills(): Skill[] {
// TODO: Sort by cost, then by name, then trim down to first 8
return this.#untrimmedSkillsAvailable
}
}
let active: PlayerProgress = new PlayerProgress();