You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of #110. Replaces node-to-node camera locking with free-cam exploration, where the viewport also drives the reveal query.
Player story
You drag freely across the world map instead of being snapped from one stop to the next, panning and zooming to take in the landscape at your own pace. Tapping a place still centers it — the view glides over rather than teleporting — but otherwise the camera is yours. However far you zoom out, what you see stays truthful: the view reflects what you've actually uncovered, never a degraded or partial picture. Pan to the far rim of everything and the view eases gently back instead of hitting a wall. Panning stays smooth even across an enormous map, because the view only pulls in what you're actually looking at. And drifting your camera over faraway regions never spills their secrets: you glimpse the shape of distant land, never what waits inside it, and no amount of scrolling around uncovers what a place holds before you've properly revealed it. Looking is free; knowing still has to be earned.
In one sentence: you roam the map freely — gliding to a place when you tap it, eased back softly at the world's rim — while what lies in the distance stays hidden until you legitimately reveal it.
Context
Travel is currently locked node-to-node for simplicity. Free cam lets the player pan across the map; as they do, the visible viewport drives the reveal query — a Morton/z-order range scan over the hex lattice (#191) — not just render culling.
Decisions settled during refinement:
Roam-only scope: this issue wires, throttles, and caches the viewport-driven reveal query; how revealed content is presented in the scene belongs to visual fog of war (visual fog of war #133), which consumes the cached reveal data this issue exposes.
The zoom limit is a tunable constant chosen on feel. The reveal query's viewport cell cap only binds at roughly 25–30× the current camera height, so any playable zoom limit keeps the whole visible area within a single capped query — the on-screen picture is always fully served, never partially.
Tap-to-focus survives on top of free panning: selecting a node glides the camera to center it.
The world boundary is soft: panning past the encodable coordinate range eases the camera back rather than stopping hard.
Scope
Camera pan and zoom input over the worldmap — pan and zoom only, the isometric rotation stays fixed — with a tunable zoom limit, replacing the locked node-to-node camera; selecting a node glides the camera to center it.
High-performance viewport filtering: convert the camera view to cell bounds on the 2d plane and range-scan the lattice for visible cells; memoize and throttle; geometry generation follows the viewport instead of a fixed slice around the origin.
The viewport drives the reveal query: the client issues viewport-bounded revealed-nodes queries and caches the results, exposing revealed content data for downstream presentation (visual fog of war #133).
A soft ease-back at the world coordinate boundary.
Security constraint
Free-cam / frustum fetches GEOMETRY silhouettes only — distant shapes visible through fog — and never triggers content disclosure. You can see distant terrain, never distant contents. Content discloses only through the reveal projection (#193) on legitimate reveal.
Dependencies
Blocked by the deterministic generator (#191); feeds visual fog (#133), which renders the reveal data this issue caches.
Acceptance
The player pans and zooms freely with viewport-bounded geometry rendering, under a tunable zoom limit.
The reveal query is driven by the viewport, and any viewport within the zoom limit fits a single capped query.
Selecting a node glides the camera to center it.
Panning past the world boundary eases back softly.
Part of #110. Replaces node-to-node camera locking with free-cam exploration, where the viewport also drives the reveal query.
Player story
You drag freely across the world map instead of being snapped from one stop to the next, panning and zooming to take in the landscape at your own pace. Tapping a place still centers it — the view glides over rather than teleporting — but otherwise the camera is yours. However far you zoom out, what you see stays truthful: the view reflects what you've actually uncovered, never a degraded or partial picture. Pan to the far rim of everything and the view eases gently back instead of hitting a wall. Panning stays smooth even across an enormous map, because the view only pulls in what you're actually looking at. And drifting your camera over faraway regions never spills their secrets: you glimpse the shape of distant land, never what waits inside it, and no amount of scrolling around uncovers what a place holds before you've properly revealed it. Looking is free; knowing still has to be earned.
In one sentence: you roam the map freely — gliding to a place when you tap it, eased back softly at the world's rim — while what lies in the distance stays hidden until you legitimately reveal it.
Context
Travel is currently locked node-to-node for simplicity. Free cam lets the player pan across the map; as they do, the visible viewport drives the reveal query — a Morton/z-order range scan over the hex lattice (#191) — not just render culling.
Decisions settled during refinement:
Scope
Security constraint
Free-cam / frustum fetches GEOMETRY silhouettes only — distant shapes visible through fog — and never triggers content disclosure. You can see distant terrain, never distant contents. Content discloses only through the reveal projection (#193) on legitimate reveal.
Dependencies
Blocked by the deterministic generator (#191); feeds visual fog (#133), which renders the reveal data this issue caches.
Acceptance