@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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** The stock territory look (matches what shipped before the style option). */
|
|
2
|
+
export const DEFAULT_TERRITORY_STYLE = {
|
|
3
|
+
fillOpacity: 0.24,
|
|
4
|
+
border: { ratio: 0.16, opacity: 0.85 },
|
|
5
|
+
ring: { enabled: true, strokeWidth: 2, dash: "8 6", opacity: 0.7 },
|
|
6
|
+
label: { enabled: true },
|
|
7
|
+
show: "base-mode",
|
|
8
|
+
};
|
|
9
|
+
/** Keep the default whenever an override value is `undefined` (avoids NaN downstream). */
|
|
10
|
+
function pick(base, override) {
|
|
11
|
+
return override === undefined ? base : override;
|
|
12
|
+
}
|
|
13
|
+
export function resolveTerritoryStyle(style) {
|
|
14
|
+
const d = DEFAULT_TERRITORY_STYLE;
|
|
15
|
+
return {
|
|
16
|
+
fillOpacity: pick(d.fillOpacity, style?.fillOpacity),
|
|
17
|
+
border: {
|
|
18
|
+
ratio: pick(d.border.ratio, style?.border?.ratio),
|
|
19
|
+
opacity: pick(d.border.opacity, style?.border?.opacity),
|
|
20
|
+
},
|
|
21
|
+
ring: {
|
|
22
|
+
enabled: pick(d.ring.enabled, style?.ring?.enabled),
|
|
23
|
+
strokeWidth: pick(d.ring.strokeWidth, style?.ring?.strokeWidth),
|
|
24
|
+
dash: pick(d.ring.dash, style?.ring?.dash),
|
|
25
|
+
opacity: pick(d.ring.opacity, style?.ring?.opacity),
|
|
26
|
+
},
|
|
27
|
+
label: {
|
|
28
|
+
enabled: pick(d.label.enabled, style?.label?.enabled),
|
|
29
|
+
render: style?.label?.render,
|
|
30
|
+
},
|
|
31
|
+
show: pick(d.show, style?.show),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=territory-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"territory-style.js","sourceRoot":"","sources":["../../src/base/territory-style.ts"],"names":[],"mappings":"AAmDA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC9D,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACtC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;IAClE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;IACxB,IAAI,EAAE,WAAW;CACjB,CAAC;AAEF,0FAA0F;AAC1F,SAAS,IAAI,CAAI,IAAO,EAAE,QAAuB;IAChD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC3D,MAAM,CAAC,GAAG,uBAAuB,CAAC;IAClC,OAAO;QACN,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC;QACpD,MAAM,EAAE;YACP,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;YACjD,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;SACvD;QACD,IAAI,EAAE;YACL,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;YACnD,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC;YAC/D,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;SACnD;QACD,KAAK,EAAE;YACN,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;YACrD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;SAC5B;QACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;KAC/B,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"territory.d.ts","sourceRoot":"","sources":["../../src/base/territory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"territory.d.ts","sourceRoot":"","sources":["../../src/base/territory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKxD,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAqG/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,SAAS,CAuBX"}
|
package/dist/base/territory.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { cellKey, worldToCell } from "../autotile.js";
|
|
2
|
-
import { MAP_ICON_TYPE } from "../map-icon-shape.js";
|
|
1
|
+
import { cellKey, parseCellKey, worldToCell } from "../autotile.js";
|
|
3
2
|
import { isTileMap } from "../tilemap-shape.js";
|
|
4
3
|
import { isBaseMap } from "./base-map-shape.js";
|
|
5
4
|
const EMPTY_CELLS = {};
|
|
@@ -17,23 +16,18 @@ function findTilemap(store) {
|
|
|
17
16
|
return s;
|
|
18
17
|
return undefined;
|
|
19
18
|
}
|
|
20
|
-
function collectBeacons(
|
|
21
|
-
const icons = new Map();
|
|
22
|
-
for (const [, s] of store.getShapes()) {
|
|
23
|
-
if (s.type === MAP_ICON_TYPE)
|
|
24
|
-
icons.set(s.id, s);
|
|
25
|
-
}
|
|
19
|
+
function collectBeacons(bases, tile) {
|
|
26
20
|
const out = [];
|
|
27
21
|
for (const [baseId, info] of Object.entries(bases)) {
|
|
28
|
-
if (!info.
|
|
29
|
-
continue;
|
|
30
|
-
const icon = icons.get(info.beaconIconId);
|
|
31
|
-
if (!icon)
|
|
22
|
+
if (!info.beaconCell)
|
|
32
23
|
continue;
|
|
24
|
+
const [col, row] = parseCellKey(info.beaconCell);
|
|
25
|
+
// Seed the core disk from the cell CENTRE (world coords), so the existing
|
|
26
|
+
// distance-based rasterization in build() is unchanged.
|
|
33
27
|
out.push({
|
|
34
28
|
baseId,
|
|
35
|
-
cx:
|
|
36
|
-
cy:
|
|
29
|
+
cx: (col + 0.5) * tile,
|
|
30
|
+
cy: (row + 0.5) * tile,
|
|
37
31
|
radius: info.radius,
|
|
38
32
|
});
|
|
39
33
|
}
|
|
@@ -103,13 +97,13 @@ export function computeTerritory(store, tile, exclude) {
|
|
|
103
97
|
const base = findBaseMap(store);
|
|
104
98
|
if (!base || Object.keys(base.bases).length === 0)
|
|
105
99
|
return {};
|
|
106
|
-
const beacons = collectBeacons(store, base.bases);
|
|
107
|
-
if (beacons.length === 0)
|
|
108
|
-
return {};
|
|
109
100
|
const tilemap = findTilemap(store);
|
|
110
101
|
const cells = tilemap?.cells ?? EMPTY_CELLS;
|
|
111
102
|
const handPaint = tilemap?.handPaint ?? EMPTY_HAND_PAINT;
|
|
112
103
|
const t = tilemap?.tile ?? tile;
|
|
104
|
+
const beacons = collectBeacons(base.bases, t);
|
|
105
|
+
if (beacons.length === 0)
|
|
106
|
+
return {};
|
|
113
107
|
const sig = signature(beacons, exclude);
|
|
114
108
|
// Keyed by the `cells` object: it gets a fresh identity on every paint/generate
|
|
115
109
|
// commit, and `handPaint` always changes alongside it, so this stays correct.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"territory.js","sourceRoot":"","sources":["../../src/base/territory.ts"],"names":[],"mappings":"AAUA,OAAO,EAAc,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"territory.js","sourceRoot":"","sources":["../../src/base/territory.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAW,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAW,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,eAAe,CAAC;AAQlE,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAOhG;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAc9C;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcxE;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,GAAG,EAAE,OAAO,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CA4D9E"}
|
package/dist/generate.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createAddShapeCommand } from "@edv4h/usketch-store";
|
|
2
|
-
import { cellKey
|
|
2
|
+
import { cellKey } from "./autotile.js";
|
|
3
3
|
import { genStateStore } from "./gen-state.js";
|
|
4
4
|
import { GENERATORS_BY_ID } from "./generators/index.js";
|
|
5
|
-
import { isTileMap, makeTileMap } from "./tilemap-shape.js";
|
|
5
|
+
import { isTileMap, makeTileMap, tilemapBounds } from "./tilemap-shape.js";
|
|
6
6
|
/** Hard cap so a zoomed-out "view" generation can't explode into millions of cells. */
|
|
7
7
|
const MAX_BOX_DIM = 256;
|
|
8
8
|
/** The single shared tilemap, creating it (live) if none exists yet. */
|
|
@@ -79,8 +79,10 @@ export function generateIntoBox(deps, req) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
Object.assign(next, gen.generate({ box, seed: req.seed, params: req.params }));
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
// Bounds enclose the shape's placed icons too, so generating terrain doesn't
|
|
83
|
+
// clip an icon-only cell out of the box.
|
|
84
|
+
const prevBounds = tilemapBounds(prev, shape.icons, tile);
|
|
85
|
+
const nextBounds = tilemapBounds(next, shape.icons, tile);
|
|
84
86
|
if (created) {
|
|
85
87
|
// Newly created this action: commit as an add so undo deletes it and redo
|
|
86
88
|
// re-adds it (updateShape on a deleted id would no-op, breaking redo).
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAA4B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Render the icon `iconKey` filling the cell `(col,row)` on a `tile`-sized grid,
|
|
4
|
+
* i.e. the world rect `{ x: col*tile, y: row*tile, width: tile, height: tile }`.
|
|
5
|
+
* Returns `null` for an unknown icon key. Same transform chain as the old
|
|
6
|
+
* `MapIconBody`: translate to the cell, scale the viewBox to the tile, offset a
|
|
7
|
+
* non-zero viewBox origin.
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderIconAt(iconKey: string, col: number, row: number, tile: number, keyPrefix?: string): ReactElement | null;
|
|
10
|
+
//# sourceMappingURL=icon-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-render.d.ts","sourceRoot":"","sources":["../src/icon-render.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAS1C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,SAAK,GACZ,YAAY,GAAG,IAAI,CAgBrB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ICONS_BY_KEY } from "./icons.js";
|
|
3
|
+
import { renderSvgNodes } from "./svg-nodes.js";
|
|
4
|
+
function parseViewBox(vb) {
|
|
5
|
+
const p = vb.split(/[\s,]+/).map(Number);
|
|
6
|
+
return [p[0] || 0, p[1] || 0, p[2] || 48, p[3] || 48];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Render the icon `iconKey` filling the cell `(col,row)` on a `tile`-sized grid,
|
|
10
|
+
* i.e. the world rect `{ x: col*tile, y: row*tile, width: tile, height: tile }`.
|
|
11
|
+
* Returns `null` for an unknown icon key. Same transform chain as the old
|
|
12
|
+
* `MapIconBody`: translate to the cell, scale the viewBox to the tile, offset a
|
|
13
|
+
* non-zero viewBox origin.
|
|
14
|
+
*/
|
|
15
|
+
export function renderIconAt(iconKey, col, row, tile, keyPrefix = "") {
|
|
16
|
+
const icon = ICONS_BY_KEY.get(iconKey);
|
|
17
|
+
if (!icon)
|
|
18
|
+
return null;
|
|
19
|
+
const [vx, vy, vw, vh] = parseViewBox(icon.viewBox);
|
|
20
|
+
const sx = tile / vw;
|
|
21
|
+
const sy = tile / vh;
|
|
22
|
+
const x = col * tile;
|
|
23
|
+
const y = row * tile;
|
|
24
|
+
return (_jsx("g", { transform: `translate(${x} ${y}) scale(${sx} ${sy}) translate(${-vx} ${-vy})`, children: renderSvgNodes(icon.nodes, `icon-${icon.key}-${col}-${row}`) }, `${keyPrefix}${col},${row}`));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=icon-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-render.js","sourceRoot":"","sources":["../src/icon-render.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,SAAS,YAAY,CAAC,EAAU;IAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC3B,OAAe,EACf,GAAW,EACX,GAAW,EACX,IAAY,EACZ,SAAS,GAAG,EAAE;IAEd,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;IACrB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACrB,OAAO,CACN,YAEC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,YAE5E,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,IAHxD,GAAG,SAAS,GAAG,GAAG,IAAI,GAAG,EAAE,CAI7B,CACJ,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
export { BASE_MAP_TYPE, type BaseInfo, type BaseMapShapeData, } from "./base/base-map-shape.js";
|
|
2
|
+
export { type BaseRegionAnchor, baseIdAtWorld, baseRegionAnchors, getBaseMap, } from "./base/base-ops.js";
|
|
2
3
|
export { type BaseToolState, baseStateStore, useBaseState } from "./base/base-state.js";
|
|
3
4
|
export { computeTerritory, type Territory } from "./base/territory.js";
|
|
5
|
+
export { DEFAULT_TERRITORY_STYLE, type ResolvedTerritoryStyle, resolveTerritoryStyle, type TerritoryStyle, } from "./base/territory-style.js";
|
|
4
6
|
export { type BaseGenParams, baseTerrainAt, DEFAULT_BASE_GEN } from "./base-terrain.js";
|
|
5
7
|
export { type GenState, genStateStore, useGenState, type WorldRect } from "./gen-state.js";
|
|
6
8
|
export { resolveTilemap } from "./generate.js";
|
|
7
9
|
export { GENERATORS, type GenContext, type GenParam, type MapGenerator, } from "./generators/index.js";
|
|
10
|
+
export { renderIconAt } from "./icon-render.js";
|
|
8
11
|
export { ICONS, type IconCategory, type IconDef } from "./icons.js";
|
|
9
12
|
export { DEFAULT_INFINITE_SEED, disableInfiniteTerrain, type EnableInfiniteTerrainOptions, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
|
|
10
|
-
export { MAP_ICON_TYPE, type MapIconShapeData } from "./map-icon-shape.js";
|
|
11
13
|
export { createMapApi, getMapApi, type MapApi, mapService } from "./map-service.js";
|
|
12
14
|
export { MAP_TOOL_ID } from "./map-tool-id.js";
|
|
13
15
|
export type { ColorMode } from "./palette.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,KAAK,gBAAgB,EACrB,aAAa,EACb,iBAAiB,EACjB,UAAU,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EACN,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,qBAAqB,EACrB,KAAK,cAAc,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3F,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,UAAU,EACV,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAMpE,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACN,KAAK,iBAAiB,EACtB,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,KAAK,gBAAgB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,uBAAuB,EAC5B,kBAAkB,GAClB,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { BASE_MAP_TYPE, } from "./base/base-map-shape.js";
|
|
2
|
+
export { baseIdAtWorld, baseRegionAnchors, getBaseMap, } from "./base/base-ops.js";
|
|
2
3
|
export { baseStateStore, useBaseState } from "./base/base-state.js";
|
|
3
4
|
export { computeTerritory } from "./base/territory.js";
|
|
5
|
+
// ── Territory (領域) overlay appearance — pass via `createMapPlugin({ territory })`.
|
|
6
|
+
export { DEFAULT_TERRITORY_STYLE, resolveTerritoryStyle, } from "./base/territory-style.js";
|
|
4
7
|
export { baseTerrainAt, DEFAULT_BASE_GEN } from "./base-terrain.js";
|
|
5
8
|
export { genStateStore, useGenState } from "./gen-state.js";
|
|
6
9
|
// NOTE: `resolveTilemap` returns the FIRST tilemap in iteration order (or creates
|
|
@@ -9,6 +12,7 @@ export { genStateStore, useGenState } from "./gen-state.js";
|
|
|
9
12
|
// `enableInfiniteTerrain` API which already picks deterministically.
|
|
10
13
|
export { resolveTilemap } from "./generate.js";
|
|
11
14
|
export { GENERATORS, } from "./generators/index.js";
|
|
15
|
+
export { renderIconAt } from "./icon-render.js";
|
|
12
16
|
export { ICONS } from "./icons.js";
|
|
13
17
|
// ── Infinite base terrain public API (#946 / #937 follow-up) ──
|
|
14
18
|
// Enable/disable/seed the infinite base terrain from a host's own UI without the
|
|
@@ -16,7 +20,6 @@ export { ICONS } from "./icons.js";
|
|
|
16
20
|
// shape (synced/persisted), so these take a BoardStore. Use the functions for
|
|
17
21
|
// imperative control, or `useInfiniteTerrain(store)` for a reactive React binding.
|
|
18
22
|
export { DEFAULT_INFINITE_SEED, disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
|
|
19
|
-
export { MAP_ICON_TYPE } from "./map-icon-shape.js";
|
|
20
23
|
// ── Host-facing service (recommended seam; #927/#946 pattern generalized) ──
|
|
21
24
|
// `getMapApi(app.services)?.enableInfiniteTerrain({ seed })` from a host, without
|
|
22
25
|
// the Control HUD and without importing individual helpers (undefined if absent).
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,GAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAsB,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAsB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAiB,aAAa,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAC3F,kFAAkF;AAClF,gFAAgF;AAChF,wEAAwE;AACxE,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,UAAU,GAIV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AACpE,iEAAiE;AACjE,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,mFAAmF;AACnF,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,GAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEN,aAAa,EACb,iBAAiB,EACjB,UAAU,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAsB,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AACvE,oFAAoF;AACpF,OAAO,EACN,uBAAuB,EAEvB,qBAAqB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAsB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAiB,aAAa,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAC3F,kFAAkF;AAClF,gFAAgF;AAChF,wEAAwE;AACxE,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,UAAU,GAIV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AACpE,iEAAiE;AACjE,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,mFAAmF;AACnF,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,8EAA8E;AAC9E,kFAAkF;AAClF,kFAAkF;AAClF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AACrE,OAAO,EAEN,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAGN,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,SAAS,EAGT,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,kBAAkB,GAClB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BoardStore, RenderMode } from "@edv4h/usketch-shared";
|
|
2
|
+
/** Distinct id so it doesn't collide with the terrain layer's wobble filter. */
|
|
3
|
+
export declare const ICON_WOBBLE_FILTER_ID = "uskmap-icon-wobble";
|
|
4
|
+
export declare function MapIconGridLayer({ store, renderMode: _renderMode, tile: defaultTile, }: {
|
|
5
|
+
store: BoardStore;
|
|
6
|
+
renderMode?: RenderMode;
|
|
7
|
+
tile: number;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=map-icon-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-icon-layer.d.ts","sourceRoot":"","sources":["../src/map-icon-layer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUpE,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,wBAAgB,gBAAgB,CAAC,EAChC,KAAK,EACL,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,WAAW,GACjB,EAAE;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACb,+BAyEA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { parseCellKey } from "./autotile.js";
|
|
4
|
+
import { renderIconAt } from "./icon-render.js";
|
|
5
|
+
import { visibleCellRange, visibleWorldRect } from "./map-layer.js";
|
|
6
|
+
import { terrainCssVars } from "./palette.js";
|
|
7
|
+
import { renderConfigStore } from "./render-config.js";
|
|
8
|
+
import { isTileMap } from "./tilemap-shape.js";
|
|
9
|
+
/** Distinct id so it doesn't collide with the terrain layer's wobble filter. */
|
|
10
|
+
export const ICON_WOBBLE_FILTER_ID = "uskmap-icon-wobble";
|
|
11
|
+
export function MapIconGridLayer({ store, renderMode: _renderMode, tile: defaultTile, }) {
|
|
12
|
+
// RAF-coalesced re-render on board + render-config changes (same as terrain).
|
|
13
|
+
const [, force] = useState(0);
|
|
14
|
+
const rafRef = useRef(0);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const rerender = () => {
|
|
17
|
+
cancelAnimationFrame(rafRef.current);
|
|
18
|
+
rafRef.current = requestAnimationFrame(() => force((n) => n + 1));
|
|
19
|
+
};
|
|
20
|
+
const u1 = store.subscribe(rerender);
|
|
21
|
+
const u2 = renderConfigStore.subscribe(rerender);
|
|
22
|
+
return () => {
|
|
23
|
+
u1();
|
|
24
|
+
u2();
|
|
25
|
+
cancelAnimationFrame(rafRef.current);
|
|
26
|
+
};
|
|
27
|
+
}, [store]);
|
|
28
|
+
const cfg = renderConfigStore.get();
|
|
29
|
+
const vp = store.getViewport();
|
|
30
|
+
const cssVars = terrainCssVars(cfg.colorMode, cfg.strokeScale);
|
|
31
|
+
const visible = visibleWorldRect(store);
|
|
32
|
+
const nodes = [];
|
|
33
|
+
for (const [, shape] of store.getShapes()) {
|
|
34
|
+
if (!isTileMap(shape))
|
|
35
|
+
continue;
|
|
36
|
+
const tm = shape;
|
|
37
|
+
const icons = tm.icons;
|
|
38
|
+
if (!icons)
|
|
39
|
+
continue;
|
|
40
|
+
const tile = tm.tile ?? defaultTile;
|
|
41
|
+
const range = visibleCellRange(visible, tile);
|
|
42
|
+
for (const [key, iconKey] of Object.entries(icons)) {
|
|
43
|
+
const [c, r] = parseCellKey(key);
|
|
44
|
+
// Cull to the visible cell range when known (icons are sparse, so this
|
|
45
|
+
// keeps a huge panned world cheap).
|
|
46
|
+
if (range && (c < range.c0 || c > range.c1 || r < range.r0 || r > range.r1))
|
|
47
|
+
continue;
|
|
48
|
+
const node = renderIconAt(iconKey, c, r, tile, `${tm.id}-`);
|
|
49
|
+
if (node)
|
|
50
|
+
nodes.push(node);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return (_jsx("div", { style: { position: "absolute", inset: 0, pointerEvents: "none", overflow: "hidden" }, children: _jsxs("svg", { width: "100%", height: "100%", style: { display: "block", overflow: "visible" }, children: [_jsx("defs", { children: _jsxs("filter", { id: ICON_WOBBLE_FILTER_ID, children: [_jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.014", numOctaves: "2", seed: "7", result: "n" }), _jsx("feDisplacementMap", { in: "SourceGraphic", in2: "n", scale: "2.1", xChannelSelector: "R", yChannelSelector: "G" })] }) }), _jsx("g", { style: cssVars, transform: `translate(${vp.x} ${vp.y}) scale(${vp.zoom})`, filter: cfg.lineStyle === "wobble" ? `url(#${ICON_WOBBLE_FILTER_ID})` : undefined, children: nodes })] }) }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=map-icon-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-icon-layer.js","sourceRoot":"","sources":["../src/map-icon-layer.tsx"],"names":[],"mappings":"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"}
|
package/dist/map-service.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { type BoardStore, type ServiceRegistry } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { BaseInfo } from "./base/base-map-shape.js";
|
|
3
|
+
import { type BaseRegionAnchor } from "./base/base-ops.js";
|
|
4
|
+
import { type Territory } from "./base/territory.js";
|
|
2
5
|
import { type EnableInfiniteTerrainOptions } from "./infinite-terrain.js";
|
|
3
6
|
import type { ReactiveStore } from "./reactive-store.js";
|
|
4
7
|
import { type MapRenderConfig } from "./render-config.js";
|
|
@@ -13,13 +16,23 @@ export interface MapApi {
|
|
|
13
16
|
isInfiniteTerrainEnabled(): boolean;
|
|
14
17
|
/** A number enables/re-seeds, `null` disables. */
|
|
15
18
|
setInfiniteSeed(seed: number | null): void;
|
|
19
|
+
/** The full derived territory: `cellKey("c,r") → baseId`. */
|
|
20
|
+
getTerritory(): Territory;
|
|
21
|
+
/** Base id owning the cell at a world point, or `null`. */
|
|
22
|
+
getBaseAt(x: number, y: number): string | null;
|
|
23
|
+
/** The base registry: `baseId → { name, color, radius, beaconCell }`. */
|
|
24
|
+
getBases(): Record<string, BaseInfo>;
|
|
25
|
+
/** One anchor per base that owns cells: centre (world), colour, name, cell count. */
|
|
26
|
+
getBaseRegions(): BaseRegionAnchor[];
|
|
27
|
+
/** Fire `listener` whenever the territory could have changed (shapes / exclude set). Returns an unsubscribe. */
|
|
28
|
+
onTerritoryChange(listener: () => void): () => void;
|
|
16
29
|
toolState: ReactiveStore<MapToolState>;
|
|
17
30
|
renderConfig: ReactiveStore<MapRenderConfig>;
|
|
18
31
|
}
|
|
19
32
|
/** Typed service handle for the map API. Provide in `setup`, get via {@link getMapApi}. */
|
|
20
33
|
export declare const mapService: import("@edv4h/usketch-shared").ServiceHandle<MapApi>;
|
|
21
34
|
/** Build the API bound to a specific board store (called in the plugin's setup). */
|
|
22
|
-
export declare function createMapApi(store: BoardStore): MapApi;
|
|
35
|
+
export declare function createMapApi(store: BoardStore, defaultTile?: number): MapApi;
|
|
23
36
|
/**
|
|
24
37
|
* Host accessor: `getMapApi(app.services)?.enableInfiniteTerrain({ seed })`. Returns
|
|
25
38
|
* `undefined` when the map plugin isn't active. Works with `ctx.services` too.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-service.d.ts","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAiB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAEN,KAAK,4BAA4B,EAKjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"map-service.d.ts","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAiB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACN,KAAK,gBAAgB,EAIrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAEN,KAAK,4BAA4B,EAKjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,WAAW,MAAM;IAEtB,kFAAkF;IAClF,qBAAqB,CAAC,IAAI,CAAC,EAAE,4BAA4B,GAAG,MAAM,CAAC;IACnE,sBAAsB,IAAI,IAAI,CAAC;IAC/B,uDAAuD;IACvD,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC,wBAAwB,IAAI,OAAO,CAAC;IACpC,kDAAkD;IAClD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAG3C,6DAA6D;IAC7D,YAAY,IAAI,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,yEAAyE;IACzE,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,qFAAqF;IACrF,cAAc,IAAI,gBAAgB,EAAE,CAAC;IACrC,gHAAgH;IAChH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAKpD,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACvC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CAC7C;AAED,2FAA2F;AAC3F,eAAO,MAAM,UAAU,uDAA8C,CAAC;AAEtE,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,SAAe,GAAG,MAAM,CAyClF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEvE"}
|
package/dist/map-service.js
CHANGED
|
@@ -4,19 +4,54 @@
|
|
|
4
4
|
// in docs/plugin-system-design.md: operation logic lives in plain functions, the
|
|
5
5
|
// HUD/actions call them, and the same functions are bundled into a service.
|
|
6
6
|
import { defineService } from "@edv4h/usketch-shared";
|
|
7
|
+
import { baseIdAtWorld, baseRegionAnchors, getBaseMap, } from "./base/base-ops.js";
|
|
8
|
+
import { baseStateStore } from "./base/base-state.js";
|
|
9
|
+
import { computeTerritory } from "./base/territory.js";
|
|
7
10
|
import { disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
|
|
8
11
|
import { renderConfigStore } from "./render-config.js";
|
|
12
|
+
import { DEFAULT_TILE } from "./tilemap-shape.js";
|
|
9
13
|
import { toolStateStore } from "./tool-state.js";
|
|
10
14
|
/** Typed service handle for the map API. Provide in `setup`, get via {@link getMapApi}. */
|
|
11
15
|
export const mapService = defineService("usketch-plugin-map");
|
|
12
16
|
/** Build the API bound to a specific board store (called in the plugin's setup). */
|
|
13
|
-
export function createMapApi(store) {
|
|
17
|
+
export function createMapApi(store, defaultTile = DEFAULT_TILE) {
|
|
18
|
+
// Resolve the base-map, its tile, and the derived territory ONCE per call — the
|
|
19
|
+
// base-map carries its own tile (fall back to the configured one). computeTerritory
|
|
20
|
+
// is memoised, but getBaseMap is a shape scan, so share it across the readout.
|
|
21
|
+
const snapshot = () => {
|
|
22
|
+
const baseMap = getBaseMap(store);
|
|
23
|
+
const tile = baseMap?.tile ?? defaultTile;
|
|
24
|
+
const territory = computeTerritory(store, tile, new Set(baseStateStore.get().excludeTerrains));
|
|
25
|
+
return { baseMap, tile, territory };
|
|
26
|
+
};
|
|
14
27
|
return {
|
|
15
28
|
enableInfiniteTerrain: (opts) => enableInfiniteTerrain(store, opts),
|
|
16
29
|
disableInfiniteTerrain: () => disableInfiniteTerrain(store),
|
|
17
30
|
getInfiniteSeed: () => getInfiniteSeed(store),
|
|
18
31
|
isInfiniteTerrainEnabled: () => isInfiniteTerrainEnabled(store),
|
|
19
32
|
setInfiniteSeed: (seed) => setInfiniteSeed(store, seed),
|
|
33
|
+
getTerritory: () => snapshot().territory,
|
|
34
|
+
getBaseAt: (x, y) => {
|
|
35
|
+
const { territory, tile } = snapshot();
|
|
36
|
+
return baseIdAtWorld(territory, x, y, tile);
|
|
37
|
+
},
|
|
38
|
+
getBases: () => getBaseMap(store)?.bases ?? {},
|
|
39
|
+
getBaseRegions: () => {
|
|
40
|
+
const { baseMap, tile, territory } = snapshot();
|
|
41
|
+
return baseRegionAnchors(territory, baseMap?.bases ?? {}, tile);
|
|
42
|
+
},
|
|
43
|
+
onTerritoryChange: (listener) => {
|
|
44
|
+
// Territory derives from the base-map + tilemap shapes and the exclude set.
|
|
45
|
+
const offShapes = store.onMutation((e) => {
|
|
46
|
+
if (e.type === "shape:added" || e.type === "shape:removed" || e.type === "shape:updated")
|
|
47
|
+
listener();
|
|
48
|
+
});
|
|
49
|
+
const offExclude = baseStateStore.subscribe(listener);
|
|
50
|
+
return () => {
|
|
51
|
+
offShapes();
|
|
52
|
+
offExclude();
|
|
53
|
+
};
|
|
54
|
+
},
|
|
20
55
|
toolState: toolStateStore,
|
|
21
56
|
renderConfig: renderConfigStore,
|
|
22
57
|
};
|
package/dist/map-service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-service.js","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,6EAA6E;AAC7E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,OAAO,EAAmB,aAAa,EAAwB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"map-service.js","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"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"}
|
package/dist/map-tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-tool.d.ts","sourceRoot":"","sources":["../src/map-tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"map-tool.d.ts","sourceRoot":"","sources":["../src/map-tool.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAKX,cAAc,EACd,MAAM,uBAAuB,CAAC;AA2E/B,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,MAAqB,GAAG,cAAc,CA8YnF"}
|