@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.
Files changed (57) hide show
  1. package/dist/autotile.d.ts +4 -0
  2. package/dist/autotile.d.ts.map +1 -1
  3. package/dist/autotile.js +7 -3
  4. package/dist/autotile.js.map +1 -1
  5. package/dist/base/base-layer.d.ts +3 -1
  6. package/dist/base/base-layer.d.ts.map +1 -1
  7. package/dist/base/base-layer.js +65 -54
  8. package/dist/base/base-layer.js.map +1 -1
  9. package/dist/base/base-map-shape.d.ts +3 -2
  10. package/dist/base/base-map-shape.d.ts.map +1 -1
  11. package/dist/base/base-map-shape.js.map +1 -1
  12. package/dist/base/base-ops.d.ts +6 -8
  13. package/dist/base/base-ops.d.ts.map +1 -1
  14. package/dist/base/base-ops.js +15 -63
  15. package/dist/base/base-ops.js.map +1 -1
  16. package/dist/base/territory-style.d.ts +63 -0
  17. package/dist/base/territory-style.d.ts.map +1 -0
  18. package/dist/base/territory-style.js +34 -0
  19. package/dist/base/territory-style.js.map +1 -0
  20. package/dist/base/territory.d.ts.map +1 -1
  21. package/dist/base/territory.js +11 -17
  22. package/dist/base/territory.js.map +1 -1
  23. package/dist/generate.d.ts.map +1 -1
  24. package/dist/generate.js +6 -4
  25. package/dist/generate.js.map +1 -1
  26. package/dist/icon-render.d.ts +10 -0
  27. package/dist/icon-render.d.ts.map +1 -0
  28. package/dist/icon-render.js +26 -0
  29. package/dist/icon-render.js.map +1 -0
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/map-icon-layer.d.ts +9 -0
  35. package/dist/map-icon-layer.d.ts.map +1 -0
  36. package/dist/map-icon-layer.js +55 -0
  37. package/dist/map-icon-layer.js.map +1 -0
  38. package/dist/map-service.d.ts +14 -1
  39. package/dist/map-service.d.ts.map +1 -1
  40. package/dist/map-service.js +36 -1
  41. package/dist/map-service.js.map +1 -1
  42. package/dist/map-tool.d.ts.map +1 -1
  43. package/dist/map-tool.js +89 -54
  44. package/dist/map-tool.js.map +1 -1
  45. package/dist/plugin.d.ts +7 -0
  46. package/dist/plugin.d.ts.map +1 -1
  47. package/dist/plugin.js +19 -5
  48. package/dist/plugin.js.map +1 -1
  49. package/dist/tilemap-shape.d.ts +15 -3
  50. package/dist/tilemap-shape.d.ts.map +1 -1
  51. package/dist/tilemap-shape.js +40 -14
  52. package/dist/tilemap-shape.js.map +1 -1
  53. package/package.json +1 -1
  54. package/dist/map-icon-shape.d.ts +0 -17
  55. package/dist/map-icon-shape.d.ts.map +0 -1
  56. package/dist/map-icon-shape.js +0 -106
  57. 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;AAMxD,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAwG/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,SAAS,CAuBX"}
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"}
@@ -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(store, bases) {
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.beaconIconId)
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: icon.x + icon.width / 2,
36
- cy: icon.y + icon.height / 2,
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":"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"}
1
+ {"version":3,"file":"territory.js","sourceRoot":"","sources":["../../src/base/territory.ts"],"names":[],"mappings":"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"}
@@ -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,EAAoC,MAAM,eAAe,CAAC;AAQ/E,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,CA0D9E"}
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, cellsBounds } from "./autotile.js";
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
- const prevBounds = cellsBounds(prev, tile);
83
- const nextBounds = cellsBounds(next, tile);
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).
@@ -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,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AAEnF,uFAAuF;AACvF,MAAM,WAAW,GAAG,GAAG,CAAC;AAQxB,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,KAAiB,EAAE,IAAY;IAC7D,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACvC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,GAAY;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW;QAAE,OAAO,GAAG,CAAC;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACzC,wEAAwE;IACxE,OAAO;QACN,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;QAC5C,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;QAC9D,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;QAC5C,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;KAC9D,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,IAAY;IAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAClE,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IACpC,OAAO,QAAQ,CAAC;QACf,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;KACrC,CAAC,CAAC;AACJ,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,GAAoB;IACvE,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QAAE,OAAO;IAEvD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAiC,CAAC;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IAErC,MAAM,IAAI,GAAU,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACvC,MAAM,IAAI,GAAU,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACvC,+EAA+E;IAC/E,8DAA8D;IAC9D,MAAM,aAAa,GAAyB,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,aAAa,GAAyB,EAAE,GAAG,aAAa,EAAE,CAAC;IACjE,2DAA2D;IAC3D,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/E,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACb,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,UAAU,GAAG;YAClB,GAAG,KAAK;YACR,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,aAAa;YACxB,GAAG,UAAU;SACA,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACP,MAAM,OAAO,GAAY;YACxB,OAAO,EAAE,GAAG,EAAE,CACb,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE;gBAC1B,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,aAAa;gBACxB,GAAG,UAAU;aACS,CAAC;YACzB,IAAI,EAAE,GAAG,EAAE,CACV,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE;gBAC1B,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,aAAa;gBACxB,GAAG,UAAU;aACS,CAAC;SACzB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACrC,CAAC"}
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";
@@ -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;AACvE,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,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;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI3E,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"}
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,OAAO,EAAE,aAAa,EAAyB,MAAM,qBAAqB,CAAC;AAC3E,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"}
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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"}
@@ -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;AAC7E,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;IAK3C,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,GAAG,MAAM,CAUtD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEvE"}
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"}
@@ -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
  };
@@ -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;AAC7F,OAAO,EACN,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAqB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAqBpE,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAS,oBAAoB,CAAC,CAAC;AAEtE,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC7C,OAAO;QACN,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC;QACnE,sBAAsB,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC3D,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;QAC7C,wBAAwB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC;QAC/D,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC;QACvD,SAAS,EAAE,cAAc;QACzB,YAAY,EAAE,iBAAiB;KAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAyB;IAClD,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"map-service.js","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"map-tool.d.ts","sourceRoot":"","sources":["../src/map-tool.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAKX,cAAc,EACd,MAAM,uBAAuB,CAAC;AAmE/B,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,MAAqB,GAAG,cAAc,CA4WnF"}
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"}