mirror of
https://github.com/zkldi/Tachi.git
synced 2026-09-29 18:37:58 +03:00
Refactor ESD to avoid "damp" score
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user