@adatechnology/game-shapes 0.1.0 → 0.2.1
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/README.md +5 -0
- package/dist/{chunk-R4RY23RH.js → chunk-M5N2SHNL.js} +27 -15
- package/dist/chunk-M5N2SHNL.js.map +1 -0
- package/dist/index.d.ts +40 -8
- package/dist/index.global.js +141 -17
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/{worker-W5A14FiP.d.ts → worker-DUZKXhCw.d.ts} +9 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +1 -1
- package/package.json +4 -1
- package/dist/chunk-R4RY23RH.js.map +0 -1
package/README.md
CHANGED
|
@@ -140,6 +140,11 @@ A `lod` rule `{ distance, detail, minSize?, minSegments? }` regenerates the tree
|
|
|
140
140
|
static body. Instance a node when the same geometry repeats tens of times or is placed at run time; merge when copies are few or coloured per
|
|
141
141
|
vertex.
|
|
142
142
|
|
|
143
|
+
## Generators by instance
|
|
144
|
+
|
|
145
|
+
`createShapes({ packs, patch, remove })` makes a set of generators of its own. `packs` is a list of objects `{ [name]: ShapeGenerator }` (`[{ 'my.stones': stones }]`); later packs replace earlier ones with the same name.
|
|
146
|
+
`patch` replaces a generator by name, `remove` lists names to take out. `shapes.generate` looks custom nodes up in that set only. For a pool use `createShapePool({ generators: shapes.record(), isolatedGenerators: true })`: its jobs then run in the calling thread and never see the global registry.
|
|
147
|
+
|
|
143
148
|
## Português
|
|
144
149
|
|
|
145
150
|
Gerador único de 3D do kit: forma em JSON vira buffers por material, puro, por semente, pronto para worker e cache. Os geradores são portes linha a
|
|
@@ -1431,8 +1431,8 @@ function mesh(p) {
|
|
|
1431
1431
|
groups: []
|
|
1432
1432
|
};
|
|
1433
1433
|
}
|
|
1434
|
-
function make(
|
|
1435
|
-
switch (kind) {
|
|
1434
|
+
function make(p) {
|
|
1435
|
+
switch (p.kind) {
|
|
1436
1436
|
case "box": {
|
|
1437
1437
|
const size = p.size ?? [1, 1, 1];
|
|
1438
1438
|
const segments = p.segments ?? [1, 1, 1];
|
|
@@ -1461,7 +1461,7 @@ function make(kind, p) {
|
|
|
1461
1461
|
case "mesh":
|
|
1462
1462
|
return mesh(p);
|
|
1463
1463
|
default:
|
|
1464
|
-
throw new Error(`game-shapes: unknown primitive kind "${String(kind)}"`);
|
|
1464
|
+
throw new Error(`game-shapes: unknown primitive kind "${String(p.kind)}"`);
|
|
1465
1465
|
}
|
|
1466
1466
|
}
|
|
1467
1467
|
var templates = /* @__PURE__ */ new Map();
|
|
@@ -1479,7 +1479,7 @@ function clearTemplateCache() {
|
|
|
1479
1479
|
var templateCacheStats = () => ({ size: templates.size, ...stats });
|
|
1480
1480
|
function buildPrimitive(node, options = {}) {
|
|
1481
1481
|
const parameters = primitiveParameters(node, options);
|
|
1482
|
-
if (node.kind === "mesh" || templateLimit === 0) return make(node
|
|
1482
|
+
if (node.kind === "mesh" || templateLimit === 0) return make({ ...node, ...parameters });
|
|
1483
1483
|
const key = `${node.kind}:${canonicalJson(parameters)}`;
|
|
1484
1484
|
const cached = templates.get(key);
|
|
1485
1485
|
if (cached) {
|
|
@@ -1489,7 +1489,7 @@ function buildPrimitive(node, options = {}) {
|
|
|
1489
1489
|
return cached;
|
|
1490
1490
|
}
|
|
1491
1491
|
stats.misses++;
|
|
1492
|
-
const built = make(node
|
|
1492
|
+
const built = make({ ...node, ...parameters });
|
|
1493
1493
|
templates.set(key, built);
|
|
1494
1494
|
if (templates.size > templateLimit) templates.delete(templates.keys().next().value);
|
|
1495
1495
|
return built;
|
|
@@ -1520,14 +1520,23 @@ function mulberry32(seed) {
|
|
|
1520
1520
|
var streamFor = (seed, generator, path) => mulberry32(parseInt(hash64(`${String(seed)}\0${generator}\0${path}`).slice(0, 8), 16));
|
|
1521
1521
|
|
|
1522
1522
|
// src/registry.ts
|
|
1523
|
-
var
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1523
|
+
var GENERATOR_NAME = /^[a-zA-Z][\w.:-]*$/;
|
|
1524
|
+
var generatorsOver = (generators) => ({
|
|
1525
|
+
register(name, generator) {
|
|
1526
|
+
if (!GENERATOR_NAME.test(name)) throw new Error(`game-shapes: generator name "${name}" must start with a letter and use letters, digits, ".", ":", "-" or "_"`);
|
|
1527
|
+
generators.set(name, generator);
|
|
1528
|
+
},
|
|
1529
|
+
unregister: (name) => generators.delete(name),
|
|
1530
|
+
get: (name) => generators.get(name),
|
|
1531
|
+
list: () => [...generators.keys()].sort(),
|
|
1532
|
+
record: () => Object.fromEntries(generators)
|
|
1533
|
+
});
|
|
1534
|
+
var defaultGenerators;
|
|
1535
|
+
var defaultShapeGenerators = () => defaultGenerators ?? (defaultGenerators = generatorsOver(/* @__PURE__ */ new Map()));
|
|
1536
|
+
var registerGenerator = (name, generator) => defaultShapeGenerators().register(name, generator);
|
|
1537
|
+
var unregisterGenerator = (name) => defaultShapeGenerators().unregister(name);
|
|
1538
|
+
var getGenerator = (name) => defaultShapeGenerators().get(name);
|
|
1539
|
+
var listGenerators = () => defaultShapeGenerators().list();
|
|
1531
1540
|
|
|
1532
1541
|
// schema/shape.schema.json
|
|
1533
1542
|
var shape_schema_default = {
|
|
@@ -2573,7 +2582,7 @@ var radiusOf = (t, world) => {
|
|
|
2573
2582
|
return r * Math.max(sx, sy, sz);
|
|
2574
2583
|
};
|
|
2575
2584
|
function expandCustom(node, settings, detail, path) {
|
|
2576
|
-
const generator = settings.generators?.[node.generator] ?? getGenerator(node.generator);
|
|
2585
|
+
const generator = settings.generators?.[node.generator] ?? (settings.isolatedGenerators ? void 0 : getGenerator(node.generator));
|
|
2577
2586
|
if (!generator) throw new Error(`game-shapes: no generator "${node.generator}" (register it with registerGenerator, in the worker too) at ${path}`);
|
|
2578
2587
|
const generated = generator(node.params, { random: streamFor(settings.seed, node.generator, path), seed: settings.seed, detail, path });
|
|
2579
2588
|
const { kind: _kind, generator: _generator, params: _params, ...common } = node;
|
|
@@ -2781,6 +2790,7 @@ function generate(schema, options = {}) {
|
|
|
2781
2790
|
...options.materialAlias ? { alias: options.materialAlias } : {},
|
|
2782
2791
|
seed: options.seed ?? 0,
|
|
2783
2792
|
...options.generators ? { generators: options.generators } : {},
|
|
2793
|
+
...options.isolatedGenerators ? { isolatedGenerators: true } : {},
|
|
2784
2794
|
...options.instancing ? { autoMin: Math.max(2, options.instancing.minCount) } : {}
|
|
2785
2795
|
};
|
|
2786
2796
|
const specs = [{ distance: 0, detail: 1, index: 0 }, ...(schema.lod ?? []).map((rule, index) => ({ ...rule, index: index + 1 }))];
|
|
@@ -2952,6 +2962,8 @@ export {
|
|
|
2952
2962
|
clonePrimitive,
|
|
2953
2963
|
mulberry32,
|
|
2954
2964
|
streamFor,
|
|
2965
|
+
generatorsOver,
|
|
2966
|
+
defaultShapeGenerators,
|
|
2955
2967
|
registerGenerator,
|
|
2956
2968
|
unregisterGenerator,
|
|
2957
2969
|
getGenerator,
|
|
@@ -2969,4 +2981,4 @@ export {
|
|
|
2969
2981
|
byteSizeOf,
|
|
2970
2982
|
installShapeWorker
|
|
2971
2983
|
};
|
|
2972
|
-
//# sourceMappingURL=chunk-
|
|
2984
|
+
//# sourceMappingURL=chunk-M5N2SHNL.js.map
|