feat(ui): F8-12 — owner feedback round 2 (#55)
* Bug fix: theme flip no longer leaves planets oversized. The camera-preserving remount now calls a new `RendererHandle.refreshCameraDerivedDraws` explicitly after the manual moveCenter/setZoom pair so the post-mount geometry tracks `viewport.scaled` even if pixi-viewport's `'zoomed'` listener races the next Ticker tick. * Doc #3: clicks on a planet label route through the same hit-test path as a click on the disc. The label `Container` now has a pointer hit area sized to the text + frame padding; pointertap simulates a click at the planet centre, so selection and pick-mode resolution behave identically. * Doc #4: battle X-crosses + cargo arrowhead wings grow sub-linearly with zoom (PLANET_SIZE_ZOOM_ALPHA). New `Style.softLengthAnchor` ('center' / 'start') makes the renderer treat the recorded endpoints as the geometry "at the reference scale" and rescale around the midpoint (X-cross) or the start endpoint (arrow wings). Arrowhead base length is halved from 6 to 3 world units to match the owner's "in half" request. * Doc #5: picker overlay loses the anchor ring at the source, the cursor line drops to a cargo-route-thin 0.6 px stroke, and the hover ring around the destination is replaced by a planet-style outline (visible disc + 1 px padding) in the `pickHighlight` accent — so candidate destinations read like selection in warm yellow. * Doc #6: regression test pins the in-disc hit zone. * Perf #1: camera-driven redraws are throttled onto the next Ticker tick. A rapid wheel / pinch burst now coalesces into at most one `clear() + redraw` pass per painted frame, which keeps the 500-planet map responsive on zoom and toggle flips. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -599,6 +599,14 @@ preference the store already manages.
|
||||
handle.viewport.moveCenter(world.width / 2, world.height / 2);
|
||||
handle.viewport.setZoom(minScale * 1.05, true);
|
||||
}
|
||||
// `viewport.setZoom` emits `zoomed` through the next Ticker
|
||||
// tick, but the handler can race the synchronous setExtras /
|
||||
// label / outline calls that follow — and a theme-flip
|
||||
// remount has been observed to leave primitives drawn at the
|
||||
// boot scale until the user nudges the wheel. Force the
|
||||
// camera-derived redraw explicitly here so the post-mount
|
||||
// state always matches `viewport.scaled`.
|
||||
handle.refreshCameraDerivedDraws();
|
||||
if (mode === "no-wrap") handle.setMode("no-wrap");
|
||||
detachClick = handle.onClick(handleMapClick);
|
||||
pickService?.bindResolver(({ sourcePlanetNumber, reachableIds, onResolve }) => {
|
||||
|
||||
Reference in New Issue
Block a user