docs(ui): finalize MVP plan structure and de-archaeologize topic docs
MVP web client (Phases 1-30) is complete; reorganize planning + living docs around that. - PLAN.md kept as the staged MVP record (1-30) with a status block + pointers; removed the 31-36 stages, regression scenarios, and deferred-TODO section (moved out); fixed a stale cross-machine plan path. - ui/PLAN-finalize.md (new): active web-finalization plan in 8 stages (visual system, a11y, i18n, error UX, PWA, build hygiene, docs, owner manual-QA loop); absorbs former Phases 33 and 35. - ui/ROADMAP.md (new): post-MVP (Wails, Capacitor, realistic projection, acceptance + regression scenarios) and triaged deferred follow-ups. - ui/docs/README.md (new): grouped topic-doc index. - De-archaeologized all 20 ui/docs topic docs + ui/README.md + ui/core/README.md: stripped Phase-N build history, rewritten as current-state; deferred work now points at ROADMAP.md / PLAN-finalize.md. Docs-only; no code change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+22
-23
@@ -25,8 +25,7 @@ UI sits on top of. It must:
|
||||
2. Support pan and zoom over a toroidal world (`'torus'` mode) and
|
||||
over a bounded plane (`'no-wrap'` mode), both first-class.
|
||||
3. Run the same algorithm on web, Wails, Capacitor, and PWA
|
||||
targets — only the browser is supported in Phase 9, but no API
|
||||
in this module assumes the platform.
|
||||
targets — no API in this module assumes the platform.
|
||||
4. Provide deterministic hit-test for cursor-to-primitive mapping,
|
||||
with results that are unit-testable independently of Pixi.
|
||||
|
||||
@@ -76,11 +75,11 @@ overrides them.
|
||||
|
||||
## Theme
|
||||
|
||||
A single dark theme ships in Phase 9. The theme is a record of
|
||||
default colours; primitives whose `style` omits a colour fall back
|
||||
to the theme. Runtime theme switching is not implemented — Phase
|
||||
35 introduces light/dark and the materialise-on-theme-change
|
||||
cycle.
|
||||
A single dark theme is implemented. The theme is a record of default
|
||||
colours; primitives whose `style` omits a colour fall back to the
|
||||
theme. Runtime theme switching is not implemented — light/dark and
|
||||
the materialise-on-theme-change cycle are deferred to the
|
||||
finalization plan ([../PLAN-finalize.md](../PLAN-finalize.md)).
|
||||
|
||||
## Hit-test
|
||||
|
||||
@@ -134,7 +133,7 @@ Per-primitive distance:
|
||||
representation: from `(x1, y1)` to `(x1 + dx, y1 + dy)` where
|
||||
`(dx, dy)` is the torus-shortest delta from end-1 to end-2.
|
||||
|
||||
The brute-force `O(N)` walk is fine for the Phase 9 target of
|
||||
The brute-force `O(N)` walk is fine for the current target of
|
||||
~1000 primitives on every pointer event. Spatial indexing is
|
||||
deferred until profiling proves it necessary; PixiJS' culling and
|
||||
batching handle the draw side without help.
|
||||
@@ -260,10 +259,10 @@ average frame time over a scripted drag.
|
||||
|
||||
## Pick mode
|
||||
|
||||
Phase 16 introduced a generic *map-driven destination pick* the
|
||||
inspector uses for cargo routes and that ship-group dispatch
|
||||
(Phase 19/20) will reuse. The renderer owns the visual lifecycle;
|
||||
the Svelte side wraps it in a promise-shaped service.
|
||||
The renderer provides a generic *map-driven destination pick* that
|
||||
the inspector uses for cargo routes and ship-group dispatch. The
|
||||
renderer owns the visual lifecycle; the Svelte side wraps it in a
|
||||
promise-shaped service.
|
||||
|
||||
Lifecycle (`RendererHandle.setPickMode(opts)`):
|
||||
|
||||
@@ -321,17 +320,17 @@ freshly-pushed extras layer (cargo-route overlay, pending-Send
|
||||
tracks) does not silently un-hide a primitive whose id is in the
|
||||
current set.
|
||||
|
||||
The Phase 29 map view (`src/lib/active-view/map.svelte`) computes
|
||||
the set from the per-game `MapToggles` rune + the planet-cascade
|
||||
rule and pushes it on every effect run; toggling a checkbox
|
||||
flips visibility within one frame without a Pixi remount.
|
||||
The map view (`src/lib/active-view/map.svelte`) computes the set
|
||||
from the per-game `MapToggles` rune + the planet-cascade rule and
|
||||
pushes it on every effect run; toggling a checkbox flips visibility
|
||||
within one frame without a Pixi remount.
|
||||
|
||||
## Visible-hyperspace overlay (the "fog")
|
||||
|
||||
`RendererHandle.setVisibilityFog(circles)` draws (or removes) the
|
||||
Phase 29 fog overlay used to highlight the player's visible
|
||||
hyperspace. Each entry describes a circle around a LOCAL planet
|
||||
where the player has scanner / visibility coverage:
|
||||
fog overlay that highlights the player's visible hyperspace. Each
|
||||
entry describes a circle around a LOCAL planet where the player has
|
||||
scanner / visibility coverage:
|
||||
|
||||
- An empty list destroys the existing fog rectangles and mask.
|
||||
- A non-empty list rebuilds a single viewport-level `fogLayer` (a
|
||||
@@ -381,14 +380,14 @@ pixels:
|
||||
- `getMapPrimitives()` returns a snapshot of every primitive in
|
||||
the active world: id, kind, priority, current alpha
|
||||
(post-overlay), the explicit fill / stroke colour from its
|
||||
`Style` (no theme fallback), and the Phase 29 `visible` flag
|
||||
mirroring the renderer's hide set.
|
||||
`Style` (no theme fallback), and the `visible` flag mirroring the
|
||||
renderer's hide set.
|
||||
- `getMapPickState()` returns `{ active, sourcePlanetNumber,
|
||||
reachableIds, hoveredId }` — the renderer's view of the
|
||||
current pick session.
|
||||
- `getMapCamera()` returns the current camera + viewport +
|
||||
canvas-origin snapshot, used by Phase 29 e2e specs to assert
|
||||
camera preservation across wrap-mode flips.
|
||||
canvas-origin snapshot, used by e2e specs to assert camera
|
||||
preservation across wrap-mode flips.
|
||||
- `getMapFog()` returns the most recent fog input
|
||||
(the list of circles last passed to `setVisibilityFog`).
|
||||
Empty when the `visibleHyperspace` toggle is off.
|
||||
|
||||
Reference in New Issue
Block a user