rg-stats
Version:
A library for calculating various rhythm game stats.
42 lines (34 loc) • 1.33 kB
text/typescript
import { ThrowIf } from "../util/throw-if";
/**
* Calculate a GITADORA Skill value.
*
* @param scorePercent - The percent this score was worth. Must be between 0 and 100.
* @param level - The level for this chart.
*/
export function calculate(scorePercent: number, level: number) {
ThrowIf(scorePercent > 100, "Score Percent cannot be greater than 100.", { scorePercent });
ThrowIf.negative(scorePercent, "Score Percent cannot be negative.", { scorePercent });
ThrowIf.negative(level, "Chart Level cannot be negative.", { level });
const trueRating = scorePercent * level * 20;
return Math.floor(trueRating) / 100;
}
/**
* Given a GITADORA Skill and a level of a chart, return the percent necessary
* to achieve that skill value.
*
* This throws if the skill value is not possible.
*
* @param skill - The skill level to invert.
* @param level - The level of the chart this skill level should be inverted for.
*/
export function inverse(skill: number, level: number) {
ThrowIf.negative(skill, "Skill cannot be negative.", { skill });
ThrowIf.negative(level, "Chart Level cannot be negative.", { level });
const percent = (100 * skill) / (20 * level);
ThrowIf(
percent > 100,
`A skill level of ${skill} is not possible on a chart with level ${level}.`,
{ skill, level }
);
return percent;
}