mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-01 19:38:13 +03:00
Add fully tested ktLampRatingAlg
This commit is contained in:
@@ -15,7 +15,7 @@ import {
|
||||
CalculateBPI,
|
||||
CalculateCHUNITHMRating,
|
||||
CalculateGITADORASkill,
|
||||
CalculateKTLampRating,
|
||||
CalculateKTLampRatingIIDX,
|
||||
CalculateKTRating,
|
||||
CalculateMFCP,
|
||||
CalculateVF6,
|
||||
@@ -136,7 +136,7 @@ async function CalculateDataIIDXSP(
|
||||
BPIData.kavg,
|
||||
BPIData.wr,
|
||||
dryScore.scoreData.score,
|
||||
(chart as ChartDocument<"iidx:DP" | "iidx:SP">).data.notecount * 2,
|
||||
(chart as ChartDocument<"iidx:SP">).data.notecount * 2,
|
||||
BPIData.coef
|
||||
);
|
||||
|
||||
@@ -147,8 +147,8 @@ async function CalculateDataIIDXSP(
|
||||
|
||||
return {
|
||||
BPI: bpi,
|
||||
ktRating: await CalculateKTRating(dryScore, "iidx", "SP", chart, logger),
|
||||
ktLampRating: await CalculateKTLampRating(dryScore, "iidx", "SP", chart),
|
||||
ktRating: CalculateKTRating(dryScore, "iidx", "SP", chart, logger),
|
||||
ktLampRating: CalculateKTLampRatingIIDX(dryScore, "SP", chart as ChartDocument<"iidx:SP">),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ async function CalculateDataIIDXDP(
|
||||
BPIData.kavg,
|
||||
BPIData.wr,
|
||||
dryScore.scoreData.score,
|
||||
(chart as ChartDocument<"iidx:DP" | "iidx:SP">).data.notecount * 2,
|
||||
(chart as ChartDocument<"iidx:DP">).data.notecount * 2,
|
||||
BPIData.coef
|
||||
);
|
||||
|
||||
@@ -179,8 +179,8 @@ async function CalculateDataIIDXDP(
|
||||
|
||||
return {
|
||||
BPI: bpi,
|
||||
ktRating: await CalculateKTRating(dryScore, "iidx", "DP", chart, logger),
|
||||
ktLampRating: await CalculateKTLampRating(dryScore, "iidx", "DP", chart),
|
||||
ktRating: CalculateKTRating(dryScore, "iidx", "DP", chart, logger),
|
||||
ktLampRating: CalculateKTLampRatingIIDX(dryScore, "DP", chart as ChartDocument<"iidx:DP">),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
CalculateBPI,
|
||||
CalculateCHUNITHMRating,
|
||||
CalculateGITADORASkill,
|
||||
CalculateKTLampRatingIIDX,
|
||||
CalculateKTRating,
|
||||
CalculateMFCP,
|
||||
CalculateVF6,
|
||||
@@ -110,6 +111,98 @@ t.test("#CalculateBPI", (t) => {
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.test("#CalculateKTLampRatingIIDx", (t) => {
|
||||
function c(
|
||||
nc: number | null,
|
||||
hc: number | null,
|
||||
exhc: number | null
|
||||
): ChartDocument<"iidx:SP"> {
|
||||
return Object.assign({}, Testing511SPA, {
|
||||
tierlistInfo: {
|
||||
"kt-EXHC": {
|
||||
value: exhc,
|
||||
},
|
||||
"kt-HC": {
|
||||
value: hc,
|
||||
},
|
||||
"kt-NC": {
|
||||
value: nc,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function s(lamp: Lamps["iidx:SP" | "iidx:DP"]): DryScore<"iidx:SP" | "iidx:DP"> {
|
||||
return Object.assign({}, TestingIIDXSPDryScore, {
|
||||
scoreData: {
|
||||
lamp,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(10.5, 10.6, 10.7)),
|
||||
10.5,
|
||||
"Should return NC if the score was NC."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.5, 10.6, 10.7)),
|
||||
10.6,
|
||||
"Should return HC if the score was HC."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.5, 10.6, 10.7)),
|
||||
10.7,
|
||||
"Should return EXHC if the score was EXHC."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(null, 10.6, 10.7)),
|
||||
0,
|
||||
"Should return 0 if the score was NC but no NC was available."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(null, null, 10.7)),
|
||||
0,
|
||||
"Should return 0 if the score was HC but no HC or NC was available."
|
||||
);
|
||||
|
||||
tequal(
|
||||
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.5, null, 10.7)),
|
||||
10.5,
|
||||
"Should return NC if the score was HC but no HC was available."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.9, 10.5, 10.7)),
|
||||
10.9,
|
||||
"Should return NC if the score was HC but NC was worth more."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.9, 10.5, 10.7)),
|
||||
10.9,
|
||||
"Should return NC if the score was EXHC but NC was worth more."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.4, 10.9, 10.7)),
|
||||
10.9,
|
||||
"Should return HC if the score was EXHC but HC was worth more."
|
||||
);
|
||||
|
||||
t.equal(
|
||||
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(null, null, null)),
|
||||
10,
|
||||
"Should return chart level if the chart has no tierlist data."
|
||||
);
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.test("#CalculateGITADORARating", (t) => {
|
||||
function TestGitadoraRating(percent: number, levelNum: number) {
|
||||
return CalculateGITADORASkill(
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
Game,
|
||||
GetGamePTConfig,
|
||||
Grades,
|
||||
IIDX_LAMPS,
|
||||
integer,
|
||||
Lamps,
|
||||
Playtypes,
|
||||
@@ -317,13 +318,34 @@ export function CalculateKTRating(
|
||||
return KTRatingCalcV1(dryScore.scoreData.percent, levelNum, parameters, logger);
|
||||
}
|
||||
|
||||
export function CalculateKTLampRating(
|
||||
export function CalculateKTLampRatingIIDX(
|
||||
dryScore: DryScore,
|
||||
game: Game,
|
||||
playtype: Playtypes[Game],
|
||||
chart: ChartDocument
|
||||
chart: ChartDocument<"iidx:SP" | "iidx:DP">
|
||||
) {
|
||||
return LampRatingNoTierlistInfo(dryScore, game, playtype, chart);
|
||||
const ncValue = chart.tierlistInfo["kt-NC"]?.value ?? 0;
|
||||
const hcValue = Math.max(chart.tierlistInfo["kt-HC"]?.value ?? 0, ncValue);
|
||||
const exhcValue = Math.max(chart.tierlistInfo["kt-EXHC"]?.value ?? 0, hcValue);
|
||||
|
||||
if (!exhcValue && !hcValue && !ncValue) {
|
||||
return LampRatingNoTierlistInfo(dryScore, "iidx", playtype, chart);
|
||||
}
|
||||
|
||||
const lamp = dryScore.scoreData.lamp;
|
||||
|
||||
const gptConfig = GetGamePTConfig("iidx", playtype);
|
||||
|
||||
const lampIndex = gptConfig.lamps.indexOf(lamp);
|
||||
|
||||
if (exhcValue && lampIndex >= IIDX_LAMPS.EX_HARD_CLEAR) {
|
||||
return exhcValue;
|
||||
} else if (hcValue && lampIndex >= IIDX_LAMPS.HARD_CLEAR) {
|
||||
return hcValue;
|
||||
} else if (ncValue && lampIndex >= IIDX_LAMPS.CLEAR) {
|
||||
return ncValue;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
function LampRatingNoTierlistInfo(
|
||||
|
||||
Reference in New Issue
Block a user