Skill costing 1
This commit is contained in:
@ -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,
|
||||
|
Reference in New Issue
Block a user