@edv4h/usketch-plugin-map 0.2.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/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/autotile.d.ts +42 -0
- package/dist/autotile.d.ts.map +1 -0
- package/dist/autotile.js +96 -0
- package/dist/autotile.js.map +1 -0
- package/dist/gen-state.d.ts +20 -0
- package/dist/gen-state.d.ts.map +1 -0
- package/dist/gen-state.js +16 -0
- package/dist/gen-state.js.map +1 -0
- package/dist/generate.d.ts +28 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +93 -0
- package/dist/generate.js.map +1 -0
- package/dist/generators/index.d.ts +34 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +138 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/noise.d.ts +6 -0
- package/dist/generators/noise.d.ts.map +1 -0
- package/dist/generators/noise.js +39 -0
- package/dist/generators/noise.js.map +1 -0
- package/dist/generators/rng.d.ts +7 -0
- package/dist/generators/rng.d.ts.map +1 -0
- package/dist/generators/rng.js +31 -0
- package/dist/generators/rng.js.map +1 -0
- package/dist/icons.d.ts +17 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +949 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/lod.d.ts +27 -0
- package/dist/lod.d.ts.map +1 -0
- package/dist/lod.js +73 -0
- package/dist/lod.js.map +1 -0
- package/dist/map-icon-shape.d.ts +14 -0
- package/dist/map-icon-shape.d.ts.map +1 -0
- package/dist/map-icon-shape.js +106 -0
- package/dist/map-icon-shape.js.map +1 -0
- package/dist/map-layer.d.ts +24 -0
- package/dist/map-layer.d.ts.map +1 -0
- package/dist/map-layer.js +167 -0
- package/dist/map-layer.js.map +1 -0
- package/dist/map-tool-id.d.ts +3 -0
- package/dist/map-tool-id.d.ts.map +1 -0
- package/dist/map-tool-id.js +3 -0
- package/dist/map-tool-id.js.map +1 -0
- package/dist/map-tool.d.ts +3 -0
- package/dist/map-tool.d.ts.map +1 -0
- package/dist/map-tool.js +308 -0
- package/dist/map-tool.js.map +1 -0
- package/dist/palette.d.ts +8 -0
- package/dist/palette.d.ts.map +1 -0
- package/dist/palette.js +92 -0
- package/dist/palette.js.map +1 -0
- package/dist/plugin.d.ts +18 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +137 -0
- package/dist/plugin.js.map +1 -0
- package/dist/range-erase-state.d.ts +9 -0
- package/dist/range-erase-state.d.ts.map +1 -0
- package/dist/range-erase-state.js +12 -0
- package/dist/range-erase-state.js.map +1 -0
- package/dist/range-erase-tool.d.ts +4 -0
- package/dist/range-erase-tool.d.ts.map +1 -0
- package/dist/range-erase-tool.js +58 -0
- package/dist/range-erase-tool.js.map +1 -0
- package/dist/range-erase.d.ts +14 -0
- package/dist/range-erase.d.ts.map +1 -0
- package/dist/range-erase.js +74 -0
- package/dist/range-erase.js.map +1 -0
- package/dist/reactive-store.d.ts +7 -0
- package/dist/reactive-store.d.ts.map +1 -0
- package/dist/reactive-store.js +33 -0
- package/dist/reactive-store.js.map +1 -0
- package/dist/render-config.d.ts +19 -0
- package/dist/render-config.d.ts.map +1 -0
- package/dist/render-config.js +16 -0
- package/dist/render-config.js.map +1 -0
- package/dist/svg-nodes.d.ts +12 -0
- package/dist/svg-nodes.d.ts.map +1 -0
- package/dist/svg-nodes.js +34 -0
- package/dist/svg-nodes.js.map +1 -0
- package/dist/team/enter-banner.d.ts +6 -0
- package/dist/team/enter-banner.d.ts.map +1 -0
- package/dist/team/enter-banner.js +111 -0
- package/dist/team/enter-banner.js.map +1 -0
- package/dist/team/team-layer.d.ts +6 -0
- package/dist/team/team-layer.d.ts.map +1 -0
- package/dist/team/team-layer.js +121 -0
- package/dist/team/team-layer.js.map +1 -0
- package/dist/team/team-map-shape.d.ts +20 -0
- package/dist/team/team-map-shape.d.ts.map +1 -0
- package/dist/team/team-map-shape.js +74 -0
- package/dist/team/team-map-shape.js.map +1 -0
- package/dist/team/team-ops.d.ts +50 -0
- package/dist/team/team-ops.d.ts.map +1 -0
- package/dist/team/team-ops.js +176 -0
- package/dist/team/team-ops.js.map +1 -0
- package/dist/team/team-state.d.ts +9 -0
- package/dist/team/team-state.d.ts.map +1 -0
- package/dist/team/team-state.js +13 -0
- package/dist/team/team-state.js.map +1 -0
- package/dist/terrain.d.ts +15 -0
- package/dist/terrain.d.ts.map +1 -0
- package/dist/terrain.js +309 -0
- package/dist/terrain.js.map +1 -0
- package/dist/tilemap-shape.d.ts +16 -0
- package/dist/tilemap-shape.d.ts.map +1 -0
- package/dist/tilemap-shape.js +77 -0
- package/dist/tilemap-shape.js.map +1 -0
- package/dist/tool-state.d.ts +12 -0
- package/dist/tool-state.d.ts.map +1 -0
- package/dist/tool-state.js +14 -0
- package/dist/tool-state.js.map +1 -0
- package/dist/ui/palette.d.ts +7 -0
- package/dist/ui/palette.d.ts.map +1 -0
- package/dist/ui/palette.js +178 -0
- package/dist/ui/palette.js.map +1 -0
- package/dist/ui/range-erase-palette.d.ts +5 -0
- package/dist/ui/range-erase-palette.d.ts.map +1 -0
- package/dist/ui/range-erase-palette.js +42 -0
- package/dist/ui/range-erase-palette.js.map +1 -0
- package/package.json +49 -0
package/dist/map-tool.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createAddShapeCommand, createDeleteWithChildrenCommand, isEffectivelyHidden, isEffectivelyLocked, } from "@edv4h/usketch-store";
|
|
3
|
+
import { cellKey, cellsBounds, floodFill, worldToCell, } from "./autotile.js";
|
|
4
|
+
import { genStateStore } from "./gen-state.js";
|
|
5
|
+
import { generateIntoBox, resolveTilemap } from "./generate.js";
|
|
6
|
+
import { ICONS_BY_KEY } from "./icons.js";
|
|
7
|
+
import { MAP_ICON_TYPE, makeMapIcon } from "./map-icon-shape.js";
|
|
8
|
+
import { applyOwner, assignIsland, commitOwner, currentOwner, resolveTeamMap, } from "./team/team-ops.js";
|
|
9
|
+
import { teamStateStore } from "./team/team-state.js";
|
|
10
|
+
import { DEFAULT_TILE } from "./tilemap-shape.js";
|
|
11
|
+
import { toolStateStore } from "./tool-state.js";
|
|
12
|
+
function MapToolIcon() {
|
|
13
|
+
return (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("path", { d: "M3 5 L8 3 L12 5 L17 3 V15 L12 17 L8 15 L3 17 Z", fill: "#a9d888", stroke: "#141414", strokeWidth: "1.4", strokeLinejoin: "round" }), _jsx("path", { d: "M8 3 V15 M12 5 V17", stroke: "#141414", strokeWidth: "1.1" })] }));
|
|
14
|
+
}
|
|
15
|
+
function cellsEqual(a, b) {
|
|
16
|
+
const ak = Object.keys(a);
|
|
17
|
+
if (ak.length !== Object.keys(b).length)
|
|
18
|
+
return false;
|
|
19
|
+
for (const k of ak)
|
|
20
|
+
if (a[k] !== b[k])
|
|
21
|
+
return false;
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
export function createMapToolDefinition(tile = DEFAULT_TILE) {
|
|
25
|
+
let stroke = null;
|
|
26
|
+
let lastKey = "";
|
|
27
|
+
// Range-select drag for the "generate" submode (world start point).
|
|
28
|
+
let genDrag = null;
|
|
29
|
+
// Team-ownership paint stroke (team submode = assign/erase).
|
|
30
|
+
let teamStroke = null;
|
|
31
|
+
let lastTeamKey = "";
|
|
32
|
+
function paintOwnerAt(ctx, event) {
|
|
33
|
+
if (!teamStroke)
|
|
34
|
+
return;
|
|
35
|
+
const { activeTeamId, mode } = teamStateStore.get();
|
|
36
|
+
if (mode === "assign" && !activeTeamId)
|
|
37
|
+
return;
|
|
38
|
+
const [c, r] = worldToCell(event.worldPoint.x, event.worldPoint.y, tile);
|
|
39
|
+
const key = cellKey(c, r);
|
|
40
|
+
if (key === lastTeamKey)
|
|
41
|
+
return;
|
|
42
|
+
lastTeamKey = key;
|
|
43
|
+
const owner = currentOwner(ctx.store, teamStroke.teamMapId);
|
|
44
|
+
if (mode === "erase") {
|
|
45
|
+
if (!(key in owner))
|
|
46
|
+
return;
|
|
47
|
+
delete owner[key];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
if (owner[key] === activeTeamId)
|
|
51
|
+
return;
|
|
52
|
+
owner[key] = activeTeamId;
|
|
53
|
+
}
|
|
54
|
+
applyOwner(ctx.store, teamStroke.teamMapId, owner, tile);
|
|
55
|
+
}
|
|
56
|
+
function currentCells(ctx, id) {
|
|
57
|
+
const s = ctx.store.getShape(id);
|
|
58
|
+
return s ? { ...s.cells } : {};
|
|
59
|
+
}
|
|
60
|
+
function applyCells(ctx, id, cells) {
|
|
61
|
+
// `cells` is an intrinsic field of TileMapShapeData, outside the base
|
|
62
|
+
// ShapeData type — cast at the store boundary (as freedraw does for points).
|
|
63
|
+
ctx.store.updateShape(id, { cells, ...cellsBounds(cells, tile) });
|
|
64
|
+
}
|
|
65
|
+
function paintAt(ctx, event) {
|
|
66
|
+
if (!stroke)
|
|
67
|
+
return;
|
|
68
|
+
const [c, r] = worldToCell(event.worldPoint.x, event.worldPoint.y, tile);
|
|
69
|
+
const key = cellKey(c, r);
|
|
70
|
+
if (key === lastKey)
|
|
71
|
+
return;
|
|
72
|
+
lastKey = key;
|
|
73
|
+
const { mode, terrain } = toolStateStore.get();
|
|
74
|
+
const cells = currentCells(ctx, stroke.tilemapId);
|
|
75
|
+
if (mode === "eraser") {
|
|
76
|
+
if (!(key in cells))
|
|
77
|
+
return;
|
|
78
|
+
delete cells[key];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (cells[key] === terrain)
|
|
82
|
+
return;
|
|
83
|
+
cells[key] = terrain;
|
|
84
|
+
}
|
|
85
|
+
applyCells(ctx, stroke.tilemapId, cells);
|
|
86
|
+
}
|
|
87
|
+
function doFill(ctx, event) {
|
|
88
|
+
if (!stroke)
|
|
89
|
+
return;
|
|
90
|
+
const [c, r] = worldToCell(event.worldPoint.x, event.worldPoint.y, tile);
|
|
91
|
+
const { terrain } = toolStateStore.get();
|
|
92
|
+
const cells = currentCells(ctx, stroke.tilemapId);
|
|
93
|
+
// Empty-cell fills are bounded to the current painted region so the flood
|
|
94
|
+
// is finite; painted-cell fills are naturally bounded by the region.
|
|
95
|
+
const b = cellsBounds(cells, tile);
|
|
96
|
+
const box = Object.keys(cells).length === 0
|
|
97
|
+
? undefined
|
|
98
|
+
: {
|
|
99
|
+
minC: Math.floor(b.x / tile),
|
|
100
|
+
minR: Math.floor(b.y / tile),
|
|
101
|
+
maxC: Math.floor(b.x / tile) + b.width / tile - 1,
|
|
102
|
+
maxR: Math.floor(b.y / tile) + b.height / tile - 1,
|
|
103
|
+
};
|
|
104
|
+
const keys = floodFill(cells, c, r, box);
|
|
105
|
+
if (keys.length === 0)
|
|
106
|
+
return;
|
|
107
|
+
for (const k of keys)
|
|
108
|
+
cells[k] = terrain;
|
|
109
|
+
applyCells(ctx, stroke.tilemapId, cells);
|
|
110
|
+
}
|
|
111
|
+
function commit(ctx) {
|
|
112
|
+
if (!stroke)
|
|
113
|
+
return;
|
|
114
|
+
const { tilemapId, created, prevCells } = stroke;
|
|
115
|
+
stroke = null;
|
|
116
|
+
lastKey = "";
|
|
117
|
+
const shape = ctx.store.getShape(tilemapId);
|
|
118
|
+
const nextCells = shape ? shape.cells : {};
|
|
119
|
+
if (created) {
|
|
120
|
+
// Newly created this stroke: commit as an add (undo deletes it).
|
|
121
|
+
if (!shape || Object.keys(nextCells).length === 0) {
|
|
122
|
+
if (shape)
|
|
123
|
+
ctx.store.deleteShape(tilemapId);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const finalShape = { ...shape };
|
|
127
|
+
ctx.store.deleteShape(tilemapId);
|
|
128
|
+
ctx.commands.execute(createAddShapeCommand(ctx.store, finalShape));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Edited an existing tilemap: commit the cells diff (undo restores prev).
|
|
132
|
+
if (cellsEqual(prevCells, nextCells))
|
|
133
|
+
return;
|
|
134
|
+
const prev = prevCells;
|
|
135
|
+
const next = { ...nextCells };
|
|
136
|
+
const prevBounds = cellsBounds(prev, tile);
|
|
137
|
+
const nextBounds = cellsBounds(next, tile);
|
|
138
|
+
const command = {
|
|
139
|
+
execute: () => ctx.store.updateShape(tilemapId, { cells: next, ...nextBounds }),
|
|
140
|
+
undo: () => ctx.store.updateShape(tilemapId, { cells: prev, ...prevBounds }),
|
|
141
|
+
};
|
|
142
|
+
ctx.commands.execute(command);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Topmost interactable map-icon under the point (frontmost wins), or null.
|
|
146
|
+
* Uses the shape's registered (rotation-aware) hitTest and skips shapes that
|
|
147
|
+
* are effectively locked/hidden, matching normal canvas interaction rules.
|
|
148
|
+
*/
|
|
149
|
+
function findMapIconAt(ctx, x, y) {
|
|
150
|
+
const def = ctx.shapes.get(MAP_ICON_TYPE);
|
|
151
|
+
if (!def)
|
|
152
|
+
return null;
|
|
153
|
+
const point = { x, y };
|
|
154
|
+
let found = null;
|
|
155
|
+
for (const s of ctx.store.getShapesSorted()) {
|
|
156
|
+
if (s.type !== MAP_ICON_TYPE)
|
|
157
|
+
continue;
|
|
158
|
+
if (isEffectivelyLocked(ctx.store, s) || isEffectivelyHidden(ctx.store, s))
|
|
159
|
+
continue;
|
|
160
|
+
if (def.hitTest(s, point))
|
|
161
|
+
found = s.id;
|
|
162
|
+
}
|
|
163
|
+
return found;
|
|
164
|
+
}
|
|
165
|
+
function placeIcon(ctx, event) {
|
|
166
|
+
const { iconKey } = toolStateStore.get();
|
|
167
|
+
const def = ICONS_BY_KEY.get(iconKey);
|
|
168
|
+
if (!def)
|
|
169
|
+
return;
|
|
170
|
+
const shape = makeMapIcon(iconKey, def.category, event.worldPoint.x, event.worldPoint.y);
|
|
171
|
+
ctx.commands.execute(createAddShapeCommand(ctx.store, shape));
|
|
172
|
+
ctx.store.setSelection([shape.id]);
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
icon: MapToolIcon,
|
|
176
|
+
cursor: "crosshair",
|
|
177
|
+
shortcut: "m",
|
|
178
|
+
order: 45,
|
|
179
|
+
onPointerDown(ctx, event) {
|
|
180
|
+
const { mode } = toolStateStore.get();
|
|
181
|
+
if (mode === "stamp") {
|
|
182
|
+
placeIcon(ctx, event);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (mode === "generate") {
|
|
186
|
+
genDrag = { x0: event.worldPoint.x, y0: event.worldPoint.y };
|
|
187
|
+
genStateStore.set({
|
|
188
|
+
pendingRect: { x: event.worldPoint.x, y: event.worldPoint.y, w: 0, h: 0 },
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (mode === "team") {
|
|
193
|
+
const ts = teamStateStore.get();
|
|
194
|
+
const deps = { store: ctx.store, commands: ctx.commands, tile };
|
|
195
|
+
if (ts.mode === "island") {
|
|
196
|
+
if (ts.activeTeamId)
|
|
197
|
+
assignIsland(deps, event.worldPoint.x, event.worldPoint.y, ts.activeTeamId);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (ts.mode === "assign" && !ts.activeTeamId)
|
|
201
|
+
return; // pick a team first
|
|
202
|
+
const { id } = resolveTeamMap(ctx.store, tile);
|
|
203
|
+
teamStroke = { teamMapId: id, prevOwner: currentOwner(ctx.store, id) };
|
|
204
|
+
lastTeamKey = "";
|
|
205
|
+
paintOwnerAt(ctx, event);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// Eraser: clicking a placed icon removes it (icons aren't terrain cells).
|
|
209
|
+
if (mode === "eraser") {
|
|
210
|
+
const iconId = findMapIconAt(ctx, event.worldPoint.x, event.worldPoint.y);
|
|
211
|
+
if (iconId) {
|
|
212
|
+
ctx.commands.execute(createDeleteWithChildrenCommand(ctx.store, iconId));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const target = resolveTilemap(ctx.store, tile);
|
|
217
|
+
stroke = {
|
|
218
|
+
tilemapId: target.id,
|
|
219
|
+
created: target.created,
|
|
220
|
+
prevCells: currentCells(ctx, target.id),
|
|
221
|
+
};
|
|
222
|
+
lastKey = "";
|
|
223
|
+
if (mode === "fill")
|
|
224
|
+
doFill(ctx, event);
|
|
225
|
+
else
|
|
226
|
+
paintAt(ctx, event);
|
|
227
|
+
},
|
|
228
|
+
onPointerMove(ctx, event) {
|
|
229
|
+
if (teamStroke) {
|
|
230
|
+
paintOwnerAt(ctx, event);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (genDrag) {
|
|
234
|
+
const x = Math.min(genDrag.x0, event.worldPoint.x);
|
|
235
|
+
const y = Math.min(genDrag.y0, event.worldPoint.y);
|
|
236
|
+
const w = Math.abs(event.worldPoint.x - genDrag.x0);
|
|
237
|
+
const h = Math.abs(event.worldPoint.y - genDrag.y0);
|
|
238
|
+
genStateStore.set({ pendingRect: { x, y, w, h } });
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (!stroke)
|
|
242
|
+
return;
|
|
243
|
+
const { mode } = toolStateStore.get();
|
|
244
|
+
if (mode === "brush" || mode === "eraser")
|
|
245
|
+
paintAt(ctx, event);
|
|
246
|
+
},
|
|
247
|
+
onPointerUp(ctx) {
|
|
248
|
+
if (teamStroke) {
|
|
249
|
+
const { teamMapId, prevOwner } = teamStroke;
|
|
250
|
+
teamStroke = null;
|
|
251
|
+
lastTeamKey = "";
|
|
252
|
+
commitOwner({ store: ctx.store, commands: ctx.commands, tile }, teamMapId, prevOwner);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (genDrag) {
|
|
256
|
+
const rect = genStateStore.get().pendingRect;
|
|
257
|
+
genDrag = null;
|
|
258
|
+
genStateStore.set({ pendingRect: null });
|
|
259
|
+
if (rect && rect.w >= tile / 2 && rect.h >= tile / 2) {
|
|
260
|
+
// Cells the preview rectangle actually covers (right/bottom edges
|
|
261
|
+
// exclusive so a boundary-aligned drag doesn't grab an extra cell).
|
|
262
|
+
const box = {
|
|
263
|
+
minC: Math.floor(rect.x / tile),
|
|
264
|
+
minR: Math.floor(rect.y / tile),
|
|
265
|
+
maxC: Math.ceil((rect.x + rect.w) / tile) - 1,
|
|
266
|
+
maxR: Math.ceil((rect.y + rect.h) / tile) - 1,
|
|
267
|
+
};
|
|
268
|
+
const gs = genStateStore.get();
|
|
269
|
+
generateIntoBox({ store: ctx.store, commands: ctx.commands, tile }, { generatorId: gs.algorithmId, seed: gs.seed, params: gs.params, box });
|
|
270
|
+
}
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
commit(ctx);
|
|
274
|
+
// Keep the map tool active for continuous painting/stamping.
|
|
275
|
+
},
|
|
276
|
+
onDeactivate(ctx) {
|
|
277
|
+
if (genDrag) {
|
|
278
|
+
genDrag = null;
|
|
279
|
+
genStateStore.set({ pendingRect: null });
|
|
280
|
+
}
|
|
281
|
+
if (teamStroke) {
|
|
282
|
+
// Roll the live ownership edits back to the stroke start, then clear.
|
|
283
|
+
applyOwner(ctx.store, teamStroke.teamMapId, teamStroke.prevOwner, tile);
|
|
284
|
+
teamStroke = null;
|
|
285
|
+
lastTeamKey = "";
|
|
286
|
+
}
|
|
287
|
+
// Tool switched / left mid-stroke with no pointerUp: don't leave a
|
|
288
|
+
// half-painted, non-undoable state. Roll the live edits back to where
|
|
289
|
+
// the stroke started (delete a tilemap created this stroke; restore the
|
|
290
|
+
// previous cells of an edited one), then clear.
|
|
291
|
+
if (stroke) {
|
|
292
|
+
const { tilemapId, created, prevCells } = stroke;
|
|
293
|
+
if (created) {
|
|
294
|
+
ctx.store.deleteShape(tilemapId);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
ctx.store.updateShape(tilemapId, {
|
|
298
|
+
cells: prevCells,
|
|
299
|
+
...cellsBounds(prevCells, tile),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
stroke = null;
|
|
303
|
+
lastKey = "";
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=map-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-tool.js","sourceRoot":"","sources":["../src/map-tool.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ColorMode = "color" | "mono";
|
|
2
|
+
/**
|
|
3
|
+
* CSS custom properties to place on a container so the raw SVG markup (which
|
|
4
|
+
* references `var(--t-grass)`, `var(--red)`, `var(--stroke)`, ...) resolves.
|
|
5
|
+
* `strokeScale` scales the hand-drawn stroke width (design `--sw`, base 2.6px).
|
|
6
|
+
*/
|
|
7
|
+
export declare function terrainCssVars(mode: ColorMode, strokeScale?: number): Record<string, string>;
|
|
8
|
+
//# sourceMappingURL=palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAgFzC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,SAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvF"}
|
package/dist/palette.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const COLOR_VARS = {
|
|
2
|
+
"--red": "#EF5350",
|
|
3
|
+
"--blue": "#4A7FB8",
|
|
4
|
+
"--purple": "#6C5CD6",
|
|
5
|
+
"--teal": "#2AA1A8",
|
|
6
|
+
"--yellow": "#F6C124",
|
|
7
|
+
"--green": "#25A05B",
|
|
8
|
+
"--pink": "#F48CB4",
|
|
9
|
+
"--orange": "#F0913E",
|
|
10
|
+
"--brown": "#9A6A3C",
|
|
11
|
+
"--t-grass": "#A9D888",
|
|
12
|
+
"--t-forest": "#71B96C",
|
|
13
|
+
"--t-water": "#8CC3E6",
|
|
14
|
+
"--t-sand": "#F0DBA3",
|
|
15
|
+
"--t-mtn": "#C7B6A0",
|
|
16
|
+
"--t-path": "#E7CF9E",
|
|
17
|
+
"--t-grass-d": "#82C15E",
|
|
18
|
+
"--t-forest-d": "#4E9E58",
|
|
19
|
+
"--t-water-d": "#5EA8D6",
|
|
20
|
+
"--t-sand-d": "#E3C071",
|
|
21
|
+
"--t-mtn-d": "#A8927A",
|
|
22
|
+
"--t-path-d": "#CBB07A",
|
|
23
|
+
"--t-snow": "#E9F2F8",
|
|
24
|
+
"--t-swamp": "#9BAE74",
|
|
25
|
+
"--t-lava": "#EE9264",
|
|
26
|
+
"--t-stone": "#CDCAC3",
|
|
27
|
+
"--t-farm": "#DDBB7E",
|
|
28
|
+
"--t-flower": "#C4E3A5",
|
|
29
|
+
"--t-snow-d": "#BCD3E3",
|
|
30
|
+
"--t-swamp-d": "#6F8850",
|
|
31
|
+
"--t-lava-d": "#CE5638",
|
|
32
|
+
"--t-stone-d": "#ABA79E",
|
|
33
|
+
"--t-farm-d": "#B99350",
|
|
34
|
+
"--t-flower-d": "#95CA79",
|
|
35
|
+
};
|
|
36
|
+
const MONO_VARS = {
|
|
37
|
+
"--red": "#E7E8EB",
|
|
38
|
+
"--blue": "#E7E8EB",
|
|
39
|
+
"--purple": "#E7E8EB",
|
|
40
|
+
"--teal": "#E7E8EB",
|
|
41
|
+
"--yellow": "#EEEFF2",
|
|
42
|
+
"--green": "#E7E8EB",
|
|
43
|
+
"--pink": "#EEEFF2",
|
|
44
|
+
"--orange": "#EEEFF2",
|
|
45
|
+
"--brown": "#DCDCDF",
|
|
46
|
+
"--t-grass": "#EDEEF0",
|
|
47
|
+
"--t-forest": "#DDDFE3",
|
|
48
|
+
"--t-water": "#EAEFF3",
|
|
49
|
+
"--t-sand": "#F1F1F0",
|
|
50
|
+
"--t-mtn": "#DDDDE0",
|
|
51
|
+
"--t-path": "#EDE9E2",
|
|
52
|
+
"--t-grass-d": "#CFD1D6",
|
|
53
|
+
"--t-forest-d": "#CFD1D6",
|
|
54
|
+
"--t-water-d": "#D6DBE0",
|
|
55
|
+
"--t-sand-d": "#DEDDDA",
|
|
56
|
+
"--t-mtn-d": "#BFBFC5",
|
|
57
|
+
"--t-path-d": "#D9D4CC",
|
|
58
|
+
"--t-snow": "#F4F5F7",
|
|
59
|
+
"--t-swamp": "#DFE0DC",
|
|
60
|
+
"--t-lava": "#E9E9EB",
|
|
61
|
+
"--t-stone": "#E2E2E4",
|
|
62
|
+
"--t-farm": "#EDEAE3",
|
|
63
|
+
"--t-flower": "#EAEEE9",
|
|
64
|
+
"--t-snow-d": "#D8DADF",
|
|
65
|
+
"--t-swamp-d": "#C8CAC5",
|
|
66
|
+
"--t-lava-d": "#CFCFD3",
|
|
67
|
+
"--t-stone-d": "#C8C8CB",
|
|
68
|
+
"--t-farm-d": "#D7D2C9",
|
|
69
|
+
"--t-flower-d": "#CFD5CE",
|
|
70
|
+
};
|
|
71
|
+
/** Fixed (mode-independent) design tokens shared by terrain + icons. */
|
|
72
|
+
const BASE_VARS = {
|
|
73
|
+
"--uskmap-stroke": "#141414",
|
|
74
|
+
"--uskmap-card": "#FFFFFF",
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* CSS custom properties to place on a container so the raw SVG markup (which
|
|
78
|
+
* references `var(--t-grass)`, `var(--red)`, `var(--stroke)`, ...) resolves.
|
|
79
|
+
* `strokeScale` scales the hand-drawn stroke width (design `--sw`, base 2.6px).
|
|
80
|
+
*/
|
|
81
|
+
export function terrainCssVars(mode, strokeScale = 1) {
|
|
82
|
+
const src = mode === "mono" ? MONO_VARS : COLOR_VARS;
|
|
83
|
+
const out = { ...BASE_VARS };
|
|
84
|
+
for (const [k, v] of Object.entries(src))
|
|
85
|
+
out[k] = v;
|
|
86
|
+
// design markup uses bare --stroke/--card; alias them.
|
|
87
|
+
out["--stroke"] = BASE_VARS["--uskmap-stroke"];
|
|
88
|
+
out["--card"] = BASE_VARS["--uskmap-card"];
|
|
89
|
+
out["--sw"] = `${2.6 * strokeScale}px`;
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UsketchPlugin } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { ColorMode } from "./palette.js";
|
|
3
|
+
import { type LineStyle } from "./render-config.js";
|
|
4
|
+
import { type TerrainKey } from "./terrain.js";
|
|
5
|
+
export interface MapPluginOptions {
|
|
6
|
+
/** Tile size in world units. Default 40 (matches the design grid). */
|
|
7
|
+
tile?: number;
|
|
8
|
+
defaultColorMode?: ColorMode;
|
|
9
|
+
defaultLineStyle?: LineStyle;
|
|
10
|
+
/**
|
|
11
|
+
* Terrain used for unset cells (e.g. `"water"` → unpainted/off-map space is
|
|
12
|
+
* sea). Default undefined = truly empty. Adjustable at runtime via the Control
|
|
13
|
+
* HUD "空きマス" setting.
|
|
14
|
+
*/
|
|
15
|
+
emptyTerrain?: TerrainKey;
|
|
16
|
+
}
|
|
17
|
+
export declare function createMapPlugin(options?: MapPluginOptions): UsketchPlugin;
|
|
18
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAIvE,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAKzD,MAAM,WAAW,gBAAgB;IAChC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;CAC1B;AAQD,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CA0H7E"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { MAP_ICON_TYPE, mapIconShapeDefinition } from "./map-icon-shape.js";
|
|
3
|
+
import { MapTerrainLayer } from "./map-layer.js";
|
|
4
|
+
import { createMapToolDefinition } from "./map-tool.js";
|
|
5
|
+
import { MAP_TOOL_ID } from "./map-tool-id.js";
|
|
6
|
+
import { createRangeEraseToolDefinition, RANGE_ERASE_TOOL_ID } from "./range-erase-tool.js";
|
|
7
|
+
import { renderConfigStore } from "./render-config.js";
|
|
8
|
+
import { EnterBanner } from "./team/enter-banner.js";
|
|
9
|
+
import { TeamAreaLayer } from "./team/team-layer.js";
|
|
10
|
+
import { createTeamMapShapeDefinition, TEAM_MAP_TYPE } from "./team/team-map-shape.js";
|
|
11
|
+
import { TERRAINS } from "./terrain.js";
|
|
12
|
+
import { createTileMapShapeDefinition, DEFAULT_TILE, TILEMAP_TYPE } from "./tilemap-shape.js";
|
|
13
|
+
import { MapPalette } from "./ui/palette.js";
|
|
14
|
+
import { RangeErasePalette } from "./ui/range-erase-palette.js";
|
|
15
|
+
const TERRAIN_LAYER_ID = "usketch-map:terrain";
|
|
16
|
+
const TEAM_LAYER_ID = "usketch-map:team";
|
|
17
|
+
const ENTER_BANNER_ID = "usketch-map:enter-banner";
|
|
18
|
+
const PALETTE_LAYER_ID = "usketch-map:palette";
|
|
19
|
+
const ERASE_PALETTE_LAYER_ID = "usketch-map:erase-palette";
|
|
20
|
+
export function createMapPlugin(options = {}) {
|
|
21
|
+
const tile = options.tile ?? DEFAULT_TILE;
|
|
22
|
+
if (options.defaultColorMode || options.defaultLineStyle || options.emptyTerrain) {
|
|
23
|
+
renderConfigStore.set({
|
|
24
|
+
colorMode: options.defaultColorMode,
|
|
25
|
+
lineStyle: options.defaultLineStyle,
|
|
26
|
+
emptyTerrain: options.emptyTerrain,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
id: "usketch-plugin-map",
|
|
31
|
+
name: "RPG マップ",
|
|
32
|
+
setup(ctx) {
|
|
33
|
+
// ── Shapes (tilemap + team-map = data-only substrates, map-icon = foreground) ──
|
|
34
|
+
ctx.shapes.register(TILEMAP_TYPE, createTileMapShapeDefinition(tile));
|
|
35
|
+
ctx.shapes.register(TEAM_MAP_TYPE, createTeamMapShapeDefinition(tile));
|
|
36
|
+
ctx.shapes.register(MAP_ICON_TYPE, mapIconShapeDefinition);
|
|
37
|
+
// ── Terrain MapLayer (behind all shapes) ──
|
|
38
|
+
ctx.layers.register({
|
|
39
|
+
id: TERRAIN_LAYER_ID,
|
|
40
|
+
order: 40,
|
|
41
|
+
fixed: true,
|
|
42
|
+
render: (lctx) => (_jsx(MapTerrainLayer, { store: ctx.store, renderMode: lctx.renderMode, tile: tile })),
|
|
43
|
+
});
|
|
44
|
+
// ── Team areas (above terrain, below shapes) + enter banner overlay ──
|
|
45
|
+
ctx.layers.register({
|
|
46
|
+
id: TEAM_LAYER_ID,
|
|
47
|
+
order: 42,
|
|
48
|
+
fixed: true,
|
|
49
|
+
render: (lctx) => _jsx(TeamAreaLayer, { store: ctx.store, renderMode: lctx.renderMode }),
|
|
50
|
+
});
|
|
51
|
+
ctx.layers.register({
|
|
52
|
+
id: ENTER_BANNER_ID,
|
|
53
|
+
order: 197,
|
|
54
|
+
fixed: true,
|
|
55
|
+
render: () => _jsx(EnterBanner, { store: ctx.store, tile: tile }),
|
|
56
|
+
});
|
|
57
|
+
// ── Tools ──
|
|
58
|
+
ctx.tools.register(MAP_TOOL_ID, createMapToolDefinition(tile));
|
|
59
|
+
ctx.tools.register(RANGE_ERASE_TOOL_ID, createRangeEraseToolDefinition(tile));
|
|
60
|
+
// ── Palette (shown while the map tool is active) ──
|
|
61
|
+
ctx.layers.register({
|
|
62
|
+
id: PALETTE_LAYER_ID,
|
|
63
|
+
order: 196,
|
|
64
|
+
fixed: true,
|
|
65
|
+
render: () => _jsx(MapPalette, { store: ctx.store, commands: ctx.commands, tile: tile }),
|
|
66
|
+
});
|
|
67
|
+
ctx.layers.register({
|
|
68
|
+
id: ERASE_PALETTE_LAYER_ID,
|
|
69
|
+
order: 196,
|
|
70
|
+
fixed: true,
|
|
71
|
+
render: () => _jsx(RangeErasePalette, { store: ctx.store }),
|
|
72
|
+
});
|
|
73
|
+
// ── Tweaks as declarative HUD settings (mirror the palette) ──
|
|
74
|
+
const unregisterHud = ctx.hud.registerSettings({
|
|
75
|
+
id: "usketch-map:tweaks",
|
|
76
|
+
label: "RPG マップ",
|
|
77
|
+
fields: [
|
|
78
|
+
{
|
|
79
|
+
name: "colorMode",
|
|
80
|
+
label: "配色",
|
|
81
|
+
type: "enum",
|
|
82
|
+
options: [
|
|
83
|
+
{ value: "color", label: "カラフル" },
|
|
84
|
+
{ value: "mono", label: "モノクロ" },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "lineStyle",
|
|
89
|
+
label: "線",
|
|
90
|
+
type: "enum",
|
|
91
|
+
options: [
|
|
92
|
+
{ value: "wobble", label: "揺らぎ" },
|
|
93
|
+
{ value: "clean", label: "クリーン" },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{ name: "strokeScale", label: "線の太さ", type: "number", min: 0.5, max: 2, step: 0.1 },
|
|
97
|
+
{
|
|
98
|
+
name: "emptyTerrain",
|
|
99
|
+
label: "空きマス",
|
|
100
|
+
type: "enum",
|
|
101
|
+
options: [
|
|
102
|
+
{ value: "none", label: "なし" },
|
|
103
|
+
...TERRAINS.map((t) => ({ value: t.key, label: t.name })),
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
get: (name) => {
|
|
108
|
+
if (name === "emptyTerrain")
|
|
109
|
+
return renderConfigStore.get().emptyTerrain ?? "none";
|
|
110
|
+
return renderConfigStore.get()[name];
|
|
111
|
+
},
|
|
112
|
+
set: (name, value) => {
|
|
113
|
+
if (name === "strokeScale")
|
|
114
|
+
renderConfigStore.set({ strokeScale: Number(value) });
|
|
115
|
+
else if (name === "colorMode")
|
|
116
|
+
renderConfigStore.set({ colorMode: value });
|
|
117
|
+
else if (name === "lineStyle")
|
|
118
|
+
renderConfigStore.set({ lineStyle: value });
|
|
119
|
+
else if (name === "emptyTerrain")
|
|
120
|
+
renderConfigStore.set({
|
|
121
|
+
emptyTerrain: value === "none" ? null : value,
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
subscribe: renderConfigStore.subscribe,
|
|
125
|
+
});
|
|
126
|
+
return () => {
|
|
127
|
+
ctx.layers.unregister(TERRAIN_LAYER_ID);
|
|
128
|
+
ctx.layers.unregister(TEAM_LAYER_ID);
|
|
129
|
+
ctx.layers.unregister(ENTER_BANNER_ID);
|
|
130
|
+
ctx.layers.unregister(PALETTE_LAYER_ID);
|
|
131
|
+
ctx.layers.unregister(ERASE_PALETTE_LAYER_ID);
|
|
132
|
+
unregisterHud();
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RangeEraseTargets {
|
|
2
|
+
/** Clear terrain tiles (tilemap.cells) in the box. */
|
|
3
|
+
terrain: boolean;
|
|
4
|
+
/** Clear team ownership (team-map.owner) in the box. */
|
|
5
|
+
team: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const rangeEraseStore: import("./reactive-store.js").ReactiveStore<RangeEraseTargets>;
|
|
8
|
+
export declare function useRangeEraseTargets(): RangeEraseTargets;
|
|
9
|
+
//# sourceMappingURL=range-erase-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-erase-state.d.ts","sourceRoot":"","sources":["../src/range-erase-state.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IACjC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,IAAI,EAAE,OAAO,CAAC;CACd;AAED,eAAO,MAAM,eAAe,gEAG1B,CAAC;AAEH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// What the range-erase tool clears — user-selectable targets (multi-select).
|
|
2
|
+
// Module-scoped, app-local (not synced).
|
|
3
|
+
import { useSyncExternalStore } from "react";
|
|
4
|
+
import { createReactiveStore } from "./reactive-store.js";
|
|
5
|
+
export const rangeEraseStore = createReactiveStore({
|
|
6
|
+
terrain: true,
|
|
7
|
+
team: true,
|
|
8
|
+
});
|
|
9
|
+
export function useRangeEraseTargets() {
|
|
10
|
+
return useSyncExternalStore(rangeEraseStore.subscribe, rangeEraseStore.get, rangeEraseStore.get);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=range-erase-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-erase-state.js","sourceRoot":"","sources":["../src/range-erase-state.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yCAAyC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAS1D,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAoB;IACrE,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB;IACnC,OAAO,oBAAoB,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;AAClG,CAAC"}
|