Skill costing 1

This commit is contained in:
2025-02-02 21:09:10 -08:00
parent 06a7263ad9
commit 783dcd0ca3
8 changed files with 169 additions and 13 deletions

View File

@ -1,4 +1,5 @@
import {Skill, SkillData, SkillGoverning, Stat} from "./datatypes.ts";
import {getPlayerProgress} from "./playerprogress.ts";
class SkillsTable {
#skills: SkillData[]
@ -24,6 +25,36 @@ class SkillsTable {
}
return skills;
}
computeCost(skill: Skill) {
let data = this.get(skill);
let governingStatValue = 0;
for (let stat of data.governing.stats.values()) {
governingStatValue += getPlayerProgress().getStat(stat) / data.governing.stats.length;
}
return Math.floor(geomInterpolate(
governingStatValue,
data.governing.underTarget, data.governing.target,
data.governing.cost, 999
))
}
}
function geomInterpolate(
x: number,
lowIn: number,
highIn: number,
lowOut: number,
highOut: number,
) {
if (x < lowIn) { return highOut; }
if (x >= highIn) { return lowOut; }
const proportion = 1.0 - (x - lowIn) / (highIn - lowIn);
console.log(`proportion: ${x} ${proportion}`)
return lowOut * Math.pow(highOut / lowOut, proportion)
}
type Difficulty = 0 | 1 | 2 | 3
@ -44,16 +75,18 @@ let templates: Record<Track, GoverningTemplate> = {
function governing(track: Track, difficulty: Difficulty): SkillGoverning {
let template = templates[track];
let underTarget: number
let target: number
let cost: number
switch(difficulty) {
case 0: target = 30; cost = 50; break;
case 1: target = 100; cost = 100; break;
case 2: target = 150; cost = 250; break;
case 3: target = 250; cost = 500; break;
case 0: underTarget = 5; target = 15; cost = 50; break;
case 1: underTarget = 50; target = 100; cost = 100; break;
case 2: underTarget = 100; target = 150; cost = 250; break;
case 3: underTarget = 175; target = 250; cost = 500; break;
}
return {
stats: template.stats,
underTarget: underTarget,
target: target,
cost: cost,
note: template.note,