[O] Advanced achievement rounding

pull/30/head
Azalea 2024-04-22 09:15:57 -04:00
parent b13af00061
commit 3bf3241bd7
3 changed files with 16 additions and 6 deletions

View File

@ -4,7 +4,7 @@
import { slide } from "svelte/transition";
import { DATA_HOST } from "../libs/config";
import { t } from "../libs/i18n";
import { type GameName, getMult } from "../libs/scoring";
import { type GameName, getMult, roundFloor } from "../libs/scoring";
import { coverNotFound } from "../libs/ui";
import type { MusicMeta } from "../libs/generalTypes";
import { tooltip } from "../libs/ui";
@ -35,7 +35,7 @@
<span class="rank-text">{("" + getMult(mapData[3], game)[2]).replace("p", "+")}</span>
<span class="rank-num" use:tooltip={(mapData[3] / 10000).toFixed(4)}>
{(mapData[3] / 10000).toFixed(1)}%
{roundFloor(mapData[3], game, 1)}%
</span>
</span>
{#if game === 'mai2'}

View File

@ -66,7 +66,6 @@ const multTable = {
]
}
export function getMult(achievement: number, game: GameName) {
achievement /= 10000
const mt = multTable[game]
@ -75,3 +74,12 @@ export function getMult(achievement: number, game: GameName) {
}
return [ 0, 0, 0 ]
}
export function roundFloor(achievement: number, game: GameName, digits = 2) {
achievement /= 10000
// Round, but if the rounded number reaches the next rank, use floor instead
const mult = getMult(achievement, game);
const rounded = achievement.toFixed(digits);
if (getMult(+rounded, game)[2] === mult[2]) return rounded;
return (+rounded - Math.pow(10, -digits)).toFixed(digits);
}

View File

@ -16,7 +16,7 @@
import moment from "moment";
import 'chartjs-adapter-moment';
import { CARD, DATA, GAME, USER } from "../libs/sdk";
import { type GameName, getMult } from "../libs/scoring";
import { type GameName, getMult, roundFloor } from "../libs/scoring";
import StatusOverlays from "../components/StatusOverlays.svelte";
import Icon from "@iconify/svelte";
import { GAME_TITLE, t } from "../libs/i18n";
@ -271,11 +271,13 @@
</span>
<span class={`rank-${getMult(r.achievement, game)[2].toString()[0]}`}>
<span class="rank-text">{("" + getMult(r.achievement, game)[2]).replace("p", "+")}</span>
<span class="rank-num">{(r.achievement / 10000).toFixed(2)}%</span>
<span class="rank-num" use:tooltip={(r.achievement / 10000).toFixed(4)}>
{roundFloor(r.achievement, game, 1)}%
</span>
</span>
{#if game === 'mai2' || game === 'wacca'}
<span class:increased={r.afterRating - r.beforeRating > 0} class="dx-change">
{(r.afterRating - r.beforeRating).toFixed(0)}
{r.afterRating === r.beforeRating ? '-' : (r.afterRating - r.beforeRating).toFixed(0)}
</span>
{/if}
</div>