diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 4753af0f6..3261a03dc 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -37,7 +37,6 @@ import { import { WorkerClient } from "../core/worker/WorkerClient"; import { getPersistentID } from "./Auth"; import { - AlternateViewEvent, AutoUpgradeEvent, DoBoatAttackEvent, DoBreakAllianceEvent, @@ -473,11 +472,6 @@ async function createClientGame( (e) => applyDayNightMode((e as CustomEvent).detail === "true"), ); - // Space-hold (and the settings-modal toggle) drives the affiliation - // recolor. InputHandler emits AlternateViewEvent; the WebGL view needs - // setAltView called to switch passes into alt mode. - eventBus.on(AlternateViewEvent, (e) => view.setAltView(e.alternateView)); - view.setShowPatterns(userSettings.territoryPatterns()); globalThis.addEventListener( `${USER_SETTINGS_CHANGED_EVENT}:settings.territoryPatterns`, diff --git a/src/client/controllers/ViewModeController.ts b/src/client/controllers/ViewModeController.ts new file mode 100644 index 000000000..5ffa021fc --- /dev/null +++ b/src/client/controllers/ViewModeController.ts @@ -0,0 +1,29 @@ +/** + * ViewModeController — forwards map view-mode toggles to the WebGL view. + * + * - AlternateViewEvent: space-hold (and the settings-modal toggle) drives the + * affiliation recolor + grid overlay + hides names. + * - ToggleCoordinateGridEvent: persistent coordinate-grid toggle (M keybind); + * grid shows but names stay visible. + */ + +import { EventBus } from "../../core/EventBus"; +import { Controller } from "../Controller"; +import { AlternateViewEvent, ToggleCoordinateGridEvent } from "../InputHandler"; +import { GameView as WebGLGameView } from "../render/gl"; + +export class ViewModeController implements Controller { + constructor( + private eventBus: EventBus, + private view: WebGLGameView, + ) {} + + init() { + this.eventBus.on(AlternateViewEvent, (e) => + this.view.setAltView(e.alternateView), + ); + this.eventBus.on(ToggleCoordinateGridEvent, (e) => + this.view.setGridView(e.enabled), + ); + } +} diff --git a/src/client/hud/GameRenderer.ts b/src/client/hud/GameRenderer.ts index 4dc2595e6..aa5bf7e87 100644 --- a/src/client/hud/GameRenderer.ts +++ b/src/client/hud/GameRenderer.ts @@ -8,6 +8,7 @@ import { UIState } from "../UIState"; import { BuildPreviewController } from "../controllers/BuildPreviewController"; import { HoverHighlightController } from "../controllers/HoverHighlightController"; import { StructureHighlightController } from "../controllers/StructureHighlightController"; +import { ViewModeController } from "../controllers/ViewModeController"; import { WarshipSelectionController } from "../controllers/WarshipSelectionController"; import { GameView as WebGLGameView } from "../render/gl"; import { FrameProfiler } from "./FrameProfiler"; @@ -281,6 +282,7 @@ export function createRenderer( ), new HoverHighlightController(game, eventBus, transformHandler, view), new StructureHighlightController(eventBus, view), + new ViewModeController(eventBus, view), new AttackingTroopsOverlay(game, transformHandler, eventBus, userSettings), eventsDisplay, actionableEvents, diff --git a/src/client/render/gl/GameView.ts b/src/client/render/gl/GameView.ts index 6d6e805cf..3a84a2a95 100644 --- a/src/client/render/gl/GameView.ts +++ b/src/client/render/gl/GameView.ts @@ -371,6 +371,9 @@ export class GameView { setAltView(active: boolean): void { this.renderer?.setAltView(active); } + setGridView(active: boolean): void { + this.renderer?.setGridView(active); + } setShowPatterns(active: boolean): void { this.renderer?.setShowPatterns(active); } diff --git a/src/client/render/gl/Renderer.ts b/src/client/render/gl/Renderer.ts index 33db1a4eb..b9a01518e 100644 --- a/src/client/render/gl/Renderer.ts +++ b/src/client/render/gl/Renderer.ts @@ -1176,8 +1176,10 @@ export class GPURenderer { this.worldTextPass.tick(); this.worldTextPass.draw(cam, zoom); - if (this.gridView) this.coordinateGridPass.draw(cam, zoom); - if (pe.name && !this.gridView) + // Grid shows on either trigger; names hide only under alt-view (space + // hold), not under the persistent M-key gridView toggle. + if (this.gridView || this.altView) this.coordinateGridPass.draw(cam, zoom); + if (pe.name && !this.altView) this.namePass.draw(cam, this.nightCompositePass.getAmbient()); this.radialMenuPass.draw(); diff --git a/src/client/render/gl/render-settings.json b/src/client/render/gl/render-settings.json index cd088f21f..6efae7d03 100644 --- a/src/client/render/gl/render-settings.json +++ b/src/client/render/gl/render-settings.json @@ -255,7 +255,7 @@ "gradientSolidEnd": 0.1 }, "altView": { - "gridFontSize": 16, + "gridFontSize": 24, "recolorStructures": true }, "tileDrip": {