Add skills
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user