@skenora/scene-plan 0.1.2
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 +114 -0
- package/dist/check/check-scene-input.d.ts +38 -0
- package/dist/check/check-scene-input.d.ts.map +1 -0
- package/dist/check/check-scene-input.js +209 -0
- package/dist/check/check-scene-input.js.map +1 -0
- package/dist/compilation/compile.d.ts +4 -0
- package/dist/compilation/compile.d.ts.map +1 -0
- package/dist/compilation/compile.js +498 -0
- package/dist/compilation/compile.js.map +1 -0
- package/dist/description/example-recipes.d.ts +66 -0
- package/dist/description/example-recipes.d.ts.map +1 -0
- package/dist/description/example-recipes.js +1097 -0
- package/dist/description/example-recipes.js.map +1 -0
- package/dist/description/examples.d.ts +18 -0
- package/dist/description/examples.d.ts.map +1 -0
- package/dist/description/examples.js +58 -0
- package/dist/description/examples.js.map +1 -0
- package/dist/description/information.d.ts +415 -0
- package/dist/description/information.d.ts.map +1 -0
- package/dist/description/information.js +980 -0
- package/dist/description/information.js.map +1 -0
- package/dist/description/recipes.d.ts +20 -0
- package/dist/description/recipes.d.ts.map +1 -0
- package/dist/description/recipes.js +163 -0
- package/dist/description/recipes.js.map +1 -0
- package/dist/description/scene-fields.d.ts +11 -0
- package/dist/description/scene-fields.d.ts.map +1 -0
- package/dist/description/scene-fields.js +471 -0
- package/dist/description/scene-fields.js.map +1 -0
- package/dist/diagnostics/diagnostics.d.ts +79 -0
- package/dist/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics/diagnostics.js +91 -0
- package/dist/diagnostics/diagnostics.js.map +1 -0
- package/dist/generated/example-gallery.d.ts +2897 -0
- package/dist/generated/example-gallery.d.ts.map +1 -0
- package/dist/generated/example-gallery.js +3290 -0
- package/dist/generated/example-gallery.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/model/json.d.ts +14 -0
- package/dist/model/json.d.ts.map +1 -0
- package/dist/model/json.js +60 -0
- package/dist/model/json.js.map +1 -0
- package/dist/model/types.d.ts +329 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +5 -0
- package/dist/model/types.js.map +1 -0
- package/dist/normalization/normalize.d.ts +7 -0
- package/dist/normalization/normalize.d.ts.map +1 -0
- package/dist/normalization/normalize.js +145 -0
- package/dist/normalization/normalize.js.map +1 -0
- package/dist/parsing/parse.d.ts +5 -0
- package/dist/parsing/parse.d.ts.map +1 -0
- package/dist/parsing/parse.js +330 -0
- package/dist/parsing/parse.js.map +1 -0
- package/dist/patch/patch.d.ts +6 -0
- package/dist/patch/patch.d.ts.map +1 -0
- package/dist/patch/patch.js +319 -0
- package/dist/patch/patch.js.map +1 -0
- package/dist/validation/validate.d.ts +16 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +704 -0
- package/dist/validation/validate.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
import { assertSceneDocument, createEmptySceneDocument, normalizeSceneDocument, findUnavailableSceneCapabilities, } from "@skenora/contracts";
|
|
2
|
+
import { createDiagnostic, finalizeDiagnostics, hasErrors, } from "../diagnostics/diagnostics.js";
|
|
3
|
+
import { isJsonObject } from "../model/json.js";
|
|
4
|
+
import { normalizeSceneBlueprint } from "../normalization/normalize.js";
|
|
5
|
+
import { validateNativeDocumentShape, validateNormalizedSceneBlueprint, } from "../validation/validate.js";
|
|
6
|
+
const DEFAULT_PRIMITIVE_COLOR = { r: 0.7, g: 0.72, b: 0.76 };
|
|
7
|
+
const DEFAULT_SHAPE_FILL = { r: 0.2, g: 0.55, b: 1 };
|
|
8
|
+
const DEFAULT_SHAPE_STROKE = { r: 0.3, g: 0.7, b: 1 };
|
|
9
|
+
const ZERO_VECTOR = { x: 0, y: 0, z: 0 };
|
|
10
|
+
const IDENTITY_SCALING = { x: 1, y: 1, z: 1 };
|
|
11
|
+
export function compileSceneBlueprint(input, context = {}) {
|
|
12
|
+
const normalized = normalizeSceneBlueprint(input);
|
|
13
|
+
if (!normalized.ok || !normalized.value) {
|
|
14
|
+
return {
|
|
15
|
+
ok: false,
|
|
16
|
+
sourceMappings: [],
|
|
17
|
+
diagnostics: normalized.diagnostics,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const blueprint = normalized.value;
|
|
21
|
+
const planHash = hashJson(blueprint);
|
|
22
|
+
const diagnostics = [
|
|
23
|
+
...normalized.diagnostics,
|
|
24
|
+
...validateNormalizedSceneBlueprint(blueprint, context, {
|
|
25
|
+
requireResourceBindings: true,
|
|
26
|
+
}),
|
|
27
|
+
];
|
|
28
|
+
const sourceMappings = createSourceMappings(blueprint);
|
|
29
|
+
const preflight = finalizeDiagnostics(diagnostics);
|
|
30
|
+
if (hasErrors(preflight)) {
|
|
31
|
+
return {
|
|
32
|
+
ok: false,
|
|
33
|
+
planHash,
|
|
34
|
+
sourceMappings,
|
|
35
|
+
diagnostics: preflight,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const candidate = createCandidateDocument(blueprint, context, diagnostics);
|
|
39
|
+
if (!candidate) {
|
|
40
|
+
const finalized = finalizeDiagnostics(diagnostics);
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
planHash,
|
|
44
|
+
sourceMappings,
|
|
45
|
+
diagnostics: finalized,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const nativeShape = validateNativeDocumentShape(candidate);
|
|
49
|
+
diagnostics.push(...nativeShape.diagnostics.map((diagnostic) => {
|
|
50
|
+
const mapping = sourceMappings.find((entry) => entry.documentPath.every((part, index) => part === diagnostic.path[index]));
|
|
51
|
+
return mapping
|
|
52
|
+
? {
|
|
53
|
+
...diagnostic,
|
|
54
|
+
path: [
|
|
55
|
+
...mapping.planPath,
|
|
56
|
+
...diagnostic.path.slice(mapping.documentPath.length),
|
|
57
|
+
],
|
|
58
|
+
}
|
|
59
|
+
: diagnostic;
|
|
60
|
+
}));
|
|
61
|
+
if (context.capabilityAvailability && nativeShape.diagnostics.length === 0) {
|
|
62
|
+
for (const usage of findUnavailableSceneCapabilities(candidate, context.capabilityAvailability)) {
|
|
63
|
+
const mapping = sourceMappings.find((entry) => entry.documentPath.every((part, index) => part === usage.path[index]));
|
|
64
|
+
diagnostics.push(createDiagnostic({
|
|
65
|
+
code: "unavailable-scene-capability",
|
|
66
|
+
stage: "compile",
|
|
67
|
+
path: mapping
|
|
68
|
+
? [
|
|
69
|
+
...mapping.planPath,
|
|
70
|
+
...usage.path.slice(mapping.documentPath.length),
|
|
71
|
+
]
|
|
72
|
+
: usage.path,
|
|
73
|
+
message: `Required scene capability is unavailable: ${usage.id}@${usage.version}`,
|
|
74
|
+
recoverable: true,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
assertSceneDocument(candidate);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (!nativeShape.diagnostics.length) {
|
|
83
|
+
diagnostics.push(createDiagnostic({
|
|
84
|
+
code: "native-document-invalid",
|
|
85
|
+
stage: "compile",
|
|
86
|
+
path: [],
|
|
87
|
+
message: error instanceof Error
|
|
88
|
+
? error.message
|
|
89
|
+
: "Compiled SceneDocument candidate was rejected",
|
|
90
|
+
recoverable: false,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const finalized = finalizeDiagnostics(diagnostics);
|
|
95
|
+
if (hasErrors(finalized)) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
planHash,
|
|
99
|
+
sourceMappings,
|
|
100
|
+
diagnostics: finalized,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
ok: true,
|
|
105
|
+
document: structuredClone(candidate),
|
|
106
|
+
planHash,
|
|
107
|
+
sourceMappings,
|
|
108
|
+
diagnostics: finalized,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function createCandidateDocument(blueprint, context, diagnostics) {
|
|
112
|
+
const defaults = createEmptySceneDocument(blueprint.scene.id, blueprint.scene.name);
|
|
113
|
+
const assets = compileAssets(blueprint.resources, context, diagnostics);
|
|
114
|
+
const entities = {};
|
|
115
|
+
const rootEntityIds = [];
|
|
116
|
+
for (const entity of blueprint.entities) {
|
|
117
|
+
const compiled = compileEntity(entity);
|
|
118
|
+
entities[compiled.id] = compiled;
|
|
119
|
+
if (compiled.parentId === null)
|
|
120
|
+
rootEntityIds.push(compiled.id);
|
|
121
|
+
}
|
|
122
|
+
const materials = {};
|
|
123
|
+
for (const material of blueprint.materials) {
|
|
124
|
+
materials[material.id] = compileMaterial(material);
|
|
125
|
+
}
|
|
126
|
+
const materialBindings = Object.fromEntries(blueprint.materialBindings.map((binding) => [
|
|
127
|
+
binding.id,
|
|
128
|
+
structuredClone(binding),
|
|
129
|
+
]));
|
|
130
|
+
const textureAnimations = Object.fromEntries(blueprint.textureAnimations.map((animation) => [
|
|
131
|
+
animation.id,
|
|
132
|
+
structuredClone(animation),
|
|
133
|
+
]));
|
|
134
|
+
const cameraPaths = Object.fromEntries(blueprint.cameraPaths.map((path) => [path.id, structuredClone(path)]));
|
|
135
|
+
const flows = Object.fromEntries(blueprint.flows.map((flow) => [flow.id, structuredClone(flow)]));
|
|
136
|
+
const extensions = Object.fromEntries(blueprint.extensions.map((extension) => [
|
|
137
|
+
extension.namespace,
|
|
138
|
+
{
|
|
139
|
+
version: extension.version,
|
|
140
|
+
capability: extension.capability,
|
|
141
|
+
required: extension.required,
|
|
142
|
+
data: structuredClone(extension.data),
|
|
143
|
+
},
|
|
144
|
+
]));
|
|
145
|
+
const raw = {
|
|
146
|
+
...defaults,
|
|
147
|
+
assets,
|
|
148
|
+
entities,
|
|
149
|
+
rootEntityIds,
|
|
150
|
+
materials,
|
|
151
|
+
materialBindings,
|
|
152
|
+
textureAnimations,
|
|
153
|
+
camera: cloneOptional(blueprint.camera, defaults.camera),
|
|
154
|
+
cameraPaths,
|
|
155
|
+
environment: cloneOptional(blueprint.environment, defaults.environment),
|
|
156
|
+
ground: cloneOptional(blueprint.ground, defaults.ground),
|
|
157
|
+
fog: cloneOptional(blueprint.fog, defaults.fog),
|
|
158
|
+
weather: cloneOptional(blueprint.weather, defaults.weather),
|
|
159
|
+
lights: blueprint.lights === undefined
|
|
160
|
+
? structuredClone(defaults.lights)
|
|
161
|
+
: structuredClone(blueprint.lights),
|
|
162
|
+
postProcess: cloneOptional(blueprint.postProcess, defaults.postProcess),
|
|
163
|
+
flows,
|
|
164
|
+
variables: structuredClone(blueprint.initialVariables),
|
|
165
|
+
extensions,
|
|
166
|
+
};
|
|
167
|
+
const normalized = normalizeSceneDocument(raw);
|
|
168
|
+
if (!isJsonObject(normalized)) {
|
|
169
|
+
diagnostics.push(createDiagnostic({
|
|
170
|
+
code: "native-document-invalid",
|
|
171
|
+
stage: "compile",
|
|
172
|
+
path: [],
|
|
173
|
+
message: "Native document normalization did not return an object",
|
|
174
|
+
recoverable: false,
|
|
175
|
+
}));
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return normalized;
|
|
179
|
+
}
|
|
180
|
+
function compileAssets(resources, context, diagnostics) {
|
|
181
|
+
const assets = {};
|
|
182
|
+
for (const resource of resources) {
|
|
183
|
+
const binding = context.resourceBindings?.[resource.id];
|
|
184
|
+
if (!binding) {
|
|
185
|
+
diagnostics.push(createDiagnostic({
|
|
186
|
+
code: "missing-resource-binding",
|
|
187
|
+
stage: "compile",
|
|
188
|
+
path: ["resources", resource.id],
|
|
189
|
+
message: `Cannot compile resource without a binding: ${resource.id}`,
|
|
190
|
+
recoverable: true,
|
|
191
|
+
assetId: resource.id,
|
|
192
|
+
}));
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const source = binding.source;
|
|
196
|
+
const legacyUri = binding.uri;
|
|
197
|
+
assets[resource.id] = {
|
|
198
|
+
id: resource.id,
|
|
199
|
+
kind: binding.kind,
|
|
200
|
+
...(source === undefined ? {} : { source: structuredClone(source) }),
|
|
201
|
+
...(source === undefined && legacyUri === undefined
|
|
202
|
+
? {}
|
|
203
|
+
: source === undefined
|
|
204
|
+
? { uri: legacyUri }
|
|
205
|
+
: {}),
|
|
206
|
+
...((binding.mediaType ?? resource.mediaType)
|
|
207
|
+
? { mediaType: binding.mediaType ?? resource.mediaType }
|
|
208
|
+
: {}),
|
|
209
|
+
...((binding.label ?? resource.label)
|
|
210
|
+
? { label: binding.label ?? resource.label }
|
|
211
|
+
: {}),
|
|
212
|
+
...((binding.integrity ?? resource.integrity)
|
|
213
|
+
? {
|
|
214
|
+
integrity: structuredClone(binding.integrity ?? resource.integrity),
|
|
215
|
+
}
|
|
216
|
+
: {}),
|
|
217
|
+
...(binding.provenance === undefined
|
|
218
|
+
? {}
|
|
219
|
+
: {
|
|
220
|
+
provenance: structuredClone(binding.provenance),
|
|
221
|
+
}),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return assets;
|
|
225
|
+
}
|
|
226
|
+
function compileEntity(entity) {
|
|
227
|
+
const source = entity;
|
|
228
|
+
const base = {
|
|
229
|
+
id: entity.id,
|
|
230
|
+
name: entity.name ?? entity.id,
|
|
231
|
+
type: entity.kind,
|
|
232
|
+
parentId: entity.parentId ?? null,
|
|
233
|
+
enabled: entity.enabled ?? true,
|
|
234
|
+
visible: entity.visible ?? true,
|
|
235
|
+
transform: compileTransform(entity.transform),
|
|
236
|
+
};
|
|
237
|
+
if (entity.kind === "model") {
|
|
238
|
+
return {
|
|
239
|
+
...base,
|
|
240
|
+
type: "model",
|
|
241
|
+
assetId: entity.assetRef,
|
|
242
|
+
...(entity.sourceNode === undefined
|
|
243
|
+
? {}
|
|
244
|
+
: { sourceNode: entity.sourceNode }),
|
|
245
|
+
...compileProperties(entity.properties, entity.alignment),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
if (entity.kind === "group") {
|
|
249
|
+
return {
|
|
250
|
+
...base,
|
|
251
|
+
type: "group",
|
|
252
|
+
...compileProperties(entity.properties, undefined),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (entity.kind === "primitive") {
|
|
256
|
+
const input = asObject(entity.properties);
|
|
257
|
+
const properties = {
|
|
258
|
+
...input,
|
|
259
|
+
primitive: entity.primitive,
|
|
260
|
+
size: entity.size ?? numberOr(input.size, 1),
|
|
261
|
+
color: entity.color ?? colorOr(input.color, DEFAULT_PRIMITIVE_COLOR),
|
|
262
|
+
...optionalProperty("width", entity.width ?? input.width),
|
|
263
|
+
...optionalProperty("height", entity.height ?? input.height),
|
|
264
|
+
...optionalProperty("depth", entity.depth ?? input.depth),
|
|
265
|
+
...optionalProperty("diameter", entity.diameter ?? input.diameter),
|
|
266
|
+
};
|
|
267
|
+
return { ...base, type: "primitive", properties };
|
|
268
|
+
}
|
|
269
|
+
if (entity.kind === "procedural") {
|
|
270
|
+
const input = asObject(entity.properties);
|
|
271
|
+
return {
|
|
272
|
+
...base,
|
|
273
|
+
type: "procedural",
|
|
274
|
+
properties: {
|
|
275
|
+
...input,
|
|
276
|
+
program: structuredClone(entity.program),
|
|
277
|
+
color: entity.color ?? colorOr(input.color, DEFAULT_PRIMITIVE_COLOR),
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
if (entity.kind === "shape") {
|
|
282
|
+
const input = asObject(entity.properties);
|
|
283
|
+
const closed = entity.closed ??
|
|
284
|
+
booleanOr(input.closed, defaultShapeClosed(entity.shape));
|
|
285
|
+
const points = entity.points ?? vector3ArrayOr(input.points, createShapePoints(entity));
|
|
286
|
+
const properties = {
|
|
287
|
+
...input,
|
|
288
|
+
shape: entity.shape,
|
|
289
|
+
points,
|
|
290
|
+
closed,
|
|
291
|
+
fillColor: entity.fillColor ?? colorOr(input.fillColor, DEFAULT_SHAPE_FILL),
|
|
292
|
+
fillAlpha: entity.fillAlpha ?? numberOr(input.fillAlpha, 0.35),
|
|
293
|
+
strokeColor: entity.strokeColor ?? colorOr(input.strokeColor, DEFAULT_SHAPE_STROKE),
|
|
294
|
+
...optionalProperty("width", entity.width ?? input.width),
|
|
295
|
+
...optionalProperty("height", entity.height ?? input.height),
|
|
296
|
+
...optionalProperty("radius", entity.radius ?? input.radius),
|
|
297
|
+
...optionalProperty("depth", entity.depth ?? input.depth),
|
|
298
|
+
...optionalProperty("tubeRadius", entity.tubeRadius ?? input.tubeRadius),
|
|
299
|
+
...optionalProperty("wallHeight", entity.wallHeight ?? input.wallHeight),
|
|
300
|
+
...optionalProperty("segments", entity.segments ?? input.segments),
|
|
301
|
+
};
|
|
302
|
+
return { ...base, type: "shape", properties };
|
|
303
|
+
}
|
|
304
|
+
if (entity.kind === "particle") {
|
|
305
|
+
const input = asObject(entity.properties);
|
|
306
|
+
const properties = {
|
|
307
|
+
emitter: "point",
|
|
308
|
+
capacity: 2_000,
|
|
309
|
+
emitRate: 100,
|
|
310
|
+
minLifeTime: 0.5,
|
|
311
|
+
maxLifeTime: 2,
|
|
312
|
+
minSize: 0.05,
|
|
313
|
+
maxSize: 0.15,
|
|
314
|
+
minEmitPower: 0.5,
|
|
315
|
+
maxEmitPower: 1.5,
|
|
316
|
+
gravity: { x: 0, y: -0.5, z: 0 },
|
|
317
|
+
color1: { r: 1, g: 1, b: 1 },
|
|
318
|
+
color2: { r: 0.4, g: 0.65, b: 1 },
|
|
319
|
+
autoStart: true,
|
|
320
|
+
...input,
|
|
321
|
+
...(entity.textureAssetRef === undefined
|
|
322
|
+
? {}
|
|
323
|
+
: { textureAssetId: entity.textureAssetRef }),
|
|
324
|
+
};
|
|
325
|
+
return { ...base, type: "particle", properties };
|
|
326
|
+
}
|
|
327
|
+
if (entity.kind === "annotation") {
|
|
328
|
+
const input = asObject(entity.properties);
|
|
329
|
+
return {
|
|
330
|
+
...base,
|
|
331
|
+
type: "annotation",
|
|
332
|
+
properties: {
|
|
333
|
+
text: entity.name ?? entity.id,
|
|
334
|
+
color: "#ffffff",
|
|
335
|
+
offset: { ...ZERO_VECTOR },
|
|
336
|
+
priority: 0,
|
|
337
|
+
...input,
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
if (entity.kind === "camera") {
|
|
342
|
+
const input = asObject(entity.properties);
|
|
343
|
+
return {
|
|
344
|
+
...base,
|
|
345
|
+
type: "camera",
|
|
346
|
+
properties: {
|
|
347
|
+
projection: "perspective",
|
|
348
|
+
fov: 0.8,
|
|
349
|
+
minZ: 0.01,
|
|
350
|
+
maxZ: 10_000,
|
|
351
|
+
speed: 1,
|
|
352
|
+
...input,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
return { ...base, type: "mesh" };
|
|
357
|
+
}
|
|
358
|
+
function compileProperties(properties, alignment) {
|
|
359
|
+
const input = asObject(properties);
|
|
360
|
+
return {
|
|
361
|
+
properties: {
|
|
362
|
+
...input,
|
|
363
|
+
...(alignment === undefined
|
|
364
|
+
? {}
|
|
365
|
+
: { alignment: structuredClone(alignment) }),
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
function compileTransform(transform) {
|
|
370
|
+
const source = transform;
|
|
371
|
+
return {
|
|
372
|
+
position: structuredClone(source?.position ?? ZERO_VECTOR),
|
|
373
|
+
rotation: structuredClone(source?.rotationRadians ?? ZERO_VECTOR),
|
|
374
|
+
scaling: structuredClone(source?.scaling ?? IDENTITY_SCALING),
|
|
375
|
+
...(source?.rotationQuaternion === undefined
|
|
376
|
+
? {}
|
|
377
|
+
: { rotationQuaternion: structuredClone(source.rotationQuaternion) }),
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
function compileMaterial(material) {
|
|
381
|
+
const { id, ...definition } = structuredClone(material);
|
|
382
|
+
return { id, ...definition };
|
|
383
|
+
}
|
|
384
|
+
function createShapePoints(entity) {
|
|
385
|
+
if (entity.shape === "rectangle" || entity.shape === "box") {
|
|
386
|
+
const width = entity.width ?? 1;
|
|
387
|
+
const height = entity.shape === "box" ? (entity.depth ?? 1) : (entity.height ?? 1);
|
|
388
|
+
return [
|
|
389
|
+
{ x: -width / 2, y: 0, z: -height / 2 },
|
|
390
|
+
{ x: width / 2, y: 0, z: -height / 2 },
|
|
391
|
+
{ x: width / 2, y: 0, z: height / 2 },
|
|
392
|
+
{ x: -width / 2, y: 0, z: height / 2 },
|
|
393
|
+
];
|
|
394
|
+
}
|
|
395
|
+
if (entity.shape === "circle") {
|
|
396
|
+
const radius = entity.radius ?? 0.5;
|
|
397
|
+
const segments = entity.segments ?? 32;
|
|
398
|
+
return Array.from({ length: segments }, (_, index) => {
|
|
399
|
+
const angle = (index / segments) * Math.PI * 2;
|
|
400
|
+
return { x: Math.cos(angle) * radius, y: 0, z: Math.sin(angle) * radius };
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
return [];
|
|
404
|
+
}
|
|
405
|
+
function defaultShapeClosed(shape) {
|
|
406
|
+
return ["rectangle", "circle", "polygon", "box"].includes(shape);
|
|
407
|
+
}
|
|
408
|
+
function asObject(value) {
|
|
409
|
+
return isJsonObject(value) ? value : {};
|
|
410
|
+
}
|
|
411
|
+
function numberOr(value, fallback) {
|
|
412
|
+
return typeof value === "number" ? value : fallback;
|
|
413
|
+
}
|
|
414
|
+
function booleanOr(value, fallback) {
|
|
415
|
+
return typeof value === "boolean" ? value : fallback;
|
|
416
|
+
}
|
|
417
|
+
function colorOr(value, fallback) {
|
|
418
|
+
return isJsonObject(value) &&
|
|
419
|
+
typeof value.r === "number" &&
|
|
420
|
+
typeof value.g === "number" &&
|
|
421
|
+
typeof value.b === "number"
|
|
422
|
+
? { r: value.r, g: value.g, b: value.b }
|
|
423
|
+
: { ...fallback };
|
|
424
|
+
}
|
|
425
|
+
function vector3ArrayOr(value, fallback) {
|
|
426
|
+
return Array.isArray(value)
|
|
427
|
+
? structuredClone(value)
|
|
428
|
+
: structuredClone(fallback);
|
|
429
|
+
}
|
|
430
|
+
function optionalProperty(key, value) {
|
|
431
|
+
return value === undefined ? {} : { [key]: value };
|
|
432
|
+
}
|
|
433
|
+
function cloneOptional(value, fallback) {
|
|
434
|
+
return structuredClone(value === undefined ? fallback : value);
|
|
435
|
+
}
|
|
436
|
+
function createSourceMappings(blueprint) {
|
|
437
|
+
const mappings = [];
|
|
438
|
+
for (const [index, resource] of blueprint.resources.entries()) {
|
|
439
|
+
mappings.push({
|
|
440
|
+
planPath: ["resources", index],
|
|
441
|
+
documentPath: ["assets", resource.id],
|
|
442
|
+
kind: "resource",
|
|
443
|
+
id: resource.id,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
for (const [index, entity] of blueprint.entities.entries()) {
|
|
447
|
+
mappings.push({
|
|
448
|
+
planPath: ["entities", index],
|
|
449
|
+
documentPath: ["entities", entity.id],
|
|
450
|
+
kind: "entity",
|
|
451
|
+
id: entity.id,
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
for (const [index, material] of blueprint.materials.entries()) {
|
|
455
|
+
mappings.push({
|
|
456
|
+
planPath: ["materials", index],
|
|
457
|
+
documentPath: ["materials", material.id],
|
|
458
|
+
kind: "material",
|
|
459
|
+
id: material.id,
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
for (const [index, binding] of blueprint.materialBindings.entries()) {
|
|
463
|
+
mappings.push({
|
|
464
|
+
planPath: ["materialBindings", index],
|
|
465
|
+
documentPath: ["materialBindings", binding.id],
|
|
466
|
+
kind: "binding",
|
|
467
|
+
id: binding.id,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
for (const [index, flow] of blueprint.flows.entries()) {
|
|
471
|
+
mappings.push({
|
|
472
|
+
planPath: ["flows", index],
|
|
473
|
+
documentPath: ["flows", flow.id],
|
|
474
|
+
kind: "flow",
|
|
475
|
+
id: flow.id,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
return Object.freeze(mappings);
|
|
479
|
+
}
|
|
480
|
+
function hashJson(value) {
|
|
481
|
+
const canonical = JSON.stringify(canonicalize(value));
|
|
482
|
+
let hash = 2_166_136_261;
|
|
483
|
+
for (let index = 0; index < canonical.length; index += 1) {
|
|
484
|
+
hash ^= canonical.charCodeAt(index);
|
|
485
|
+
hash = Math.imul(hash, 16_777_619);
|
|
486
|
+
}
|
|
487
|
+
return `fnv1a-${(hash >>> 0).toString(16).padStart(8, "0")}`;
|
|
488
|
+
}
|
|
489
|
+
function canonicalize(value) {
|
|
490
|
+
if (Array.isArray(value))
|
|
491
|
+
return value.map(canonicalize);
|
|
492
|
+
if (!isJsonObject(value))
|
|
493
|
+
return value;
|
|
494
|
+
return Object.fromEntries(Object.entries(value)
|
|
495
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
496
|
+
.map(([key, child]) => [key, canonicalize(child)]));
|
|
497
|
+
}
|
|
498
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compilation/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type Color3Value, type FieldRule } from "@skenora/contracts";
|
|
2
|
+
import { type SceneBlueprintInput } from "../model/types.js";
|
|
3
|
+
export interface ClippingSectionRecipeOptions {
|
|
4
|
+
readonly id?: string;
|
|
5
|
+
readonly radius?: number;
|
|
6
|
+
readonly offset?: number;
|
|
7
|
+
readonly side?: "positive" | "negative";
|
|
8
|
+
readonly edgeWidth?: number;
|
|
9
|
+
readonly edgeColor?: Color3Value;
|
|
10
|
+
readonly edgeIntensity?: number;
|
|
11
|
+
readonly surfaceColor?: Color3Value;
|
|
12
|
+
readonly capColor?: Color3Value;
|
|
13
|
+
readonly cap?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const CLIPPING_SECTION_RECIPE_OPTIONS_RULE: FieldRule;
|
|
16
|
+
export declare function createClippingSectionRecipe(options?: ClippingSectionRecipeOptions): SceneBlueprintInput;
|
|
17
|
+
export interface NeonLedRecipeOptions {
|
|
18
|
+
readonly id?: string;
|
|
19
|
+
readonly width?: number;
|
|
20
|
+
readonly height?: number;
|
|
21
|
+
readonly color?: Color3Value;
|
|
22
|
+
readonly intensity?: number;
|
|
23
|
+
readonly cellScale?: number;
|
|
24
|
+
readonly lineWidth?: number;
|
|
25
|
+
readonly pulseStrength?: number;
|
|
26
|
+
readonly pulseDurationMs?: number;
|
|
27
|
+
readonly glow?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare const NEON_LED_RECIPE_OPTIONS_RULE: FieldRule;
|
|
30
|
+
export declare function createNeonLedRecipe(options?: NeonLedRecipeOptions): SceneBlueprintInput;
|
|
31
|
+
export interface ProceduralEarthRecipeOptions {
|
|
32
|
+
readonly id?: string;
|
|
33
|
+
readonly radius?: number;
|
|
34
|
+
readonly seed?: number;
|
|
35
|
+
readonly textureSize?: number;
|
|
36
|
+
readonly cloudOpacity?: number;
|
|
37
|
+
}
|
|
38
|
+
export declare const PROCEDURAL_EARTH_RECIPE_OPTIONS_RULE: FieldRule;
|
|
39
|
+
export declare function createProceduralEarthRecipe(options?: ProceduralEarthRecipeOptions): SceneBlueprintInput;
|
|
40
|
+
export interface LavaSurfaceRecipeOptions {
|
|
41
|
+
readonly id?: string;
|
|
42
|
+
readonly radius?: number;
|
|
43
|
+
readonly scale?: number;
|
|
44
|
+
readonly emission?: number;
|
|
45
|
+
readonly seed?: number;
|
|
46
|
+
}
|
|
47
|
+
export declare const LAVA_SURFACE_RECIPE_OPTIONS_RULE: FieldRule;
|
|
48
|
+
export declare function createLavaSurfaceRecipe(options?: LavaSurfaceRecipeOptions): SceneBlueprintInput;
|
|
49
|
+
export interface GlassTransmissionRecipeOptions {
|
|
50
|
+
readonly id?: string;
|
|
51
|
+
readonly radius?: number;
|
|
52
|
+
readonly indexOfRefraction?: number;
|
|
53
|
+
readonly intensity?: number;
|
|
54
|
+
readonly dispersion?: number;
|
|
55
|
+
readonly blurRadius?: number;
|
|
56
|
+
}
|
|
57
|
+
export declare const GLASS_TRANSMISSION_RECIPE_OPTIONS_RULE: FieldRule;
|
|
58
|
+
export declare function createGlassTransmissionRecipe(options?: GlassTransmissionRecipeOptions): SceneBlueprintInput;
|
|
59
|
+
export declare function describeSkenoraExampleRecipes(): {
|
|
60
|
+
rules: string[];
|
|
61
|
+
id: string;
|
|
62
|
+
version: number;
|
|
63
|
+
purpose: string;
|
|
64
|
+
options: FieldRule;
|
|
65
|
+
}[];
|
|
66
|
+
//# sourceMappingURL=example-recipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-recipes.d.ts","sourceRoot":"","sources":["../../src/description/example-recipes.ts"],"names":[],"mappings":"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"}
|