45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import config from './config';
|
|
import { TimeMod } from './interfaces';
|
|
import { getNow } from './util';
|
|
|
|
export class Combo {
|
|
current = 0;
|
|
best = 0;
|
|
|
|
inc = () => {
|
|
this.current++;
|
|
this.best = Math.max(this.best, this.current);
|
|
};
|
|
|
|
reset = () => {
|
|
this.current = 0;
|
|
};
|
|
|
|
level = () =>
|
|
config.combo.levels.reduce((lvl, [threshold, _], index) => (threshold <= this.current ? index : lvl), 0);
|
|
|
|
percent = () => {
|
|
const lvl = this.level();
|
|
const levels = config.combo.levels;
|
|
const lastLevel = levels[levels.length - 1];
|
|
if (lvl >= levels.length - 1) {
|
|
const range = lastLevel[0] - levels[levels.length - 2][0];
|
|
return (((this.current - lastLevel[0]) / range) * 100) % 100;
|
|
}
|
|
const bounds = [levels[lvl][0], levels[lvl + 1][0]];
|
|
return Math.floor(((this.current - bounds[0]) / (bounds[1] - bounds[0])) * 100);
|
|
};
|
|
|
|
bonus = (): TimeMod | undefined => {
|
|
if (this.percent() == 0) {
|
|
const level = this.level();
|
|
if (level > 0)
|
|
return {
|
|
seconds: config.combo.levels[level][1],
|
|
at: getNow(),
|
|
};
|
|
}
|
|
return;
|
|
};
|
|
}
|