feat: add relay-backed web radar sharing

- publish radar state/bootstrap snapshots to an HTTP relay
- add shared waypoint sync through relay APIs and SSE updates
- add remote Caddy/deploy tooling and mock relay push script
- add static POIs, topo-tile availability checks, and tile-load throttling
- add WASM 3D map engine and Python map data-prep pipeline
- update worn clothing reads to include slot metadata
- add grid controls, render perf HUD, and marker/label scaling tweaks
- remove embedded map resource generation in favor of disk/relay maps
This commit is contained in:
67
2026-06-23 03:11:52 +08:00
parent 7f9a6620f9
commit 361c6baa8f
16 changed files with 539 additions and 147 deletions
+22 -7
View File
@@ -811,6 +811,18 @@ body.sidebar-hidden .viewport { left: 0; }
width: 10px; height: 10px;
}
.marker.shared-waypoint {
background: #f59e0b;
border: 2px solid #fde68a;
width: 10px; height: 10px;
border-radius: 2px;
transform: translate(-50%, -50%) rotate(45deg);
}
.shared-waypoint-label {
font-weight: 700;
}
.entity.bullet-phantom .marker.bullets {
opacity: 0.45;
box-shadow: 0 0 6px rgba(148,163,184,0.45);
@@ -957,11 +969,11 @@ body.sidebar-hidden .viewport { left: 0; }
/* ── Grid overlay ────────────────────────────────────────────────────── */
.grid-major { stroke: rgba(255,255,255,0.30); stroke-width: 1; }
.grid-minor { stroke: rgba(255,255,255,0.12); stroke-width: 0.5; }
.grid-major { stroke: rgba(255,255,255,0.30); stroke-width: calc(var(--grid-line-weight, 2.5) * var(--inv-scale, 1)); }
.grid-minor { stroke: rgba(255,255,255,0.12); stroke-width: calc(0.5 * var(--inv-scale, 1)); }
.canvas.satmap-active .grid-major { stroke: rgba(0,0,0,0.45); }
.canvas.satmap-active .grid-label-inner { font-size: 10px; color: rgba(0,0,0,0.90); text-shadow: 0 1px 1px rgba(255,255,255,0.6); }
.canvas.satmap-active .grid-major { stroke: rgba(0,0,0,0.45); stroke-width: calc(var(--grid-line-weight, 2.5) * var(--inv-scale, 1)); }
.canvas.satmap-active .grid-label-inner { font-size: var(--grid-label-size, 13px); color: rgba(0,0,0,0.90); text-shadow: 0 1px 1px rgba(255,255,255,0.6); }
.grid-label-wrapper {
position: absolute;
@@ -972,12 +984,13 @@ body.sidebar-hidden .viewport { left: 0; }
.canvas.grid-labels-visible .grid-label-wrapper { visibility: visible; }
.grid-label-inner {
font-size: 10px;
font-size: var(--grid-label-size, 13px);
font-family: monospace;
color: rgba(255,255,255,0.50);
color: rgba(255,255,255,0.55);
white-space: nowrap;
line-height: 1;
text-shadow: 0 1px 2px rgba(0,0,0,0.85);
text-shadow: 0 1px 3px rgba(0,0,0,0.95);
will-change: transform;
}
/* ── Combat mode ─────────────────────────────────────────────────────── */
@@ -1058,6 +1071,8 @@ body.measure-active .viewport { cursor: crosshair; }
}
.ctx-item:hover { background: var(--bg-hover); }
.ctx-item-shared { color: #f59e0b; }
.ctx-item-shared:hover { color: #fde68a; }
/* ── Coord bar ───────────────────────────────────────────────────────── */