Refactor ESD to avoid "damp" score

This commit is contained in:
zkldi
2021-05-11 06:37:24 +01:00
parent 33f523f5e5
commit b87fcd3cc7
7 changed files with 17 additions and 11 deletions
@@ -17,7 +17,7 @@ import { GetDefaultTierlist } from "../../../core/tierlist-core";
const mockLogger = CreateLogCtx("calculated-data.test.ts");
t.test("#CreateCalculatedData", async (t) => {
let res = await CreateCalculatedData(TestingIIDXSPDryScore, Testing511SPA, mockLogger);
let res = await CreateCalculatedData(TestingIIDXSPDryScore, Testing511SPA, 30, mockLogger);
prAssert(
res,
@@ -36,6 +36,7 @@ t.test("#CreateCalculatedData", async (t) => {
let gitadoraRes = await CreateCalculatedData(
TestingGITADORADoraDryScore,
TestingDoraChart,
30,
mockLogger
);
@@ -12,6 +12,7 @@ import { CalculateCHUNITHMRating, CalculateGITADORARating } from "./game-specifi
export async function CreateCalculatedData(
dryScore: DryScore,
chart: AnyChartDocument,
esd: number | null,
logger: KtLogger
): Promise<ScoreDocument["calculatedData"]> {
const game = dryScore.game;
@@ -23,7 +24,7 @@ export async function CreateCalculatedData(
const [rating, lampRating, gameSpecific] = await Promise.all([
CalculateRating(dryScore, game, playtype, chart, logger, defaultTierlistID),
CalculateLampRating(dryScore, game, playtype, chart, defaultTierlistID),
CreateGameSpecific(game, playtype, chart, dryScore, logger),
CreateGameSpecific(game, playtype, chart, dryScore, esd, logger),
]);
return {
@@ -21,6 +21,7 @@ t.test("#CreateGameSpecific", (t) => {
"SP",
Testing511SPA,
TestingIIDXSPDryScore,
30,
logger
);
@@ -43,6 +44,7 @@ t.test("#CreateGameSpecific", (t) => {
"DP",
Testing511SPA,
TestingIIDXSPDryScore, // fake! this is an SP score. but we're testing
30,
logger
);
@@ -64,6 +66,7 @@ t.test("#CreateGameSpecific", (t) => {
"Single",
Testing511SPA,
TestingSDVXSingleDryScore,
null,
logger
);
@@ -85,6 +88,7 @@ t.test("#CreateGameSpecific", (t) => {
"SP",
Testing511SPA,
TestingIIDXSPDryScore, // fake! this is an iidx score. but we're testing
null,
logger
);
@@ -105,6 +109,7 @@ t.test("#CreateGameSpecific", (t) => {
"DP",
Testing511SPA,
TestingIIDXSPDryScore, // fake! this is an iidx score. but we're testing
null,
logger
);
@@ -16,6 +16,9 @@ export async function CreateGameSpecific<G extends Game>(
playtype: Playtypes[G],
chart: AnyChartDocument,
dryScore: DryScore,
// ESD gets specially passed through because it's not part of the DryScore, but
// can be used for statistics anyway.
esd: number | null,
logger: KtLogger
): Promise<Record<string, number | null>> {
let gameSpecific: Record<string, number | null> = {};
@@ -34,10 +37,7 @@ export async function CreateGameSpecific<G extends Game>(
BPIData.coef
);
gameSpecific.KESDC =
dryScore.scoreData.esd === null
? null
: CalculateKESDC(BPIData.kesd, dryScore.scoreData.esd);
gameSpecific.KESDC = esd === null ? null : CalculateKESDC(BPIData.kesd, esd);
} else {
gameSpecific.BPI = null;
gameSpecific.KESDC = null;
@@ -22,7 +22,9 @@ export async function HydrateScore(
scoreID: string,
logger: KtLogger
): Promise<ScoreDocument> {
const calculatedData = await CreateCalculatedData(dryScore, chart, logger); // @todo
const esd = CalculateESDForGame(dryScore.game, dryScore.scoreData.percent / 100);
const calculatedData = await CreateCalculatedData(dryScore, chart, esd, logger); // @todo
const { scoreData: dryScoreData, ...rest } = dryScore;
@@ -32,7 +34,7 @@ export async function HydrateScore(
// @todo lamps may need to be separate upon game:playtype someday. Maybe. We need to check this out
lampIndex: config.lamps[dryScore.game].indexOf(dryScore.scoreData.lamp as string),
gradeIndex: config.grades[dryScore.game].indexOf(dryScore.scoreData.grade as string),
esd: CalculateESDForGame(dryScore.game, dryScore.scoreData.percent),
esd,
},
dryScoreData
);
@@ -28,7 +28,6 @@ const DryScorePrudence = {
grade: p.equalTo("F"),
lamp: p.equalTo("HARD CLEAR"),
score: p.equalTo(192),
esd: p.equalTo(162.5),
percent: p.aprx(12.21),
hitData: {
pgreat: p.equalTo(75),
@@ -167,7 +166,6 @@ t.test("#EamScoreConverter", async (t) => {
scoreData: {
score: p.equalTo(1),
percent: p.aprx(0.063),
esd: p.equalTo(200),
hitData: {
pgreat: p.equalTo(0),
great: p.equalTo(1),
@@ -6,7 +6,6 @@
"lamp": "CLEAR",
"percent": 50,
"grade": "C",
"esd": 30,
"hitData": {
"pgreat": 50,
"great": 10