mirror of https://github.com/hykilpikonna/AquaDX
[+] Setting of score rounding and fix bugs
parent
d0aecc76ed
commit
a6a8734599
|
@ -38,7 +38,7 @@
|
|||
{/each}
|
||||
</div>
|
||||
|
||||
<StatusOverlays {error} loading={!gameFields.length && !!submitting}/>
|
||||
<StatusOverlays {error} loading={!gameFields.length || !!submitting}/>
|
||||
|
||||
<style lang="sass">
|
||||
.fields
|
||||
|
|
|
@ -2,8 +2,56 @@
|
|||
import { fade } from "svelte/transition";
|
||||
import { FADE_IN, FADE_OUT } from "../libs/config";
|
||||
import GameSettingFields from "./GameSettingFields.svelte";
|
||||
import { ts } from "../libs/i18n";
|
||||
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
|
||||
|
||||
const rounding = useLocalStorage("rounding", true);
|
||||
</script>
|
||||
|
||||
<div out:fade={FADE_OUT} in:fade={FADE_IN}>
|
||||
<div out:fade={FADE_OUT} in:fade={FADE_IN} class="fields">
|
||||
<GameSettingFields game="general"/>
|
||||
<div class="field">
|
||||
<div class="bool">
|
||||
<input id="rounding" type="checkbox" bind:checked={rounding.value}/>
|
||||
<label for="rounding">
|
||||
<span class="name">{ts(`settings.fields.rounding.name`)}</span>
|
||||
<span class="desc">{ts(`settings.fields.rounding.desc`)}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style lang="sass">
|
||||
.fields
|
||||
display: flex
|
||||
flex-direction: column
|
||||
gap: 12px
|
||||
|
||||
.bool
|
||||
display: flex
|
||||
align-items: center
|
||||
gap: 1rem
|
||||
|
||||
label
|
||||
display: flex
|
||||
flex-direction: column
|
||||
|
||||
.desc
|
||||
opacity: 0.6
|
||||
|
||||
.field
|
||||
display: flex
|
||||
flex-direction: column
|
||||
|
||||
label
|
||||
max-width: max-content
|
||||
|
||||
> div:not(.bool)
|
||||
display: flex
|
||||
align-items: center
|
||||
gap: 1rem
|
||||
margin-top: 0.5rem
|
||||
|
||||
> input
|
||||
flex: 1
|
||||
</style>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
import { coverNotFound } from "../libs/ui";
|
||||
import type { MusicMeta } from "../libs/generalTypes";
|
||||
import { tooltip } from "../libs/ui";
|
||||
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
|
||||
|
||||
export let g: string
|
||||
export let meta: MusicMeta
|
||||
|
@ -16,6 +17,9 @@
|
|||
let mapData = g.split(":").map(Number)
|
||||
let mult = getMult(mapData[3], game)
|
||||
let mapRank: number | undefined = meta?.notes?.[mapData[1] === 10 ? 0 : mapData[1]]?.lv
|
||||
const rounding = useLocalStorage("rounding", true);
|
||||
|
||||
console.log(rounding.value)
|
||||
|
||||
let gameIndexMap = {
|
||||
'mai2': 3,
|
||||
|
@ -42,7 +46,11 @@
|
|||
|
||||
<span class="rank-text">{("" + getMult(mapData[gameIndex], game)[2]).replace("p", "+")}</span>
|
||||
<span class="rank-num" use:tooltip={(mapData[gameIndex] / 10000).toFixed(4)}>
|
||||
{roundFloor(mapData[gameIndex], game, 1)}%
|
||||
{
|
||||
rounding.value ?
|
||||
roundFloor(mapData[gameIndex], game, 1) :
|
||||
(mapData[gameIndex] / 10000).toFixed(4)
|
||||
}%
|
||||
</span>
|
||||
</span>
|
||||
{#if game === 'mai2'}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import { onMount } from 'svelte';
|
||||
|
||||
const useLocalStorage = <T>(key: string, initialValue: T) => {
|
||||
let value = initialValue;
|
||||
|
||||
const currentValue = localStorage.getItem(key);
|
||||
if (currentValue) value = JSON.parse(currentValue);
|
||||
|
||||
const save = () => {
|
||||
localStorage.setItem(key, JSON.stringify(value));
|
||||
};
|
||||
|
||||
return {
|
||||
get value() {
|
||||
return value;
|
||||
},
|
||||
set value(v: T) {
|
||||
value = v;
|
||||
save();
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default useLocalStorage;
|
|
@ -137,6 +137,8 @@ export const EN_REF_SETTINGS = {
|
|||
'settings.fields.waccaInfiniteWp.desc': 'Set WP to 999999',
|
||||
'settings.fields.waccaAlwaysVip.name': 'Wacca: Always VIP',
|
||||
'settings.fields.waccaAlwaysVip.desc': 'Set VIP expiration date to 2077-01-01',
|
||||
'settings.fields.rounding.name': 'Score Rounding',
|
||||
'settings.fields.rounding.desc': 'Round the score to one decimal place',
|
||||
'settings.mai2.name': 'Player Name',
|
||||
'settings.profile.picture': 'Profile Picture',
|
||||
'settings.profile.upload-new': 'Upload New',
|
||||
|
|
|
@ -146,6 +146,8 @@ const zhSettings: typeof EN_REF_SETTINGS = {
|
|||
'settings.fields.waccaInfiniteWp.desc': '将 WP 设置为 999999',
|
||||
'settings.fields.waccaAlwaysVip.name': 'Wacca: 永久会员',
|
||||
'settings.fields.waccaAlwaysVip.desc': '将 VIP 到期时间设置为 2077-01-01',
|
||||
'settings.fields.rounding.name': '分数舍入',
|
||||
'settings.fields.rounding.desc': '把分数四舍五入到一位小数',
|
||||
'settings.mai2.name': '玩家名字',
|
||||
'settings.profile.picture': '头像',
|
||||
'settings.profile.upload-new': '上传',
|
||||
|
|
|
@ -76,10 +76,10 @@ export function getMult(achievement: number, game: GameName) {
|
|||
}
|
||||
|
||||
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);
|
||||
achievement /= 10000
|
||||
const rounded = achievement.toFixed(digits);
|
||||
if (getMult(+rounded, game)[2] === mult[2]) return rounded;
|
||||
if (getMult(+rounded * 10000, game)[2] === mult[2] && rounded !== '101.0') return rounded;
|
||||
return (+rounded - Math.pow(10, -digits)).toFixed(digits);
|
||||
}
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
import { DATA_HOST } from "../libs/config";
|
||||
import { getMaimai, getMaimaiAllMusic } from "../libs/maimai";
|
||||
import type { ParsedRating, Rating } from "../libs/maimaiTypes";
|
||||
import { getMult } from "../libs/scoring";
|
||||
import { getMult, roundFloor } from "../libs/scoring";
|
||||
import StatusOverlays from "../components/StatusOverlays.svelte";
|
||||
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
|
||||
|
||||
export let userId: any
|
||||
userId = +userId
|
||||
let error: string | null;
|
||||
const rounding = useLocalStorage("rounding", true);
|
||||
|
||||
if (!userId) console.error("No user ID provided")
|
||||
|
||||
|
@ -80,7 +82,13 @@
|
|||
<div class="detail">
|
||||
<span class="name">{rating.music.name}</span>
|
||||
<span class="rating">
|
||||
<span>{(rating.achievement / 10000).toFixed(2)}%</span>
|
||||
<span>
|
||||
{
|
||||
rounding.value ?
|
||||
roundFloor(rating.achievement, 'mai2', 1) :
|
||||
(rating.achievement / 10000).toFixed(4)
|
||||
}%
|
||||
</span>
|
||||
<img class="rank" src={`${DATA_HOST}/maimai/sprites/rankimage/UI_GAM_Rank_${rating.rank}.png`} alt="">
|
||||
</span>
|
||||
<span>{rating.calc.toFixed(1)}</span>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
import { GAME_TITLE, t } from "../libs/i18n";
|
||||
import RankDetails from "../components/RankDetails.svelte";
|
||||
import RatingComposition from "../components/RatingComposition.svelte";
|
||||
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
|
||||
|
||||
const TREND_DAYS = 60
|
||||
|
||||
|
@ -33,6 +34,7 @@
|
|||
let error: string;
|
||||
let me: AquaNetUser
|
||||
title(`User ${username}`)
|
||||
const rounding = useLocalStorage("rounding", true);
|
||||
|
||||
const titleText = GAME_TITLE[game]
|
||||
|
||||
|
@ -268,7 +270,11 @@
|
|||
<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" use:tooltip={(r.achievement / 10000).toFixed(4)}>
|
||||
{roundFloor(r.achievement, game, 1)}%
|
||||
{
|
||||
rounding.value ?
|
||||
roundFloor(r.achievement, game, 1) :
|
||||
(r.achievement / 10000).toFixed(4)
|
||||
}%
|
||||
</span>
|
||||
</span>
|
||||
{#if game === 'mai2' || game === 'wacca'}
|
||||
|
|
Loading…
Reference in New Issue