diff --git a/src/client/Utils.ts b/src/client/Utils.ts index f94cb0a33..bc8636cf7 100644 --- a/src/client/Utils.ts +++ b/src/client/Utils.ts @@ -158,6 +158,17 @@ export function getModifierLabels( return getActiveModifiers(modifiers).map((m) => translateText(m.badgeKey)); } +export function secondsToHms(d: number): string { + const pad = (n: number) => (n < 10 ? `0${n}` : n); + const h = Math.floor(d / 3600); + const m = Math.floor((d % 3600) / 60); + const s = Math.floor((d % 3600) % 60); + if (h !== 0) { + return `${pad(h)}:${pad(m)}:${pad(s)}`; + } + return `${pad(m)}:${pad(s)}`; +} + export function renderDuration(totalSeconds: number): string { if (totalSeconds <= 0) return "0s"; const minutes = Math.floor(totalSeconds / 60); diff --git a/src/client/graphics/layers/GameRightSidebar.ts b/src/client/graphics/layers/GameRightSidebar.ts index 4cc09f070..a0cce5bfb 100644 --- a/src/client/graphics/layers/GameRightSidebar.ts +++ b/src/client/graphics/layers/GameRightSidebar.ts @@ -5,7 +5,7 @@ import { GameType } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; import { crazyGamesSDK } from "../../CrazyGamesSDK"; import { PauseGameIntentEvent, SendWinnerEvent } from "../../Transport"; -import { translateText } from "../../Utils"; +import { secondsToHms, translateText } from "../../Utils"; import { ImmunityBarVisibleEvent } from "./ImmunityTimer"; import { Layer } from "./Layer"; import { ShowReplayPanelEvent } from "./ReplayPanel"; @@ -111,20 +111,6 @@ export class GameRightSidebar extends LitElement implements Layer { } } - private secondsToHms = (d: number): string => { - const pad = (n: number) => (n < 10 ? `0${n}` : n); - - const h = Math.floor(d / 3600); - const m = Math.floor((d % 3600) / 60); - const s = Math.floor((d % 3600) % 60); - - if (h !== 0) { - return `${pad(h)}:${pad(m)}:${pad(s)}`; - } else { - return `${pad(m)}:${pad(s)}`; - } - }; - private toggleReplayPanel(): void { this._isReplayVisible = !this._isReplayVisible; this.eventBus.emit( @@ -179,7 +165,7 @@ export class GameRightSidebar extends LitElement implements Layer { @contextmenu=${(e: Event) => e.preventDefault()} > -
${this.secondsToHms(this.timer)}
+
${secondsToHms(this.timer)}
${this.maybeRenderReplayButtons()} diff --git a/src/client/graphics/layers/TeamStats.ts b/src/client/graphics/layers/TeamStats.ts index 95ed56993..c011d421f 100644 --- a/src/client/graphics/layers/TeamStats.ts +++ b/src/client/graphics/layers/TeamStats.ts @@ -13,18 +13,11 @@ import { formatPercentage, renderNumber, renderTroops, + secondsToHms, translateText, } from "../../Utils"; import { Layer } from "./Layer"; -function formatCrownTime(ticks: number): string { - const seconds = Math.floor(ticks / 10); - if (seconds <= 0) return "0:00"; - const m = Math.floor(seconds / 60); - const s = seconds % 60; - return `${m}:${String(s).padStart(2, "0")}`; -} - type ViewMode = "control" | "units" | "competitive"; interface TeamEntry { @@ -342,7 +335,8 @@ export class TeamStats extends LitElement implements Layer { return html`
${td(team.teamName)} ${td(team.totalScoreStr)} - ${td(team.peakScoreStr)} ${td(formatCrownTime(team.crownTicks))} + ${td(team.peakScoreStr)} + ${td(secondsToHms(Math.floor(team.crownTicks / 10)))}
`; } diff --git a/src/client/graphics/layers/WinModal.ts b/src/client/graphics/layers/WinModal.ts index 15f7372e0..a82b9afc0 100644 --- a/src/client/graphics/layers/WinModal.ts +++ b/src/client/graphics/layers/WinModal.ts @@ -3,6 +3,7 @@ import { customElement, state } from "lit/decorators.js"; import { getGamesPlayed, isInIframe, + secondsToHms, translateText, TUTORIAL_VIDEO_URL, } from "../../../client/Utils"; @@ -108,12 +109,6 @@ export class WinModal extends LitElement implements Layer { `; } - private formatTime(seconds: number): string { - const m = Math.floor(seconds / 60); - const s = seconds % 60; - return `${m}m${String(s).padStart(2, "0")}s`; - } - private _tooltip: HTMLDivElement | null = null; private _showTooltip(e: MouseEvent, text: string) { @@ -197,7 +192,7 @@ export class WinModal extends LitElement implements Layer { ${s.crownTimePoints} ${this.renderInfoIcon( - `${s.team} ranked #${s.crownTimeRank} in crown time (${this.formatTime(s.crownTimeSeconds)})`, + `${s.team} ranked #${s.crownTimeRank} in crown time (${secondsToHms(s.crownTimeSeconds)})`, )}