feat:add game!

This commit is contained in:
lennlouisgeek
2026-04-06 02:56:40 +08:00
parent 1c5ac13da8
commit aeb17f194c
4 changed files with 1294 additions and 116 deletions

View File

@@ -204,6 +204,7 @@
let isWindowMaximized = false;
let activeConfigLinkId = "stream-on";
let isConfigPanelOpen = false;
let isPrecisionTestOpen = false;
let hasSignalData = false;
let signalPanels: HudSignalPanel[] = buildInactivePanels();
let summary: HudSummary = buildEmptySummary();
@@ -232,7 +233,7 @@
let fileExplorerFileName = "";
$: uiCopy = copyByLocale[locale];
$: configLinks = buildConfigLinks(locale, activeConfigLinkId, isConfigPanelOpen);
$: configLinks = buildConfigLinks(locale, activeConfigLinkId, isConfigPanelOpen, isPrecisionTestOpen);
$: stageStatusText = webglStatusTone === "ok" ? uiCopy.runtimeReady : uiCopy.runtimeFallback;
$: leftSignalPanels = signalPanels.filter((panel) => panel.side === "left");
$: rightSignalPanels = signalPanels.filter((panel) => panel.side === "right");
@@ -970,19 +971,26 @@
});
}
function buildConfigLinks(currentLocale: LocaleCode, activeId: string, isSettingsOpen: boolean): HudConfigLink[] {
function buildConfigLinks(
currentLocale: LocaleCode,
activeId: string,
isSettingsOpen: boolean,
isPrecisionOpen: boolean
): HudConfigLink[] {
const labels =
currentLocale === "zh-CN"
? {
streamOn: "打开",
streamOff: "关闭",
calibrate: "校准",
precisionTest: "游戏",
settings: "参数"
}
: {
streamOn: "Open",
streamOff: "Close",
calibrate: "Calib",
precisionTest: "Game",
settings: "Setup"
};
@@ -1005,6 +1013,12 @@
tone: "cyan",
active: activeId === "calibrate"
},
{
id: "precision-test",
label: labels.precisionTest,
tone: "lime",
active: isPrecisionOpen
},
{
id: "settings",
label: labels.settings,
@@ -1443,11 +1457,19 @@
}
function handleConfigLink(event: CustomEvent<string>): void {
if (event.detail === "precision-test") {
isPrecisionTestOpen = !isPrecisionTestOpen;
isConfigPanelOpen = false;
return;
}
if (event.detail === "settings") {
isPrecisionTestOpen = false;
isConfigPanelOpen = !isConfigPanelOpen;
return;
}
isPrecisionTestOpen = false;
isConfigPanelOpen = false;
activeConfigLinkId = event.detail;
console.info("[hud] config link clicked:", event.detail);
@@ -1562,6 +1584,7 @@
/>
<CenterStage
{locale}
bind:matrixRows
bind:matrixCols
bind:rangeMin
@@ -1599,6 +1622,7 @@
rightPanels={rightSignalPanels}
{pressureMatrix}
showConfigPanel={isConfigPanelOpen}
showPrecisionTestPanel={isPrecisionTestOpen}
{summary}
on:replaytoggle={handleReplayToggle}
on:replaystop={handleReplayStop}
@@ -1607,14 +1631,16 @@
on:replayclose={handleReplayClose}
on:configclose={() => (isConfigPanelOpen = false)}
>
<section class="range-scale" aria-label="Signal Range">
<p class="range-label">Range</p>
<div class="range-track">
{#each rangeTicks as tick}
<span class="range-tick">{tick}</span>
{/each}
</div>
</section>
{#if !isPrecisionTestOpen}
<section class="range-scale" aria-label="Signal Range">
<p class="range-label">Range</p>
<div class="range-track">
{#each rangeTicks as tick}
<span class="range-tick">{tick}</span>
{/each}
</div>
</section>
{/if}
</CenterStage>
</div>