Added speed uhc mode table stats

This commit is contained in:
2025-09-17 20:04:09 +02:00
parent 7042a437ae
commit 9c3e0edd90
6 changed files with 181 additions and 4 deletions

View File

@@ -94,7 +94,7 @@ export function PlayerStats(
"woolgames": <WoolGamesStats stats={stats.WoolGames} />,
"blitz": <BlitzStats stats={stats.Blitz} />,
"arcade": <ArcadeStats stats={stats.Arcade} />,
"speeduhc": <SpeedUHCStats stats={stats.SpeedUHC} />
"speeduhc": <SpeedUHCStats stats={stats.SpeedUHC} uhcCoins={stats.UHC?.coins} />
} as const
const defaultOrder = Object.keys(statsComponents)

View File

@@ -5,8 +5,10 @@ import { getSpeedUHCStar } from "@/lib/hypixel/speeduhc/general"
import { NonNullStats } from "@/lib/schema/player"
import GeneralStats from "../GeneralStats"
import SpeedUHCProgress from "./progress"
import SpeedUHCGeneralStats from "./stats"
import { SpeedUHCModeStatsTable } from "./table"
export default function SpeedUHCStats({ stats }: { stats: NonNullStats["SpeedUHC"] }) {
export default function SpeedUHCStats({ stats, uhcCoins }: { stats: NonNullStats["SpeedUHC"], uhcCoins: number | undefined }) {
if (!stats) return null
const kd = formatNumber(devide(stats.kills, stats.deaths))
@@ -38,6 +40,11 @@ export default function SpeedUHCStats({ stats }: { stats: NonNullStats["SpeedUHC
>
<Separator className="my-4" />
<SpeedUHCProgress level={Math.floor(star)} score={stats.score} />
<Separator className="my-4" />
<SpeedUHCGeneralStats stats={stats} uhcCoins={uhcCoins} />
<Separator className="my-4" />
<SpeedUHCModeStatsTable stats={stats} />
<Separator className="my-4" />
</GeneralStats>
)
}

View File

@@ -0,0 +1,32 @@
import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general"
import { getSpeedUHCStar, getSpeedUHCTitle } from "@/lib/hypixel/speeduhc/general"
import { NonNullStats } from "@/lib/schema/player"
import { BasicStat } from "../../_components/Stats"
export default function SpeedUHCGeneralStats({ stats, uhcCoins }: { stats: NonNullable<NonNullStats["SpeedUHC"]>, uhcCoins: number | undefined }) {
const star = getSpeedUHCStar(stats.score)
const currentTitle = getSpeedUHCTitle(Math.floor(star))
const kd = formatNumber(devide(stats.kills, stats.deaths))
const wl = formatNumber(devide(stats.wins, stats.losses))
return (
<div className="flex">
<div className="flex-1">
<BasicStat title="Score: " value={formatNumber(stats.score)} />
<BasicStat title="Title: " value={currentTitle} className="text-mc-white" />
<BasicStat title="Coins: " value={formatNumber(uhcCoins ?? 0)} className="text-mc-gold" />
</div>
<div className="flex-1">
<BasicStat title="Kills: " value={formatNumber(stats.kills)} />
<BasicStat title="Deaths: " value={formatNumber(stats.deaths)} />
<BasicStat title="Kill/Death Ratio: " value={kd} />
</div>
<div className="flex-1">
<BasicStat title="Wins: " value={formatNumber(stats.wins)} />
<BasicStat title="Losses: " value={formatNumber(stats.losses)} />
<BasicStat title="Win/Loss Ratio: " value={wl} />
</div>
</div>
)
}

View File

@@ -0,0 +1,57 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber } from "@/lib/formatters"
import { getSpeedUHCBestMode, getSpeedUHCModeName, getSpeedUHCModeStats } from "@/lib/hypixel/speeduhc/general"
import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils"
export function SpeedUHCModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["SpeedUHC"]> }) {
return (
<Table>
<SpeedUHCModeStatsTableHeader />
<TableBody>
<SpeedUHCStatRow modeId="solo_normal" stats={stats} />
<SpeedUHCStatRow modeId="solo_insane" stats={stats} />
<SpeedUHCStatRow modeId="team_normal" stats={stats} />
<SpeedUHCStatRow modeId="team_insane" stats={stats} />
<SpeedUHCStatRow modeId="all_modes" stats={stats} />
</TableBody>
</Table>
)
}
function SpeedUHCStatRow({ modeId, stats }: { modeId: Parameters<typeof getSpeedUHCModeStats>[0], stats: NonNullable<NonNullStats["SpeedUHC"]> }) {
const modeStats = getSpeedUHCModeStats(modeId, stats)
const modeName = getSpeedUHCModeName(modeId)
const isBest = getSpeedUHCBestMode(stats) === modeId
return (
<TableRow className={cn(isBest && "text-mc-light-purple")}>
<TableCell>{modeName}</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{formatNumber(v)}</TableCell>
})}
</TableRow>
)
}
function SpeedUHCModeStatsTableHeader() {
const headerElements = [
"Mode",
"Kills",
"Deaths",
"KD",
"Wins",
"Losses",
"WL"
]
return (
<TableHeader>
<TableRow>
{headerElements.map((v, i) => {
return <TableHead key={i} className="font-bold">{v}</TableHead>
})}
</TableRow>
</TableHeader>
)
}