@edv4h/usketch-plugin-map 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autotile.d.ts +4 -0
- package/dist/autotile.d.ts.map +1 -1
- package/dist/autotile.js +7 -3
- package/dist/autotile.js.map +1 -1
- package/dist/base/base-layer.d.ts +3 -1
- package/dist/base/base-layer.d.ts.map +1 -1
- package/dist/base/base-layer.js +65 -54
- package/dist/base/base-layer.js.map +1 -1
- package/dist/base/base-map-shape.d.ts +3 -2
- package/dist/base/base-map-shape.d.ts.map +1 -1
- package/dist/base/base-map-shape.js.map +1 -1
- package/dist/base/base-ops.d.ts +6 -8
- package/dist/base/base-ops.d.ts.map +1 -1
- package/dist/base/base-ops.js +15 -63
- package/dist/base/base-ops.js.map +1 -1
- package/dist/base/territory-style.d.ts +63 -0
- package/dist/base/territory-style.d.ts.map +1 -0
- package/dist/base/territory-style.js +34 -0
- package/dist/base/territory-style.js.map +1 -0
- package/dist/base/territory.d.ts.map +1 -1
- package/dist/base/territory.js +11 -17
- package/dist/base/territory.js.map +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +6 -4
- package/dist/generate.js.map +1 -1
- package/dist/icon-render.d.ts +10 -0
- package/dist/icon-render.d.ts.map +1 -0
- package/dist/icon-render.js +26 -0
- package/dist/icon-render.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/map-icon-layer.d.ts +9 -0
- package/dist/map-icon-layer.d.ts.map +1 -0
- package/dist/map-icon-layer.js +55 -0
- package/dist/map-icon-layer.js.map +1 -0
- package/dist/map-service.d.ts +14 -1
- package/dist/map-service.d.ts.map +1 -1
- package/dist/map-service.js +36 -1
- package/dist/map-service.js.map +1 -1
- package/dist/map-tool.d.ts.map +1 -1
- package/dist/map-tool.js +89 -54
- package/dist/map-tool.js.map +1 -1
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +19 -5
- package/dist/plugin.js.map +1 -1
- package/dist/tilemap-shape.d.ts +15 -3
- package/dist/tilemap-shape.d.ts.map +1 -1
- package/dist/tilemap-shape.js +40 -14
- package/dist/tilemap-shape.js.map +1 -1
- package/package.json +1 -1
- package/dist/map-icon-shape.d.ts +0 -17
- package/dist/map-icon-shape.d.ts.map +0 -1
- package/dist/map-icon-shape.js +0 -106
- package/dist/map-icon-shape.js.map +0 -1
package/dist/autotile.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { BoundingBox } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { TerrainKey } from "./terrain.js";
|
|
3
3
|
export type Cells = Record<string, TerrainKey>;
|
|
4
|
+
/** Sparse grid of world-layer icons: cellKey → iconKey (one icon per cell). */
|
|
5
|
+
export type IconCells = Record<string, string>;
|
|
4
6
|
/** Sparse-map key for a cell. */
|
|
5
7
|
export declare function cellKey(col: number, row: number): string;
|
|
6
8
|
export declare function parseCellKey(key: string): [col: number, row: number];
|
|
@@ -12,6 +14,8 @@ export declare function worldToCell(x: number, y: number, tile: number): [col: n
|
|
|
12
14
|
* when the cell is unset and no fallback is given.
|
|
13
15
|
*/
|
|
14
16
|
export declare function terrainAtCell(cells: Cells, col: number, row: number, empty?: TerrainKey | null): TerrainKey | undefined;
|
|
17
|
+
/** Bounding box (world units) enclosing all given cell keys. Empty → zero box. */
|
|
18
|
+
export declare function keysBounds(keys: Iterable<string>, tile: number): BoundingBox;
|
|
15
19
|
/** Bounding box (world units) enclosing all painted cells. Empty → zero box. */
|
|
16
20
|
export declare function cellsBounds(cells: Cells, tile: number): BoundingBox;
|
|
17
21
|
export interface ExposedEdges {
|
package/dist/autotile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autotile.d.ts","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE/C,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAGpE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,UAAU,GAAG,SAAS,CAExB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"autotile.d.ts","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC/C,+EAA+E;AAC/E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAGpE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,UAAU,GAAG,SAAS,CAExB;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAmB5E;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAEnE;AAED,MAAM,WAAW,YAAY;IAC5B,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;CACX;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,YAAY,CASd;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,OAAO,GACX,MAAM,EAAE,CAuBV;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,GAAG,CAAC,EAAE,OAAO,GACX,MAAM,EAAE,CAIV;AAED,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IAClC,kFAAkF;IAClF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd,kBAAkB,CAiCpB"}
|
package/dist/autotile.js
CHANGED
|
@@ -18,13 +18,13 @@ export function worldToCell(x, y, tile) {
|
|
|
18
18
|
export function terrainAtCell(cells, col, row, empty) {
|
|
19
19
|
return cells[cellKey(col, row)] ?? empty ?? undefined;
|
|
20
20
|
}
|
|
21
|
-
/** Bounding box (world units) enclosing all
|
|
22
|
-
export function
|
|
21
|
+
/** Bounding box (world units) enclosing all given cell keys. Empty → zero box. */
|
|
22
|
+
export function keysBounds(keys, tile) {
|
|
23
23
|
let minC = Infinity;
|
|
24
24
|
let minR = Infinity;
|
|
25
25
|
let maxC = -Infinity;
|
|
26
26
|
let maxR = -Infinity;
|
|
27
|
-
for (const key of
|
|
27
|
+
for (const key of keys) {
|
|
28
28
|
const [c, r] = parseCellKey(key);
|
|
29
29
|
if (c < minC)
|
|
30
30
|
minC = c;
|
|
@@ -44,6 +44,10 @@ export function cellsBounds(cells, tile) {
|
|
|
44
44
|
height: (maxR - minR + 1) * tile,
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
+
/** Bounding box (world units) enclosing all painted cells. Empty → zero box. */
|
|
48
|
+
export function cellsBounds(cells, tile) {
|
|
49
|
+
return keysBounds(Object.keys(cells), tile);
|
|
50
|
+
}
|
|
47
51
|
/**
|
|
48
52
|
* Which sides of cell (c,r) border a different terrain. Unset neighbours count as
|
|
49
53
|
* `empty` (the fallback terrain), so e.g. a water tile next to unpainted space
|
package/dist/autotile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autotile.js","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autotile.js","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { BoardStore, RenderMode } from "@edv4h/usketch-shared";
|
|
2
|
-
|
|
2
|
+
import type { ResolvedTerritoryStyle } from "./territory-style.js";
|
|
3
|
+
export declare function BaseAreaLayer({ store, renderMode, style, }: {
|
|
3
4
|
store: BoardStore;
|
|
4
5
|
renderMode?: RenderMode;
|
|
6
|
+
style: ResolvedTerritoryStyle;
|
|
5
7
|
}): import("react").JSX.Element | null;
|
|
6
8
|
//# sourceMappingURL=base-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-layer.d.ts","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-layer.d.ts","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAWpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AA4FnE,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,KAAK,GACL,EAAE;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,sBAAsB,CAAC;CAC9B,sCA0IA"}
|
package/dist/base/base-layer.js
CHANGED
|
@@ -2,21 +2,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import { exposedEdges, parseCellKey } from "../autotile.js";
|
|
4
4
|
import { blockFactor, downsampleCells, tileDetail } from "../lod.js";
|
|
5
|
-
import { MAP_ICON_TYPE } from "../map-icon-shape.js";
|
|
6
5
|
import { visibleCellRange, visibleWorldRect } from "../map-layer.js";
|
|
7
6
|
import { MAP_TOOL_ID } from "../map-tool-id.js";
|
|
8
7
|
import { useMapToolState } from "../tool-state.js";
|
|
9
8
|
import { baseRegionAnchors, getBaseMap } from "./base-ops.js";
|
|
10
9
|
import { useBaseState } from "./base-state.js";
|
|
11
10
|
import { computeTerritory } from "./territory.js";
|
|
12
|
-
const FILL_OPACITY = 0.24;
|
|
13
|
-
const BORDER_RATIO = 0.16; // border strip thickness, fraction of a tile
|
|
14
|
-
const BORDER_OPACITY = 0.85;
|
|
15
11
|
/** Full tier: per-cell translucent fill + base-coloured border on region edges. */
|
|
16
|
-
function renderFull(owner, bases, tile, visible) {
|
|
12
|
+
function renderFull(owner, bases, tile, visible, style) {
|
|
17
13
|
const nodes = [];
|
|
18
14
|
const asCells = owner; // exposedEdges only compares values
|
|
19
|
-
const bt =
|
|
15
|
+
const bt = style.border.ratio * tile;
|
|
20
16
|
const range = visibleCellRange(visible, tile);
|
|
21
17
|
const emit = (c, r) => {
|
|
22
18
|
const baseId = owner[`${c},${r}`];
|
|
@@ -27,9 +23,9 @@ function renderFull(owner, bases, tile, visible) {
|
|
|
27
23
|
return;
|
|
28
24
|
const x = c * tile;
|
|
29
25
|
const y = r * tile;
|
|
30
|
-
nodes.push(_jsx("rect", { x: x, y: y, width: tile, height: tile, fill: color, fillOpacity:
|
|
26
|
+
nodes.push(_jsx("rect", { x: x, y: y, width: tile, height: tile, fill: color, fillOpacity: style.fillOpacity }, `${c},${r}:f`));
|
|
31
27
|
const edge = exposedEdges(asCells, c, r);
|
|
32
|
-
const strip = (sx, sy, sw, sh, k) => (_jsx("rect", { x: sx, y: sy, width: sw, height: sh, fill: color, fillOpacity:
|
|
28
|
+
const strip = (sx, sy, sw, sh, k) => (_jsx("rect", { x: sx, y: sy, width: sw, height: sh, fill: color, fillOpacity: style.border.opacity }, k));
|
|
33
29
|
if (edge.n)
|
|
34
30
|
nodes.push(strip(x, y, tile, bt, `${c},${r}:n`));
|
|
35
31
|
if (edge.s)
|
|
@@ -53,7 +49,7 @@ function renderFull(owner, bases, tile, visible) {
|
|
|
53
49
|
return nodes;
|
|
54
50
|
}
|
|
55
51
|
/** Coarse tier: flat translucent blocks (downsampled by owning base). */
|
|
56
|
-
function renderCoarse(owner, bases, tile, screenTilePx, visible) {
|
|
52
|
+
function renderCoarse(owner, bases, tile, screenTilePx, visible, fillOpacity) {
|
|
57
53
|
const factor = blockFactor(screenTilePx);
|
|
58
54
|
const bt = factor * tile;
|
|
59
55
|
const nodes = [];
|
|
@@ -68,11 +64,11 @@ function renderCoarse(owner, bases, tile, screenTilePx, visible) {
|
|
|
68
64
|
(x > visible.right || y > visible.bottom || x + bt < visible.left || y + bt < visible.top)) {
|
|
69
65
|
continue;
|
|
70
66
|
}
|
|
71
|
-
nodes.push(_jsx("rect", { x: x, y: y, width: bt, height: bt, fill: color, fillOpacity:
|
|
67
|
+
nodes.push(_jsx("rect", { x: x, y: y, width: bt, height: bt, fill: color, fillOpacity: fillOpacity }, bk));
|
|
72
68
|
}
|
|
73
69
|
return nodes;
|
|
74
70
|
}
|
|
75
|
-
export function BaseAreaLayer({ store, renderMode, }) {
|
|
71
|
+
export function BaseAreaLayer({ store, renderMode, style, }) {
|
|
76
72
|
const tool = useMapToolState();
|
|
77
73
|
const baseState = useBaseState();
|
|
78
74
|
const [, force] = useState(0);
|
|
@@ -88,11 +84,12 @@ export function BaseAreaLayer({ store, renderMode, }) {
|
|
|
88
84
|
cancelAnimationFrame(rafRef.current);
|
|
89
85
|
};
|
|
90
86
|
}, [store]);
|
|
91
|
-
//
|
|
92
|
-
// submode) — mirrors the EnterBanner indicator gating.
|
|
93
|
-
//
|
|
87
|
+
// By default territory paint is only shown while editing bases (map tool + base
|
|
88
|
+
// submode) — mirrors the EnterBanner indicator gating. Hosts can opt into
|
|
89
|
+
// `show: "always"` to surface areas to end users. Check mode first so base-mode
|
|
90
|
+
// gating skips the shape scan in getBaseMap on every non-base-mode re-render.
|
|
94
91
|
const inBaseMode = store.getActiveToolId() === MAP_TOOL_ID && tool.mode === "base";
|
|
95
|
-
if (!inBaseMode)
|
|
92
|
+
if (style.show === "base-mode" && !inBaseMode)
|
|
96
93
|
return null;
|
|
97
94
|
const base = getBaseMap(store);
|
|
98
95
|
if (!base)
|
|
@@ -107,48 +104,62 @@ export function BaseAreaLayer({ store, renderMode, }) {
|
|
|
107
104
|
const screenTilePx = tile * vp.zoom;
|
|
108
105
|
const detail = tileDetail(screenTilePx, renderMode);
|
|
109
106
|
const cells = detail === "full"
|
|
110
|
-
? renderFull(territory, base.bases, tile, visible)
|
|
111
|
-
: renderCoarse(territory, base.bases, tile, screenTilePx, visible);
|
|
112
|
-
// Labels: HTML chips at screen coords (crisp, constant size). Hidden when coarse
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
? renderFull(territory, base.bases, tile, visible, style)
|
|
108
|
+
: renderCoarse(territory, base.bases, tile, screenTilePx, visible, style.fillOpacity);
|
|
109
|
+
// Labels: HTML chips at screen coords (crisp, constant size). Hidden when coarse
|
|
110
|
+
// or disabled via style.
|
|
111
|
+
const anchors = detail === "full" && style.label.enabled ? baseRegionAnchors(territory, base.bases, tile) : [];
|
|
112
|
+
// Radius rings around each base's beacon CELL. Full detail only; radius + colour
|
|
113
|
+
// come from the base registry (no icon shapes involved anymore).
|
|
115
114
|
const rings = [];
|
|
116
|
-
if (detail === "full") {
|
|
117
|
-
for (const [,
|
|
118
|
-
if (
|
|
115
|
+
if (detail === "full" && style.ring.enabled) {
|
|
116
|
+
for (const [baseId, info] of Object.entries(base.bases)) {
|
|
117
|
+
if (!info.beaconCell)
|
|
119
118
|
continue;
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
continue;
|
|
123
|
-
const info = base.bases[meta.baseId];
|
|
124
|
-
if (!info)
|
|
125
|
-
continue;
|
|
126
|
-
const color = info.color;
|
|
127
|
-
rings.push(_jsx("circle", { cx: s.x + s.width / 2, cy: s.y + s.height / 2, r: info.radius * tile, fill: "none", stroke: color, strokeWidth: 2, strokeDasharray: "8 6", opacity: 0.7, vectorEffect: "non-scaling-stroke" }, `ring-${s.id}`));
|
|
119
|
+
const [col, row] = parseCellKey(info.beaconCell);
|
|
120
|
+
rings.push(_jsx("circle", { cx: (col + 0.5) * tile, cy: (row + 0.5) * tile, r: info.radius * tile, fill: "none", stroke: info.color, strokeWidth: style.ring.strokeWidth, strokeDasharray: style.ring.dash, opacity: style.ring.opacity, vectorEffect: "non-scaling-stroke" }, `ring-${baseId}`));
|
|
128
121
|
}
|
|
129
122
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
123
|
+
const labelRender = style.label.render;
|
|
124
|
+
return (_jsxs("div", { style: { position: "absolute", inset: 0, pointerEvents: "none", overflow: "hidden" }, children: [_jsx("svg", { width: "100%", height: "100%", style: { display: "block", overflow: "visible" }, children: _jsxs("g", { transform: `translate(${vp.x} ${vp.y}) scale(${vp.zoom})`, children: [cells, rings] }) }), anchors.map((a) => {
|
|
125
|
+
const left = a.x * vp.zoom + vp.x;
|
|
126
|
+
const top = a.y * vp.zoom + vp.y;
|
|
127
|
+
if (labelRender) {
|
|
128
|
+
// Host owns the chip; the layer only positions it at the region centre.
|
|
129
|
+
const custom = labelRender(a);
|
|
130
|
+
if (custom == null)
|
|
131
|
+
return null;
|
|
132
|
+
return (_jsx("div", { style: {
|
|
133
|
+
position: "absolute",
|
|
134
|
+
left,
|
|
135
|
+
top,
|
|
136
|
+
transform: "translate(-50%,-50%)",
|
|
137
|
+
pointerEvents: "none",
|
|
138
|
+
}, children: custom }, a.baseId));
|
|
139
|
+
}
|
|
140
|
+
return (_jsxs("div", { style: {
|
|
141
|
+
position: "absolute",
|
|
142
|
+
left,
|
|
143
|
+
top,
|
|
144
|
+
transform: "translate(-50%,-50%)",
|
|
145
|
+
display: "flex",
|
|
146
|
+
alignItems: "center",
|
|
147
|
+
gap: 5,
|
|
148
|
+
padding: "3px 9px",
|
|
149
|
+
background: "rgba(255,255,255,.9)",
|
|
150
|
+
border: `2px solid ${a.color}`,
|
|
151
|
+
borderRadius: 20,
|
|
152
|
+
font: "700 12px system-ui, sans-serif",
|
|
153
|
+
color: "#1c1c1c",
|
|
154
|
+
whiteSpace: "nowrap",
|
|
155
|
+
boxShadow: "0 2px 8px rgba(0,0,0,.14)",
|
|
156
|
+
}, children: [_jsx("span", { style: {
|
|
157
|
+
width: 10,
|
|
158
|
+
height: 10,
|
|
159
|
+
borderRadius: "50%",
|
|
160
|
+
background: a.color,
|
|
161
|
+
flex: "none",
|
|
162
|
+
} }), a.name] }, a.baseId));
|
|
163
|
+
})] }));
|
|
153
164
|
}
|
|
154
165
|
//# sourceMappingURL=base-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-layer.js","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAc,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base-layer.js","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,9 @@ export interface BaseInfo {
|
|
|
5
5
|
color: string;
|
|
6
6
|
/** Territory radius in tiles around the beacon (the core is always owned). */
|
|
7
7
|
radius: number;
|
|
8
|
-
/** The single beacon: the
|
|
9
|
-
|
|
8
|
+
/** The single beacon: the grid cell (`cellKey("c,r")`) whose centre seeds this
|
|
9
|
+
* base's core disk. Undefined until the user places a beacon in base mode. */
|
|
10
|
+
beaconCell?: string;
|
|
10
11
|
}
|
|
11
12
|
export declare const DEFAULT_BASE_RADIUS = 5;
|
|
12
13
|
export interface BaseMapShapeData extends ShapeData {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-map-shape.d.ts","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIrF,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf
|
|
1
|
+
{"version":3,"file":"base-map-shape.d.ts","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIrF,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf;mFAC+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IAClD,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAChC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,IAAI,gBAAgB,CAErE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAa1D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,MAAqB,GAAG,eAAe,CA4BzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-map-shape.js","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"base-map-shape.js","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAYxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAQrC,MAAM,UAAU,SAAS,CAAC,KAAgB;IACzC,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACvC,OAAO;QACN,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,UAAU;QAChB,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QACjF,IAAI;QACJ,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;KACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAI,GAAW,YAAY;IACvE,OAAO;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,aAAK;QACnB,YAAY,EAAE,KAAK;QACnB,2EAA2E;QAC3E,yCAAyC;QACzC,SAAS,EAAE,GAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;QACpB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,CAAC,IAAI,EAAa,EAAE,CAAC,IAAI;QACjC,aAAa,EAAE,CAAC,MAAM,EAAa,EAAE,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAC/E,cAAc,EAAE,CAAC,IAAI,EAA2B,EAAE;YACjD,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,OAAO;gBACN,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;gBAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACtD,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC,IAAI,EAA2B,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,OAAO;gBACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;qBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBAClB,IAAI,CAAC,IAAI,CAAC;aACZ,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/base/base-ops.d.ts
CHANGED
|
@@ -28,16 +28,14 @@ export declare function getBaseMap(store: BoardStore): BaseMapShapeData | undefi
|
|
|
28
28
|
/** Create a new base (name + colour, default radius); returns its id. Undoable. */
|
|
29
29
|
export declare function createBase(deps: BaseDeps, name: string, color: string): string;
|
|
30
30
|
/**
|
|
31
|
-
* Make `
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* base or icon is missing, or the icon is already this base's beacon.
|
|
31
|
+
* Make `cell` (a `cellKey("c,r")`) the (single) beacon of `baseId`. Enforces 1:1 —
|
|
32
|
+
* any other base that used the same cell is detached. Undoable. No-op if the base
|
|
33
|
+
* is missing or is already beaconed at `cell`.
|
|
35
34
|
*/
|
|
36
|
-
export declare function setBeacon(deps: BaseDeps,
|
|
35
|
+
export declare function setBeacon(deps: BaseDeps, cell: string, baseId: string): void;
|
|
37
36
|
/**
|
|
38
|
-
* Remove a base from the registry (its derived territory disappears).
|
|
39
|
-
*
|
|
40
|
-
* Undoable. No-op if the base doesn't exist.
|
|
37
|
+
* Remove a base from the registry (its derived territory disappears). Undoable.
|
|
38
|
+
* No-op if the base doesn't exist.
|
|
41
39
|
*/
|
|
42
40
|
export declare function deleteBase(deps: BaseDeps, baseId: string): void;
|
|
43
41
|
//# sourceMappingURL=base-ops.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-ops.d.ts","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAW,eAAe,EAAa,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-ops.d.ts","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAW,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAG7F,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,gBAAgB,EAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACb;AAID,yDAAyD;AACzD,wBAAgB,aAAa,CAC5B,SAAS,EAAE,SAAS,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAGf;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACd;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/B,IAAI,EAAE,MAAM,GACV,gBAAgB,EAAE,CA+BpB;AAID,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAOhG;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAG1E;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAe9E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqB5E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiB/D"}
|
package/dist/base/base-ops.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { generateId } from "@edv4h/usketch-shared";
|
|
2
2
|
import { cellKey, parseCellKey, worldToCell } from "../autotile.js";
|
|
3
|
-
import { MAP_ICON_TYPE } from "../map-icon-shape.js";
|
|
4
3
|
import { DEFAULT_BASE_RADIUS, isBaseMap, makeBaseMap, } from "./base-map-shape.js";
|
|
5
4
|
// ── Pure ─────────────────────────────────────────────────────────────────────
|
|
6
5
|
/** Base id owning the cell at a world point, or null. */
|
|
@@ -75,66 +74,38 @@ export function createBase(deps, name, color) {
|
|
|
75
74
|
return baseId;
|
|
76
75
|
}
|
|
77
76
|
/**
|
|
78
|
-
* Make `
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* base or icon is missing, or the icon is already this base's beacon.
|
|
77
|
+
* Make `cell` (a `cellKey("c,r")`) the (single) beacon of `baseId`. Enforces 1:1 —
|
|
78
|
+
* any other base that used the same cell is detached. Undoable. No-op if the base
|
|
79
|
+
* is missing or is already beaconed at `cell`.
|
|
82
80
|
*/
|
|
83
|
-
export function setBeacon(deps,
|
|
81
|
+
export function setBeacon(deps, cell, baseId) {
|
|
84
82
|
const { id } = resolveBaseMap(deps.store, deps.tile);
|
|
85
83
|
const shape = deps.store.getShape(id);
|
|
86
84
|
const base = shape?.bases[baseId];
|
|
87
85
|
if (!shape || !base)
|
|
88
86
|
return;
|
|
89
|
-
|
|
90
|
-
if (!icon || icon.type !== MAP_ICON_TYPE)
|
|
91
|
-
return;
|
|
92
|
-
if (base.beaconIconId === iconId)
|
|
87
|
+
if (base.beaconCell === cell)
|
|
93
88
|
return; // no change
|
|
94
89
|
const prevBases = shape.bases;
|
|
95
|
-
|
|
96
|
-
// New registry: set this base's beacon, and clear `iconId` from any other base.
|
|
90
|
+
// Set this base's beacon cell; clear the same cell from any other base.
|
|
97
91
|
const nextBases = {};
|
|
98
92
|
for (const [bid, info] of Object.entries(prevBases)) {
|
|
99
93
|
if (bid === baseId)
|
|
100
|
-
nextBases[bid] = { ...info,
|
|
101
|
-
else if (info.
|
|
102
|
-
nextBases[bid] = { ...info,
|
|
94
|
+
nextBases[bid] = { ...info, beaconCell: cell };
|
|
95
|
+
else if (info.beaconCell === cell)
|
|
96
|
+
nextBases[bid] = { ...info, beaconCell: undefined };
|
|
103
97
|
else
|
|
104
98
|
nextBases[bid] = info;
|
|
105
99
|
}
|
|
106
|
-
// Icon meta edits: link the new beacon; unlink the base's previous beacon.
|
|
107
|
-
const edits = [
|
|
108
|
-
{ id: iconId, prev: icon.meta, next: { ...icon.meta, baseId } },
|
|
109
|
-
];
|
|
110
|
-
if (prevBeaconId && prevBeaconId !== iconId) {
|
|
111
|
-
const prevIcon = deps.store.getShape(prevBeaconId);
|
|
112
|
-
if (prevIcon) {
|
|
113
|
-
edits.push({
|
|
114
|
-
id: prevBeaconId,
|
|
115
|
-
prev: prevIcon.meta,
|
|
116
|
-
next: { ...prevIcon.meta, baseId: undefined },
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
100
|
const command = {
|
|
121
|
-
execute: () => {
|
|
122
|
-
|
|
123
|
-
for (const e of edits)
|
|
124
|
-
deps.store.updateShape(e.id, { meta: e.next });
|
|
125
|
-
},
|
|
126
|
-
undo: () => {
|
|
127
|
-
deps.store.updateShape(id, { bases: prevBases });
|
|
128
|
-
for (const e of edits)
|
|
129
|
-
deps.store.updateShape(e.id, { meta: e.prev });
|
|
130
|
-
},
|
|
101
|
+
execute: () => deps.store.updateShape(id, { bases: nextBases }),
|
|
102
|
+
undo: () => deps.store.updateShape(id, { bases: prevBases }),
|
|
131
103
|
};
|
|
132
104
|
deps.commands.execute(command);
|
|
133
105
|
}
|
|
134
106
|
/**
|
|
135
|
-
* Remove a base from the registry (its derived territory disappears).
|
|
136
|
-
*
|
|
137
|
-
* Undoable. No-op if the base doesn't exist.
|
|
107
|
+
* Remove a base from the registry (its derived territory disappears). Undoable.
|
|
108
|
+
* No-op if the base doesn't exist.
|
|
138
109
|
*/
|
|
139
110
|
export function deleteBase(deps, baseId) {
|
|
140
111
|
const { id } = resolveBaseMap(deps.store, deps.tile);
|
|
@@ -148,28 +119,9 @@ export function deleteBase(deps, baseId) {
|
|
|
148
119
|
if (bid !== baseId)
|
|
149
120
|
nextBases[bid] = info;
|
|
150
121
|
}
|
|
151
|
-
const edits = [];
|
|
152
|
-
if (base.beaconIconId) {
|
|
153
|
-
const icon = deps.store.getShape(base.beaconIconId);
|
|
154
|
-
if (icon && icon.type === MAP_ICON_TYPE) {
|
|
155
|
-
edits.push({
|
|
156
|
-
id: base.beaconIconId,
|
|
157
|
-
prev: icon.meta,
|
|
158
|
-
next: { ...icon.meta, baseId: undefined },
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
122
|
const command = {
|
|
163
|
-
execute: () => {
|
|
164
|
-
|
|
165
|
-
for (const e of edits)
|
|
166
|
-
deps.store.updateShape(e.id, { meta: e.next });
|
|
167
|
-
},
|
|
168
|
-
undo: () => {
|
|
169
|
-
deps.store.updateShape(id, { bases: prevBases });
|
|
170
|
-
for (const e of edits)
|
|
171
|
-
deps.store.updateShape(e.id, { meta: e.prev });
|
|
172
|
-
},
|
|
123
|
+
execute: () => deps.store.updateShape(id, { bases: nextBases }),
|
|
124
|
+
undo: () => deps.store.updateShape(id, { bases: prevBases }),
|
|
173
125
|
};
|
|
174
126
|
deps.commands.execute(command);
|
|
175
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-ops.js","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"base-ops.js","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { BaseRegionAnchor } from "./base-ops.js";
|
|
3
|
+
/**
|
|
4
|
+
* Host-facing appearance options for the base "territory" (領域) overlay drawn by
|
|
5
|
+
* BaseAreaLayer. Everything is optional and merges over the defaults, so passing
|
|
6
|
+
* `{}` keeps the stock look. Pass via `createMapPlugin({ territory })`.
|
|
7
|
+
*/
|
|
8
|
+
export interface TerritoryStyle {
|
|
9
|
+
/** Per-cell translucent fill opacity (default 0.24). */
|
|
10
|
+
fillOpacity?: number;
|
|
11
|
+
/** Base-coloured strip drawn on the exposed edges of each region. */
|
|
12
|
+
border?: {
|
|
13
|
+
/** Strip thickness as a fraction of a tile (default 0.16). */
|
|
14
|
+
ratio?: number;
|
|
15
|
+
opacity?: number;
|
|
16
|
+
};
|
|
17
|
+
/** Dashed radius ring around each base's beacon cell. */
|
|
18
|
+
ring?: {
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
strokeWidth?: number;
|
|
21
|
+
/** SVG `stroke-dasharray` (default `"8 6"`). */
|
|
22
|
+
dash?: string;
|
|
23
|
+
opacity?: number;
|
|
24
|
+
};
|
|
25
|
+
/** Name-chip label at each region's centre. */
|
|
26
|
+
label?: {
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Custom label content for a region. The layer positions the returned node
|
|
30
|
+
* at the region centre (screen space); you own its look. Return `null` to
|
|
31
|
+
* draw no label for that region. Omit for the stock pill.
|
|
32
|
+
*/
|
|
33
|
+
render?: (anchor: BaseRegionAnchor) => ReactNode;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* When to paint the territory overlay:
|
|
37
|
+
* - `"base-mode"` (default) — only while editing bases (map tool + base submode),
|
|
38
|
+
* - `"always"` — whenever any territory exists (e.g. showing areas to end users).
|
|
39
|
+
*/
|
|
40
|
+
show?: "base-mode" | "always";
|
|
41
|
+
}
|
|
42
|
+
export interface ResolvedTerritoryStyle {
|
|
43
|
+
fillOpacity: number;
|
|
44
|
+
border: {
|
|
45
|
+
ratio: number;
|
|
46
|
+
opacity: number;
|
|
47
|
+
};
|
|
48
|
+
ring: {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
strokeWidth: number;
|
|
51
|
+
dash: string;
|
|
52
|
+
opacity: number;
|
|
53
|
+
};
|
|
54
|
+
label: {
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
render?: (anchor: BaseRegionAnchor) => ReactNode;
|
|
57
|
+
};
|
|
58
|
+
show: "base-mode" | "always";
|
|
59
|
+
}
|
|
60
|
+
/** The stock territory look (matches what shipped before the style option). */
|
|
61
|
+
export declare const DEFAULT_TERRITORY_STYLE: ResolvedTerritoryStyle;
|
|
62
|
+
export declare function resolveTerritoryStyle(style?: TerritoryStyle): ResolvedTerritoryStyle;
|
|
63
|
+
//# sourceMappingURL=territory-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"territory-style.d.ts","sourceRoot":"","sources":["../../src/base/territory-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,MAAM,CAAC,EAAE;QACR,8DAA8D;QAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,yDAAyD;IACzD,IAAI,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gDAAgD;QAChD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,+CAA+C;IAC/C,KAAK,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;WAIG;QACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,SAAS,CAAC;KACjD,CAAC;IACF;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,SAAS,CAAA;KAAE,CAAC;IAC9E,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC7B;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,EAAE,sBAMrC,CAAC;AAOF,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAoBpF"}
|