pelican-engine 0.3.17 → 0.3.18

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.
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "format": "pelican.api-index",
3
3
  "version": 1,
4
- "engineVersion": "0.3.17",
4
+ "engineVersion": "0.3.18",
5
5
  "entry": "pelican-engine",
6
6
  "source": "packages/sdk/src/index.ts",
7
7
  "symbols": [
8
8
  {
9
9
  "name": "SDK_VERSION",
10
10
  "kind": "constant",
11
- "signature": "SDK_VERSION = \"0.3.17\"",
11
+ "signature": "SDK_VERSION = \"0.3.18\"",
12
12
  "line": 2
13
13
  },
14
14
  {
@@ -171,7 +171,7 @@
171
171
  {
172
172
  "name": "SystemContext",
173
173
  "kind": "InterfaceDeclaration",
174
- "signature": "export interface SystemContext extends EngineFacade {\n readonly time: {\n readonly tick: number;\n readonly elapsed: number;\n readonly fixedDt: number;\n };\n readonly entities: EntityCommands;\n random(): number;\n emit(type: string, payload: unknown): void;\n events(type?: string): readonly GameEvent[];\n readonly input: InputService;\n readonly physics: PhysicsService;\n readonly animation: AnimationService;\n readonly camera: CameraService;\n readonly ui: UIService;\n readonly audio: AudioService;\n readonly storage: StorageService;\n readonly scenes: SceneService;\n readonly render: RenderService;\n readonly compute: ComputeService;\n readonly navigation: NavigationService;\n readonly ropes: RopeService;\n}",
174
+ "signature": "export interface SystemContext extends EngineFacade {\n readonly time: {\n readonly tick: number;\n readonly elapsed: number;\n readonly fixedDt: number;\n };\n readonly entities: EntityCommands;\n random(): number;\n emit(type: string, payload: unknown): void;\n events(type?: string): readonly GameEvent[];\n readonly input: InputService;\n readonly physics: PhysicsService;\n readonly animation: AnimationService;\n readonly camera: CameraService;\n readonly ui: UIService;\n readonly audio: AudioService;\n readonly storage: StorageService;\n readonly scenes: SceneService;\n readonly render: RenderService;\n readonly compute: ComputeService;\n readonly navigation: NavigationService;\n readonly ropes: RopeService;\n readonly cloth: ClothService;\n}",
175
175
  "line": 98,
176
176
  "fields": [
177
177
  "time",
@@ -190,20 +190,21 @@
190
190
  "render",
191
191
  "compute",
192
192
  "navigation",
193
- "ropes"
193
+ "ropes",
194
+ "cloth"
194
195
  ]
195
196
  },
196
197
  {
197
198
  "name": "RopeCollider",
198
199
  "kind": "TypeAliasDeclaration",
199
200
  "signature": "export type RopeCollider =\n | { kind: \"sphere\"; id: string; center: Vec3; radius: number }\n | { kind: \"plane\"; id: string; normal: Vec3; offset: number };",
200
- "line": 123
201
+ "line": 124
201
202
  },
202
203
  {
203
204
  "name": "RopeBodyCollider",
204
205
  "kind": "InterfaceDeclaration",
205
206
  "signature": "export interface RopeBodyCollider { readonly id: string; readonly entity: string }",
206
- "line": 127,
207
+ "line": 128,
207
208
  "fields": [
208
209
  "id",
209
210
  "entity"
@@ -213,7 +214,7 @@
213
214
  "name": "RopeVisualOptions",
214
215
  "kind": "InterfaceDeclaration",
215
216
  "signature": "export interface RopeVisualOptions {\n material: string;\n radius?: number;\n radialSegments?: number;\n castShadow?: boolean;\n receiveShadow?: boolean;\n}",
216
- "line": 129,
217
+ "line": 130,
217
218
  "fields": [
218
219
  "material",
219
220
  "radius",
@@ -226,7 +227,7 @@
226
227
  "name": "RopeVisualState",
227
228
  "kind": "InterfaceDeclaration",
228
229
  "signature": "export interface RopeVisualState {\n id: string;\n material: string;\n radius: number;\n radialSegments: number;\n castShadow: boolean;\n receiveShadow: boolean;\n positions: Vec3[];\n}",
229
- "line": 137,
230
+ "line": 138,
230
231
  "fields": [
231
232
  "id",
232
233
  "material",
@@ -241,7 +242,7 @@
241
242
  "name": "RopeDefinition",
242
243
  "kind": "InterfaceDeclaration",
243
244
  "signature": "export interface RopeDefinition {\n id: string;\n points: readonly Vec3[];\n /** Kilograms per particle, positive and at most 1e6. */\n mass: number;\n radius?: number;\n /** Defaults to the host interval; an explicit value must exactly match it. */\n fixedDt?: number;\n /** When true, step once after each physics phase; defaults to false (manual stepping). */\n autoStep?: boolean;\n /** Automatically sample and react to existing dynamic, non-trigger sphere bodies. Requires autoStep. */\n bodyColliders?: readonly RopeBodyCollider[];\n /** Resolve sphere contacts on segment interiors; defaults to true for new ropes. */\n segmentCollisions?: boolean;\n /** Resolve discrete non-adjacent segment self contacts; defaults to true for new ropes. */\n selfCollisions?: boolean;\n /** Optional segmented presentation using an already-declared material id. */\n visual?: RopeVisualOptions;\n substeps?: number;\n iterations?: number;\n damping?: number;\n gravity?: Vec3;\n anchors?: readonly { index: number; position: Vec3 }[];\n}",
244
- "line": 146,
245
+ "line": 147,
245
246
  "fields": [
246
247
  "id",
247
248
  "points",
@@ -264,7 +265,7 @@
264
265
  "name": "RopeContact",
265
266
  "kind": "InterfaceDeclaration",
266
267
  "signature": "export interface RopeContact {\n tick: number; particle: number; colliderId: string; penetration: number;\n /** Opposite of particle contact impulses, N·s; absent in older snapshots. */\n reactionImpulse?: Vec3;\n /** Angular impulse about the world origin; absent in older snapshots. */\n reactionAngularImpulse?: Vec3;\n}",
267
- "line": 171,
268
+ "line": 172,
268
269
  "fields": [
269
270
  "tick",
270
271
  "particle",
@@ -278,7 +279,7 @@
278
279
  "name": "RopeSegmentContact",
279
280
  "kind": "InterfaceDeclaration",
280
281
  "signature": "export interface RopeSegmentContact {\n tick: number;\n /** Zero-based index of the first endpoint; the second is segment + 1. */\n segment: number;\n colliderId: string;\n /** Last closest-point fraction from the first endpoint toward the second. */\n fraction: number;\n penetration: number;\n reactionImpulse?: Vec3;\n reactionAngularImpulse?: Vec3;\n}",
281
- "line": 179,
282
+ "line": 180,
282
283
  "fields": [
283
284
  "tick",
284
285
  "segment",
@@ -293,7 +294,7 @@
293
294
  "name": "RopeSelfContact",
294
295
  "kind": "InterfaceDeclaration",
295
296
  "signature": "export interface RopeSelfContact {\n tick: number;\n /** Zero-based first endpoint of each non-adjacent segment, ordered ascending. */\n firstSegment: number; secondSegment: number;\n /** Last closest-point fractions along the respective segments. */\n firstFraction: number; secondFraction: number;\n /** Maximum observed overlap in metres during this tick. */\n penetration: number;\n}",
296
- "line": 191,
297
+ "line": 192,
297
298
  "fields": [
298
299
  "tick",
299
300
  "firstSegment",
@@ -307,7 +308,7 @@
307
308
  "name": "RopeState",
308
309
  "kind": "InterfaceDeclaration",
309
310
  "signature": "export interface RopeState {\n tick: number; simulatedSeconds: number; disposed: boolean;\n segmentCollisions: boolean;\n selfCollisions: boolean;\n positions: Vec3[]; velocities: Vec3[];\n anchors: { index: number; position: Vec3 }[];\n contacts: RopeContact[];\n segmentContacts: RopeSegmentContact[];\n selfContacts: RopeSelfContact[];\n maxDistanceError: number;\n resources: { particles: number; constraints: number; anchors: number; colliders: number };\n}",
310
- "line": 200,
311
+ "line": 201,
311
312
  "fields": [
312
313
  "tick",
313
314
  "simulatedSeconds",
@@ -328,7 +329,116 @@
328
329
  "name": "RopeService",
329
330
  "kind": "InterfaceDeclaration",
330
331
  "signature": "export interface RopeService {\n create(definition: RopeDefinition): void;\n /** Explicit ticks for manual ropes only. Auto-stepped ropes reject this call. A failed batch leaves the rope unchanged. */\n step(id: string, ticks?: number): RopeState;\n inspect(id: string): RopeState;\n /** Detached visual descriptions, sorted by rope id; empty when no visuals are requested. */\n visuals(): readonly RopeVisualState[];\n setColliders(id: string, colliders: readonly RopeCollider[]): void;\n setAnchor(id: string, index: number, position: Vec3): void;\n releaseAnchor(id: string, index: number): void;\n applyForce(id: string, index: number, force: Vec3): void;\n applyImpulse(id: string, index: number, impulse: Vec3): void;\n destroy(id: string): void;\n}",
331
- "line": 212,
332
+ "line": 213,
333
+ "fields": [
334
+ "create",
335
+ "step",
336
+ "inspect",
337
+ "visuals",
338
+ "setColliders",
339
+ "setAnchor",
340
+ "releaseAnchor",
341
+ "applyForce",
342
+ "applyImpulse",
343
+ "destroy"
344
+ ]
345
+ },
346
+ {
347
+ "name": "ClothCollider",
348
+ "kind": "TypeAliasDeclaration",
349
+ "signature": "export type ClothCollider = RopeCollider;",
350
+ "line": 228
351
+ },
352
+ {
353
+ "name": "ClothTriangle",
354
+ "kind": "TypeAliasDeclaration",
355
+ "signature": "export type ClothTriangle = readonly [number, number, number];",
356
+ "line": 229
357
+ },
358
+ {
359
+ "name": "ClothVisualOptions",
360
+ "kind": "InterfaceDeclaration",
361
+ "signature": "export interface ClothVisualOptions {\n material: string;\n /** Optional per-particle UV coordinates; defaults to a planar projection. */\n uvs?: readonly Vec2[];\n castShadow?: boolean;\n receiveShadow?: boolean;\n}",
362
+ "line": 230,
363
+ "fields": [
364
+ "material",
365
+ "uvs",
366
+ "castShadow",
367
+ "receiveShadow"
368
+ ]
369
+ },
370
+ {
371
+ "name": "ClothDefinition",
372
+ "kind": "InterfaceDeclaration",
373
+ "signature": "export interface ClothDefinition {\n id: string;\n points: readonly Vec3[];\n triangles: readonly ClothTriangle[];\n /** Kilograms per movable particle. */\n mass: number;\n radius?: number;\n fixedDt?: number;\n autoStep?: boolean;\n substeps?: number;\n iterations?: number;\n damping?: number;\n gravity?: Vec3;\n /** Distance-based bending approximation across shared triangle edges; defaults to true. */\n bending?: boolean;\n anchors?: readonly { index: number; position: Vec3 }[];\n visual?: ClothVisualOptions;\n}",
374
+ "line": 237,
375
+ "fields": [
376
+ "id",
377
+ "points",
378
+ "triangles",
379
+ "mass",
380
+ "radius",
381
+ "fixedDt",
382
+ "autoStep",
383
+ "substeps",
384
+ "iterations",
385
+ "damping",
386
+ "gravity",
387
+ "bending",
388
+ "anchors",
389
+ "visual"
390
+ ]
391
+ },
392
+ {
393
+ "name": "ClothContact",
394
+ "kind": "InterfaceDeclaration",
395
+ "signature": "export interface ClothContact { tick: number; particle: number; colliderId: string; penetration: number }",
396
+ "line": 255,
397
+ "fields": [
398
+ "tick",
399
+ "particle",
400
+ "colliderId",
401
+ "penetration"
402
+ ]
403
+ },
404
+ {
405
+ "name": "ClothState",
406
+ "kind": "InterfaceDeclaration",
407
+ "signature": "export interface ClothState {\n tick: number; simulatedSeconds: number; disposed: boolean;\n positions: Vec3[]; velocities: Vec3[]; triangles: ClothTriangle[];\n anchors: { index: number; position: Vec3 }[];\n contacts: ClothContact[];\n maxDistanceError: number;\n resources: { particles: number; triangles: number; constraints: number; anchors: number; colliders: number };\n}",
408
+ "line": 256,
409
+ "fields": [
410
+ "tick",
411
+ "simulatedSeconds",
412
+ "disposed",
413
+ "positions",
414
+ "velocities",
415
+ "triangles",
416
+ "anchors",
417
+ "contacts",
418
+ "maxDistanceError",
419
+ "resources"
420
+ ]
421
+ },
422
+ {
423
+ "name": "ClothVisualState",
424
+ "kind": "InterfaceDeclaration",
425
+ "signature": "export interface ClothVisualState {\n id: string; material: string; positions: Vec3[]; triangles: ClothTriangle[];\n uvs: Vec2[]; castShadow: boolean; receiveShadow: boolean;\n}",
426
+ "line": 264,
427
+ "fields": [
428
+ "id",
429
+ "material",
430
+ "positions",
431
+ "triangles",
432
+ "uvs",
433
+ "castShadow",
434
+ "receiveShadow"
435
+ ]
436
+ },
437
+ {
438
+ "name": "ClothService",
439
+ "kind": "InterfaceDeclaration",
440
+ "signature": "export interface ClothService {\n create(definition: ClothDefinition): void;\n /** Explicit ticks for manual cloth only; automatic cloth rejects this call. */\n step(id: string, ticks?: number): ClothState;\n inspect(id: string): ClothState;\n visuals(): readonly ClothVisualState[];\n setColliders(id: string, colliders: readonly ClothCollider[]): void;\n setAnchor(id: string, index: number, position: Vec3): void;\n releaseAnchor(id: string, index: number): void;\n applyForce(id: string, index: number, force: Vec3): void;\n applyImpulse(id: string, index: number, impulse: Vec3): void;\n destroy(id: string): void;\n}",
441
+ "line": 268,
332
442
  "fields": [
333
443
  "create",
334
444
  "step",
@@ -346,7 +456,7 @@
346
456
  "name": "NavigationCell",
347
457
  "kind": "InterfaceDeclaration",
348
458
  "signature": "export interface NavigationCell { readonly x: number; readonly y: number }",
349
- "line": 229,
459
+ "line": 284,
350
460
  "fields": [
351
461
  "x",
352
462
  "y"
@@ -356,7 +466,7 @@
356
466
  "name": "NavigationObstacleUpdate",
357
467
  "kind": "InterfaceDeclaration",
358
468
  "signature": "export interface NavigationObstacleUpdate { readonly cell: NavigationCell; readonly blocked: boolean }",
359
- "line": 231,
469
+ "line": 286,
360
470
  "fields": [
361
471
  "cell",
362
472
  "blocked"
@@ -366,7 +476,7 @@
366
476
  "name": "NavigationGrid",
367
477
  "kind": "InterfaceDeclaration",
368
478
  "signature": "export interface NavigationGrid {\n readonly id: string;\n readonly owner: string;\n readonly width: number;\n readonly height: number;\n readonly blocked?: readonly NavigationCell[];\n /** Maximum distinct search cells, including endpoints; defaults to 65536. Raising it increases memory and CPU use. */\n readonly searchCellBudget?: number;\n}",
369
- "line": 232,
479
+ "line": 287,
370
480
  "fields": [
371
481
  "id",
372
482
  "owner",
@@ -380,7 +490,7 @@
380
490
  "name": "NavigationService",
381
491
  "kind": "InterfaceDeclaration",
382
492
  "signature": "export interface NavigationService {\n createGrid(grid: NavigationGrid): void;\n /** Returns a detached description, including the current blocked cells. */\n getGrid(id: string): NavigationGrid;\n isBlocked(id: string, cell: NavigationCell): boolean;\n setBlocked(id: string, cell: NavigationCell, blocked: boolean): void;\n /** Validates the entire batch before committing; the last change for a repeated cell wins. */\n setBlockedBatch(id: string, updates: readonly NavigationObstacleUpdate[]): void;\n findPath(id: string, start: NavigationCell, end: NavigationCell): readonly NavigationCell[];\n destroyGrid(id: string): void;\n destroyOwner(owner: string): void;\n}",
383
- "line": 241,
493
+ "line": 296,
384
494
  "fields": [
385
495
  "createGrid",
386
496
  "getGrid",
@@ -396,13 +506,13 @@
396
506
  "name": "RenderMode",
397
507
  "kind": "TypeAliasDeclaration",
398
508
  "signature": "export type RenderMode = \"raster\" | \"hybrid\" | \"path\";",
399
- "line": 253
509
+ "line": 308
400
510
  },
401
511
  {
402
512
  "name": "RenderCapabilities",
403
513
  "kind": "InterfaceDeclaration",
404
514
  "signature": "export interface RenderCapabilities {\n backend: \"webgpu\" | \"webgl2\" | \"uninitialized\";\n compute: boolean;\n availableModes: readonly RenderMode[];\n}",
405
- "line": 254,
515
+ "line": 309,
406
516
  "fields": [
407
517
  "backend",
408
518
  "compute",
@@ -413,7 +523,7 @@
413
523
  "name": "RenderSettings",
414
524
  "kind": "InterfaceDeclaration",
415
525
  "signature": "export interface RenderSettings {\n mode: RenderMode;\n samplesPerFrame: number;\n maxBounces: number;\n denoise: boolean;\n denoiseIterations: number;\n exposure: number;\n directLighting: boolean;\n indirectLighting: boolean;\n debug: \"beauty\" | \"albedo\" | \"normal\" | \"depth\" | \"samples\";\n}",
416
- "line": 259,
526
+ "line": 314,
417
527
  "fields": [
418
528
  "mode",
419
529
  "samplesPerFrame",
@@ -430,7 +540,7 @@
430
540
  "name": "RenderService",
431
541
  "kind": "InterfaceDeclaration",
432
542
  "signature": "export interface RenderService {\n configure(settings: Partial<RenderSettings>): void;\n state(): Readonly<RenderSettings>;\n capabilities(): Readonly<RenderCapabilities>;\n setMaterialParameter(material: string, name: string, value: GraphValue): void;\n materialParameters(material: string): Readonly<Record<string, GraphValue>>;\n readonly effects: PostProcessService;\n readonly buffers: RenderBufferBindings;\n readonly textures: RenderTextureBindings;\n}",
433
- "line": 270,
543
+ "line": 325,
434
544
  "fields": [
435
545
  "configure",
436
546
  "state",
@@ -446,7 +556,7 @@
446
556
  "name": "MaterialBufferInput",
447
557
  "kind": "InterfaceDeclaration",
448
558
  "signature": "export interface MaterialBufferInput {\n /** Shared slot declaration for material and postprocess graphs. */\n name: string;\n type: GraphType;\n /** Optional initial logical compute-buffer ID. */\n buffer?: string;\n /** Optional exact element count required by this slot. */\n count?: number;\n}",
449
- "line": 280,
559
+ "line": 335,
450
560
  "fields": [
451
561
  "name",
452
562
  "type",
@@ -458,7 +568,7 @@
458
568
  "name": "RenderBufferReference",
459
569
  "kind": "InterfaceDeclaration",
460
570
  "signature": "export interface RenderBufferReference {\n id: string;\n type: GraphType;\n count: number;\n}",
461
- "line": 289,
571
+ "line": 344,
462
572
  "fields": [
463
573
  "id",
464
574
  "type",
@@ -469,7 +579,7 @@
469
579
  "name": "RenderBufferBindings",
470
580
  "kind": "InterfaceDeclaration",
471
581
  "signature": "export interface RenderBufferBindings {\n bind(target: string, name: string, buffer: ComputeBufferHandle): void;\n unbind(target: string, name: string): void;\n state(target: string): Readonly<Record<string, RenderBufferReference>>;\n}",
472
- "line": 294,
582
+ "line": 349,
473
583
  "fields": [
474
584
  "bind",
475
585
  "unbind",
@@ -480,7 +590,7 @@
480
590
  "name": "MaterialTextureInput",
481
591
  "kind": "InterfaceDeclaration",
482
592
  "signature": "export interface MaterialTextureInput extends ComputeTextureBinding {\n /** Initial managed texture ID; asset import uses computeTextures/createTexture. */\n texture?: string;\n width?: number;\n height?: number;\n}",
483
- "line": 299,
593
+ "line": 354,
484
594
  "fields": [
485
595
  "texture",
486
596
  "width",
@@ -491,7 +601,7 @@
491
601
  "name": "RenderTextureReference",
492
602
  "kind": "InterfaceDeclaration",
493
603
  "signature": "export interface RenderTextureReference extends ComputeTextureSize {\n id: string;\n format: \"rgba32float\";\n}",
494
- "line": 305,
604
+ "line": 360,
495
605
  "fields": [
496
606
  "id",
497
607
  "format"
@@ -501,7 +611,7 @@
501
611
  "name": "RenderTextureBindings",
502
612
  "kind": "InterfaceDeclaration",
503
613
  "signature": "export interface RenderTextureBindings {\n bind(target: string, name: string, texture: ComputeTextureHandle): void;\n unbind(target: string, name: string): void;\n state(target: string): Readonly<Record<string, RenderTextureReference>>;\n}",
504
- "line": 309,
614
+ "line": 364,
505
615
  "fields": [
506
616
  "bind",
507
617
  "unbind",
@@ -512,7 +622,7 @@
512
622
  "name": "PostProcessState",
513
623
  "kind": "InterfaceDeclaration",
514
624
  "signature": "export interface PostProcessState {\n id: string;\n enabled: boolean;\n parameters: Readonly<Record<string, GraphValue>>;\n}",
515
- "line": 314,
625
+ "line": 369,
516
626
  "fields": [
517
627
  "id",
518
628
  "enabled",
@@ -523,7 +633,7 @@
523
633
  "name": "PostProcessService",
524
634
  "kind": "InterfaceDeclaration",
525
635
  "signature": "export interface PostProcessService {\n /** Compute-buffer slots declared by definePostProcess, addressed by pass ID. */\n readonly buffers: RenderBufferBindings;\n readonly textures: RenderTextureBindings;\n configure(id: string, settings: { enabled: boolean }): void;\n state(id: string): Readonly<PostProcessState>;\n setParameter(id: string, name: string, value: GraphValue): void;\n /** Clears temporal effect images; it does not modify game or trace accumulation state. */\n resetHistory(id?: string): void;\n}",
526
- "line": 319,
636
+ "line": 374,
527
637
  "fields": [
528
638
  "buffers",
529
639
  "textures",
@@ -537,7 +647,7 @@
537
647
  "name": "ComputeBufferHandle",
538
648
  "kind": "InterfaceDeclaration",
539
649
  "signature": "export interface ComputeBufferHandle {\n readonly owner: number;\n readonly index: number;\n readonly generation: number;\n}",
540
- "line": 329,
650
+ "line": 384,
541
651
  "fields": [
542
652
  "owner",
543
653
  "index",
@@ -548,7 +658,7 @@
548
658
  "name": "ComputeTaskHandle",
549
659
  "kind": "InterfaceDeclaration",
550
660
  "signature": "export interface ComputeTaskHandle {\n readonly owner: number;\n readonly id: number;\n}",
551
- "line": 334,
661
+ "line": 389,
552
662
  "fields": [
553
663
  "owner",
554
664
  "id"
@@ -558,7 +668,7 @@
558
668
  "name": "ComputeBufferInput",
559
669
  "kind": "InterfaceDeclaration",
560
670
  "signature": "export interface ComputeBufferInput {\n id: string;\n type: GraphType;\n count: number;\n data?: readonly GraphValue[];\n}",
561
- "line": 338,
671
+ "line": 393,
562
672
  "fields": [
563
673
  "id",
564
674
  "type",
@@ -570,7 +680,7 @@
570
680
  "name": "ComputeTextureHandle",
571
681
  "kind": "InterfaceDeclaration",
572
682
  "signature": "export interface ComputeTextureHandle {\n readonly owner: number;\n readonly index: number;\n readonly generation: number;\n readonly kind: \"texture\";\n}",
573
- "line": 344,
683
+ "line": 399,
574
684
  "fields": [
575
685
  "owner",
576
686
  "index",
@@ -582,7 +692,7 @@
582
692
  "name": "ComputeTextureSize",
583
693
  "kind": "InterfaceDeclaration",
584
694
  "signature": "export interface ComputeTextureSize {\n width: number;\n height: number;\n}",
585
- "line": 350,
695
+ "line": 405,
586
696
  "fields": [
587
697
  "width",
588
698
  "height"
@@ -592,7 +702,7 @@
592
702
  "name": "ComputeTextureDataInput",
593
703
  "kind": "InterfaceDeclaration",
594
704
  "signature": "export interface ComputeTextureDataInput extends ComputeTextureSize {\n id: string;\n /** Linear rgba32float texels in row-major order, without color-space conversion. */\n data?: readonly Vec4[];\n asset?: never;\n}",
595
- "line": 354,
705
+ "line": 409,
596
706
  "fields": [
597
707
  "id",
598
708
  "data",
@@ -603,7 +713,7 @@
603
713
  "name": "ComputeTextureAssetInput",
604
714
  "kind": "InterfaceDeclaration",
605
715
  "signature": "export interface ComputeTextureAssetInput {\n id: string;\n asset: AssetDefinition | string;\n width?: never;\n height?: never;\n data?: never;\n}",
606
- "line": 360,
716
+ "line": 415,
607
717
  "fields": [
608
718
  "id",
609
719
  "asset",
@@ -616,13 +726,13 @@
616
726
  "name": "ComputeTextureInput",
617
727
  "kind": "TypeAliasDeclaration",
618
728
  "signature": "export type ComputeTextureInput = ComputeTextureDataInput | ComputeTextureAssetInput;",
619
- "line": 367
729
+ "line": 422
620
730
  },
621
731
  {
622
732
  "name": "ComputeTextureBinding",
623
733
  "kind": "InterfaceDeclaration",
624
734
  "signature": "export interface ComputeTextureBinding {\n name: string;\n filter?: \"nearest\" | \"linear\";\n wrapU?: \"clamp\" | \"repeat\" | \"mirror\";\n wrapV?: \"clamp\" | \"repeat\" | \"mirror\";\n}",
625
- "line": 368,
735
+ "line": 423,
626
736
  "fields": [
627
737
  "name",
628
738
  "filter",
@@ -634,7 +744,7 @@
634
744
  "name": "ComputeDispatchInput",
635
745
  "kind": "InterfaceDeclaration",
636
746
  "signature": "export interface ComputeDispatchInput {\n output: ComputeBufferHandle | ComputeTextureHandle;\n /** Handles capture dispatch-time data; task bindings consume that exact successful output revision. */\n bindings?: Readonly<Record<string, ComputeBufferHandle | { task: ComputeTaskHandle }>>;\n /** Named sampled rgba32float textures; task bindings capture that exact texture result. */\n textures?: Readonly<Record<string, ComputeTextureHandle | { task: ComputeTaskHandle }>>;\n /** Ordering only. It never silently refreshes ordinary handle bindings. */\n after?: readonly ComputeTaskHandle[];\n parameters?: Readonly<Record<string, GraphValue>>;\n /** Fixed simulation time by default, not wall-clock time. */\n time?: number;\n}",
637
- "line": 374,
747
+ "line": 429,
638
748
  "fields": [
639
749
  "output",
640
750
  "bindings",
@@ -648,7 +758,7 @@
648
758
  "name": "ComputeTaskState",
649
759
  "kind": "InterfaceDeclaration",
650
760
  "signature": "export interface ComputeTaskState {\n status: \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\";\n error?: { code: string; message: string; remediation: string };\n}",
651
- "line": 386,
761
+ "line": 441,
652
762
  "fields": [
653
763
  "status",
654
764
  "error"
@@ -658,7 +768,7 @@
658
768
  "name": "ComputeService",
659
769
  "kind": "InterfaceDeclaration",
660
770
  "signature": "export interface ComputeService {\n createTexture(input: ComputeTextureInput): ComputeTextureHandle;\n resolveTexture(id: string): ComputeTextureHandle;\n describeTexture(texture: ComputeTextureHandle): Readonly<ComputeTextureSize & { id: string; format: \"rgba32float\"; revision: number }>;\n readTexture(texture: ComputeTextureHandle): readonly Vec4[];\n writeTexture(texture: ComputeTextureHandle, data: readonly Vec4[], region?: ComputeTextureSize & { x: number; y: number }): void;\n releaseTexture(texture: ComputeTextureHandle): void;\n createBuffer(input: ComputeBufferInput): ComputeBufferHandle;\n resolve(id: string): ComputeBufferHandle;\n describeBuffer(buffer: ComputeBufferHandle): Readonly<{ id: string; type: GraphType; count: number; revision: number }>;\n /** Last committed GPU result; detached CPU data, never a GPU object. */\n readBuffer(buffer: ComputeBufferHandle): readonly GraphValue[];\n writeBuffer(buffer: ComputeBufferHandle, values: readonly GraphValue[], offset?: number): void;\n releaseBuffer(buffer: ComputeBufferHandle): void;\n dispatch(kernel: ComputeDefinition | string, input: ComputeDispatchInput): ComputeTaskHandle;\n task(task: ComputeTaskHandle): Readonly<ComputeTaskState>;\n tasks(): readonly { handle: ComputeTaskHandle; state: ComputeTaskState }[];\n cancel(task: ComputeTaskHandle): void;\n releaseTask(task: ComputeTaskHandle): void;\n}",
661
- "line": 390,
771
+ "line": 445,
662
772
  "fields": [
663
773
  "createTexture",
664
774
  "resolveTexture",
@@ -683,7 +793,7 @@
683
793
  "name": "InputService",
684
794
  "kind": "InterfaceDeclaration",
685
795
  "signature": "export interface InputService {\n held(action: string): boolean;\n pressed(action: string): boolean;\n released(action: string): boolean;\n axis(negative: string, positive: string): number;\n}",
686
- "line": 410,
796
+ "line": 465,
687
797
  "fields": [
688
798
  "held",
689
799
  "pressed",
@@ -695,7 +805,7 @@
695
805
  "name": "PhysicsService",
696
806
  "kind": "InterfaceDeclaration",
697
807
  "signature": "export interface PhysicsService {\n moveCharacter(entity: string, displacement: Vec3): void;\n grounded(entity: string): boolean;\n velocity(entity: string): Vec3;\n /** World-space rigid-body center of mass, including collider offsets. */\n centerOfMass(entity: string): Vec3;\n setVelocity(entity: string, velocity: Vec3): void;\n impulse(entity: string, impulse: Vec3): void;\n /** Angular velocity in world-space radians per second. */\n angularVelocity(entity: string): Vec3;\n setAngularVelocity(entity: string, velocity: Vec3): void;\n /** Instantaneous world-space angular impulse, in angular-momentum units. */\n torqueImpulse(entity: string, impulse: Vec3): void;\n /** Apply world-space impulse at a world-space point, changing linear and angular motion. */\n impulseAtPoint(entity: string, impulse: Vec3, point: Vec3): void;\n raycast(\n origin: Vec3,\n direction: Vec3,\n maxDistance: number,\n options?: { exclude?: readonly string[]; includeTriggers?: boolean },\n ): { entity: string; distance: number; point: Vec3; normal: Vec3 } | null;\n}",
698
- "line": 416,
808
+ "line": 471,
699
809
  "fields": [
700
810
  "moveCharacter",
701
811
  "grounded",
@@ -714,7 +824,7 @@
714
824
  "name": "AnimationService",
715
825
  "kind": "InterfaceDeclaration",
716
826
  "signature": "export interface AnimationService {\n play(\n entity: string,\n clip: string,\n options?: { fade?: number; speed?: number; loop?: boolean },\n ): void;\n state(entity: string): {\n clip: string | null;\n time: number;\n playing: boolean;\n };\n}",
717
- "line": 438,
827
+ "line": 493,
718
828
  "fields": [
719
829
  "play",
720
830
  "state"
@@ -724,7 +834,7 @@
724
834
  "name": "CameraService",
725
835
  "kind": "InterfaceDeclaration",
726
836
  "signature": "export interface CameraService {\n follow(\n entity: string,\n options?: {\n distance?: number;\n height?: number;\n lookHeight?: number;\n yaw?: number;\n smoothing?: number;\n },\n ): void;\n orbit(yaw: number): void;\n}",
727
- "line": 450,
837
+ "line": 505,
728
838
  "fields": [
729
839
  "follow",
730
840
  "orbit"
@@ -734,7 +844,7 @@
734
844
  "name": "UIService",
735
845
  "kind": "InterfaceDeclaration",
736
846
  "signature": "export interface UIService {\n setText(id: string, text: string): void;\n setProgress(id: string, value: number): void;\n setVisible(id: string, visible: boolean): void;\n}",
737
- "line": 463,
847
+ "line": 518,
738
848
  "fields": [
739
849
  "setText",
740
850
  "setProgress",
@@ -745,7 +855,7 @@
745
855
  "name": "AudioService",
746
856
  "kind": "InterfaceDeclaration",
747
857
  "signature": "export interface AudioService {\n play(\n id: string,\n options?: { volume?: number; loop?: boolean; entity?: string; bus?: string; priority?: number },\n ): string;\n stop(voice: string): void;\n /** Pause/resume are idempotent; an unknown valid voice id is a no-op. Playback time follows fixed simulation ticks, even while audio is locked. */\n pause(voice: string): void;\n resume(voice: string): void;\n volume(value: number): void;\n /** Set a declared bus gain, independently of master and voice gain. */\n busVolume(id: string, value: number): void;\n /** Fade a declared bus over fixed-tick seconds; busVolume or another fade replaces it. */\n fadeBus(id: string, target: number, duration: number): void;\n}",
748
- "line": 468,
858
+ "line": 523,
749
859
  "fields": [
750
860
  "play",
751
861
  "stop",
@@ -760,7 +870,7 @@
760
870
  "name": "StorageService",
761
871
  "kind": "InterfaceDeclaration",
762
872
  "signature": "export interface StorageService {\n save(slot: string): void;\n load(slot: string): void;\n status(): {\n state: \"idle\" | \"saving\" | \"loading\" | \"saved\" | \"loaded\" | \"failed\";\n slot: string | null;\n error: string | null;\n };\n}",
763
- "line": 483,
873
+ "line": 538,
764
874
  "fields": [
765
875
  "save",
766
876
  "load",
@@ -771,7 +881,7 @@
771
881
  "name": "SceneService",
772
882
  "kind": "InterfaceDeclaration",
773
883
  "signature": "export interface SceneService {\n current(): string;\n load(id: string): void;\n}",
774
- "line": 492,
884
+ "line": 547,
775
885
  "fields": [
776
886
  "current",
777
887
  "load"
@@ -781,7 +891,7 @@
781
891
  "name": "ModelDefinition",
782
892
  "kind": "InterfaceDeclaration",
783
893
  "signature": "export interface ModelDefinition {\n /** Optional whole-model material override; omitted keeps the asset's original materials. */\n material?: MaterialDefinition | string;\n /** Replace all asset material slots with the given exact material name. Mutually exclusive with material. */\n materialSlots?: Record<string, MaterialDefinition | string>;\n castShadow?: boolean;\n receiveShadow?: boolean;\n asset: AssetDefinition | string;\n scale?: number;\n offset?: Vec3;\n rotation?: Vec3;\n animation?: { clip: string; speed?: number; loop?: boolean };\n}",
784
- "line": 496,
894
+ "line": 551,
785
895
  "fields": [
786
896
  "material",
787
897
  "materialSlots",
@@ -798,7 +908,7 @@
798
908
  "name": "RigidBodyDefinition",
799
909
  "kind": "InterfaceDeclaration",
800
910
  "signature": "export interface RigidBodyDefinition {\n type: \"fixed\" | \"dynamic\" | \"kinematic\";\n collider: {\n shape: \"box\" | \"sphere\" | \"capsule\";\n size?: Vec3;\n radius?: number;\n halfHeight?: number;\n offset?: Vec3;\n };\n mass?: number;\n friction?: number;\n restitution?: number;\n trigger?: boolean;\n}",
801
- "line": 509,
911
+ "line": 564,
802
912
  "fields": [
803
913
  "type",
804
914
  "collider",
@@ -812,7 +922,7 @@
812
922
  "name": "CharacterDefinition",
813
923
  "kind": "InterfaceDeclaration",
814
924
  "signature": "export interface CharacterDefinition {\n radius: number;\n height: number;\n speed: number;\n jumpSpeed?: number;\n /** Downward acceleration magnitude in world units/s^2; defaults to 9.81. Scene.gravity is a signed vector. */\n gravity?: number;\n}",
815
- "line": 523,
925
+ "line": 578,
816
926
  "fields": [
817
927
  "radius",
818
928
  "height",
@@ -825,7 +935,7 @@
825
935
  "name": "UIElementDefinition",
826
936
  "kind": "InterfaceDeclaration",
827
937
  "signature": "export interface UIElementDefinition {\n id: string;\n kind: \"text\" | \"bar\" | \"button\" | \"input\";\n text?: string;\n value?: number;\n visible?: boolean;\n anchor?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"center\";\n x?: number;\n y?: number;\n width?: number;\n color?: string;\n world?: { entity: string; offset?: Vec3; occlude?: boolean };\n}",
828
- "line": 531,
938
+ "line": 586,
829
939
  "fields": [
830
940
  "id",
831
941
  "kind",
@@ -844,7 +954,7 @@
844
954
  "name": "SoundDefinition",
845
955
  "kind": "InterfaceDeclaration",
846
956
  "signature": "export interface SoundDefinition {\n id: string;\n asset: AssetDefinition | string;\n volume?: number;\n loop?: boolean;\n bus?: string;\n}",
847
- "line": 544,
957
+ "line": 599,
848
958
  "fields": [
849
959
  "id",
850
960
  "asset",
@@ -857,7 +967,7 @@
857
967
  "name": "AudioBusDefinition",
858
968
  "kind": "InterfaceDeclaration",
859
969
  "signature": "export interface AudioBusDefinition {\n id: string;\n volume?: number;\n}",
860
- "line": 551,
970
+ "line": 606,
861
971
  "fields": [
862
972
  "id",
863
973
  "volume"
@@ -867,43 +977,43 @@
867
977
  "name": "SYSTEM_PHASES",
868
978
  "kind": "constant",
869
979
  "signature": "SYSTEM_PHASES = [\n \"input\",\n \"prePhysics\",\n \"physics\",\n \"postPhysics\",\n \"update\",\n \"presentation\",\n] as const",
870
- "line": 555
980
+ "line": 610
871
981
  },
872
982
  {
873
983
  "name": "SystemPhase",
874
984
  "kind": "TypeAliasDeclaration",
875
985
  "signature": "export type SystemPhase = (typeof SYSTEM_PHASES)[number];",
876
- "line": 563
986
+ "line": 618
877
987
  },
878
988
  {
879
989
  "name": "Geometry",
880
990
  "kind": "TypeAliasDeclaration",
881
991
  "signature": "export type Geometry =\n | { kind: \"box\"; size?: Vec3 }\n | { kind: \"sphere\"; radius?: number; segments?: number }\n | { kind: \"plane\"; size?: readonly [number, number] };",
882
- "line": 564
992
+ "line": 619
883
993
  },
884
994
  {
885
995
  "name": "GRAPH_TYPES",
886
996
  "kind": "constant",
887
997
  "signature": "GRAPH_TYPES = [\"float\", \"vec2\", \"vec3\", \"vec4\", \"bool\"] as const",
888
- "line": 568
998
+ "line": 623
889
999
  },
890
1000
  {
891
1001
  "name": "GraphType",
892
1002
  "kind": "TypeAliasDeclaration",
893
1003
  "signature": "export type GraphType = typeof GRAPH_TYPES[number];",
894
- "line": 569
1004
+ "line": 624
895
1005
  },
896
1006
  {
897
1007
  "name": "GraphValue",
898
1008
  "kind": "TypeAliasDeclaration",
899
1009
  "signature": "export type GraphValue = number | boolean | Vec2 | Vec3 | Vec4;",
900
- "line": 570
1010
+ "line": 625
901
1011
  },
902
1012
  {
903
1013
  "name": "GraphParameter",
904
1014
  "kind": "InterfaceDeclaration",
905
1015
  "signature": "export interface GraphParameter {\n name: string;\n type: GraphType;\n default: GraphValue;\n}",
906
- "line": 571,
1016
+ "line": 626,
907
1017
  "fields": [
908
1018
  "name",
909
1019
  "type",
@@ -914,31 +1024,31 @@
914
1024
  "name": "GRAPH_INPUT_TYPES",
915
1025
  "kind": "constant",
916
1026
  "signature": "GRAPH_INPUT_TYPES = {\n uv: \"vec2\", uv1: \"vec2\", positionWorld: \"vec3\", normalWorld: \"vec3\",\n viewDirectionWorld: \"vec3\", vertexColor: \"vec4\", index: \"float\",\n screenSize: \"vec2\", texelSize: \"vec2\",\n pixelCoord: \"vec2\", outputSize: \"vec2\",\n positionLocal: \"vec3\", normalLocal: \"vec3\", vertexIndex: \"float\", instanceIndex: \"float\",\n} as const",
917
- "line": 576
1027
+ "line": 631
918
1028
  },
919
1029
  {
920
1030
  "name": "GraphInputName",
921
1031
  "kind": "TypeAliasDeclaration",
922
1032
  "signature": "export type GraphInputName = keyof typeof GRAPH_INPUT_TYPES;",
923
- "line": 583
1033
+ "line": 638
924
1034
  },
925
1035
  {
926
1036
  "name": "GRAPH_OPERATIONS",
927
1037
  "kind": "constant",
928
1038
  "signature": "GRAPH_OPERATIONS = {\n unary: [\"sin\", \"cos\", \"abs\", \"floor\", \"ceil\", \"fract\", \"negate\", \"saturate\", \"normalize\", \"length\", \"safeSqrt\"] as const,\n binary: [\"add\", \"subtract\", \"multiply\", \"safeDivide\", \"min\", \"max\", \"dot\", \"cross\", \"step\", \"lessThan\", \"lessEqual\", \"greaterThan\", \"greaterEqual\", \"equal\", \"and\", \"or\"] as const,\n ternary: [\"mix\", \"clamp\", \"smoothstep\", \"select\"] as const,\n} as const",
929
- "line": 584
1039
+ "line": 639
930
1040
  },
931
1041
  {
932
1042
  "name": "GraphNode",
933
1043
  "kind": "TypeAliasDeclaration",
934
1044
  "signature": "export type GraphNode =\n | { id: string; op: \"float\"; value: number }\n | { id: string; op: \"bool\"; value: boolean }\n | { id: string; op: \"vec2\"; value: Vec2 }\n | { id: string; op: \"vec3\"; value: Vec3 }\n | { id: string; op: \"vec4\"; value: Vec4 }\n | { id: string; op: \"time\" }\n | { id: string; op: \"input\"; name: GraphInputName }\n | { id: string; op: \"parameter\"; name: string }\n | { id: string; op: typeof GRAPH_OPERATIONS.unary[number] | \"not\"; inputs: readonly [string] }\n | { id: string; op: typeof GRAPH_OPERATIONS.binary[number]; inputs: readonly [string, string] }\n | { id: string; op: typeof GRAPH_OPERATIONS.ternary[number]; inputs: readonly [string, string, string] }\n | { id: string; op: \"compose2\"; inputs: readonly [string, string] }\n | { id: string; op: \"compose3\"; inputs: readonly [string, string, string] }\n | { id: string; op: \"compose4\"; inputs: readonly [string, string, string, string] }\n | { id: string; op: \"swizzle\"; inputs: readonly [string]; components: string }\n | { id: string; op: \"sampleTexture\"; inputs: readonly [string]; texture: AssetDefinition | string }\n | { id: string; op: \"readBuffer\"; inputs: readonly [string]; buffer: string }\n | { id: string; op: \"sampleFrame\"; inputs: readonly [string]; channel: string }\n | { id: string; op: \"sampleHistory\"; inputs: readonly [string]; channel: string };",
935
- "line": 589
1045
+ "line": 644
936
1046
  },
937
1047
  {
938
1048
  "name": "Graph",
939
1049
  "kind": "InterfaceDeclaration",
940
1050
  "signature": "export interface Graph {\n nodes: readonly GraphNode[];\n output: string;\n parameters?: readonly GraphParameter[];\n}",
941
- "line": 609,
1051
+ "line": 664,
942
1052
  "fields": [
943
1053
  "nodes",
944
1054
  "output",
@@ -949,7 +1059,7 @@
949
1059
  "name": "MaterialGraphs",
950
1060
  "kind": "InterfaceDeclaration",
951
1061
  "signature": "export interface MaterialGraphs {\n baseColor?: Graph;\n emissive?: Graph;\n roughness?: Graph;\n metalness?: Graph;\n opacity?: Graph;\n /** Absolute, unsided world-space normal; engine applies material boundary orientation. */\n normalWorld?: Graph;\n}",
952
- "line": 614,
1062
+ "line": 669,
953
1063
  "fields": [
954
1064
  "baseColor",
955
1065
  "emissive",
@@ -963,7 +1073,7 @@
963
1073
  "name": "VertexGraphs",
964
1074
  "kind": "InterfaceDeclaration",
965
1075
  "signature": "export interface VertexGraphs {\n /** Absolute object-local position after built-in morph, skin and instance transforms. */\n position?: Graph;\n /** Unsided object-local normal in the same domain; zero keeps the normalized input normal. */\n normal?: Graph;\n}",
966
- "line": 623,
1076
+ "line": 678,
967
1077
  "fields": [
968
1078
  "position",
969
1079
  "normal"
@@ -973,7 +1083,7 @@
973
1083
  "name": "MaterialInput",
974
1084
  "kind": "InterfaceDeclaration",
975
1085
  "signature": "export interface MaterialInput {\n id: string;\n color?: string;\n roughness?: number;\n metalness?: number;\n texture?: AssetDefinition | string;\n graph?: Graph;\n graphs?: MaterialGraphs;\n vertex?: VertexGraphs;\n buffers?: readonly MaterialBufferInput[];\n textures?: readonly MaterialTextureInput[];\n emissive?: string;\n emissiveIntensity?: number;\n opacity?: number;\n alphaTest?: number;\n side?: \"front\" | \"back\" | \"double\";\n /** Closed-volume dielectric fraction; opacity remains independent stochastic coverage. */\n transmission?: number;\n ior?: number;\n /** Nontransmissive dielectric specular strength in [0,1]. Defaults to 1. */\n specularIntensity?: number;\n /** Nontransmissive dielectric specular color, a hex or named sRGB color. Defaults to white. */\n specularColor?: string;\n attenuationColor?: string;\n /** World-space distance for Beer absorption; omitted means no absorption. */\n attenuationDistance?: number;\n}",
976
- "line": 629,
1086
+ "line": 684,
977
1087
  "fields": [
978
1088
  "id",
979
1089
  "color",
@@ -1002,7 +1112,7 @@
1002
1112
  "name": "MaterialDefinition",
1003
1113
  "kind": "InterfaceDeclaration",
1004
1114
  "signature": "export interface MaterialDefinition extends MaterialInput {\n readonly kind: \"material\";\n}",
1005
- "line": 656,
1115
+ "line": 711,
1006
1116
  "fields": [
1007
1117
  "kind"
1008
1118
  ]
@@ -1011,7 +1121,7 @@
1011
1121
  "name": "PostProcessInput",
1012
1122
  "kind": "InterfaceDeclaration",
1013
1123
  "signature": "export interface PostProcessInput {\n id: string;\n buffers?: readonly MaterialBufferInput[];\n textures?: readonly MaterialTextureInput[];\n /** Linear HDR vec4 output. Frame channels: scene.color, scene.normal, scene.depth, or an earlier pass ID. */\n graph: Graph;\n enabled?: boolean;\n}",
1014
- "line": 659,
1124
+ "line": 714,
1015
1125
  "fields": [
1016
1126
  "id",
1017
1127
  "buffers",
@@ -1024,7 +1134,7 @@
1024
1134
  "name": "PostProcessDefinition",
1025
1135
  "kind": "InterfaceDeclaration",
1026
1136
  "signature": "export interface PostProcessDefinition extends PostProcessInput {\n readonly kind: \"postprocess\";\n}",
1027
- "line": 667,
1137
+ "line": 722,
1028
1138
  "fields": [
1029
1139
  "kind"
1030
1140
  ]
@@ -1033,7 +1143,7 @@
1033
1143
  "name": "ComputeInput",
1034
1144
  "kind": "InterfaceDeclaration",
1035
1145
  "signature": "export interface ComputeInput {\n id: string;\n graph: Graph;\n outputType: GraphType;\n count: number;\n workgroupSize?: number;\n buffers?: readonly { name: string; type: GraphType }[];\n textures?: readonly ComputeTextureBinding[];\n}",
1036
- "line": 670,
1146
+ "line": 725,
1037
1147
  "fields": [
1038
1148
  "id",
1039
1149
  "graph",
@@ -1048,7 +1158,7 @@
1048
1158
  "name": "ComputeDefinition",
1049
1159
  "kind": "InterfaceDeclaration",
1050
1160
  "signature": "export interface ComputeDefinition extends ComputeInput {\n readonly kind: \"compute\";\n}",
1051
- "line": 679,
1161
+ "line": 734,
1052
1162
  "fields": [
1053
1163
  "kind"
1054
1164
  ]
@@ -1057,7 +1167,7 @@
1057
1167
  "name": "AssetInput",
1058
1168
  "kind": "InterfaceDeclaration",
1059
1169
  "signature": "export interface AssetInput {\n id: string;\n path: string;\n type: \"texture\" | \"binary\" | \"model\" | \"audio\";\n source?: string;\n license?: string;\n attribution?: string;\n /** Texture imports only; defaults to sRGB color. Data/normal/ORM textures use linear. */\n colorSpace?: \"srgb\" | \"linear\";\n}",
1060
- "line": 682,
1170
+ "line": 737,
1061
1171
  "fields": [
1062
1172
  "id",
1063
1173
  "path",
@@ -1072,7 +1182,7 @@
1072
1182
  "name": "AssetDefinition",
1073
1183
  "kind": "InterfaceDeclaration",
1074
1184
  "signature": "export interface AssetDefinition extends AssetInput {\n readonly kind: \"asset\";\n}",
1075
- "line": 692,
1185
+ "line": 747,
1076
1186
  "fields": [
1077
1187
  "kind"
1078
1188
  ]
@@ -1081,7 +1191,7 @@
1081
1191
  "name": "MeshDefinition",
1082
1192
  "kind": "InterfaceDeclaration",
1083
1193
  "signature": "export interface MeshDefinition {\n geometry: Geometry;\n material: MaterialDefinition | string;\n castShadow?: boolean;\n receiveShadow?: boolean;\n}",
1084
- "line": 695,
1194
+ "line": 750,
1085
1195
  "fields": [
1086
1196
  "geometry",
1087
1197
  "material",
@@ -1093,7 +1203,7 @@
1093
1203
  "name": "LightDefinition",
1094
1204
  "kind": "InterfaceDeclaration",
1095
1205
  "signature": "export interface LightDefinition {\n kind: \"directional\" | \"point\";\n color?: string;\n intensity?: number;\n castShadow?: boolean;\n target?: Vec3;\n shadow?: {\n mapSize?: number;\n extent?: number;\n bias?: number;\n normalBias?: number;\n near?: number;\n far?: number;\n };\n}",
1096
- "line": 701,
1206
+ "line": 756,
1097
1207
  "fields": [
1098
1208
  "kind",
1099
1209
  "color",
@@ -1107,7 +1217,7 @@
1107
1217
  "name": "EntityInput",
1108
1218
  "kind": "InterfaceDeclaration",
1109
1219
  "signature": "export interface EntityInput {\n id: string;\n prefab?: PrefabDefinition | string;\n parent?: string;\n transform?: TransformPatch;\n mesh?: MeshDefinition;\n light?: LightDefinition;\n model?: ModelDefinition;\n rigidBody?: RigidBodyDefinition;\n character?: CharacterDefinition;\n components?: readonly ComponentInstance[];\n}",
1110
- "line": 716,
1220
+ "line": 771,
1111
1221
  "fields": [
1112
1222
  "id",
1113
1223
  "prefab",
@@ -1125,7 +1235,7 @@
1125
1235
  "name": "PrefabInput",
1126
1236
  "kind": "InterfaceDeclaration",
1127
1237
  "signature": "export interface PrefabInput extends Omit<EntityInput, \"prefab\" | \"parent\"> {\n extends?: PrefabDefinition | string;\n}",
1128
- "line": 728,
1238
+ "line": 783,
1129
1239
  "fields": [
1130
1240
  "extends"
1131
1241
  ]
@@ -1134,7 +1244,7 @@
1134
1244
  "name": "PrefabDefinition",
1135
1245
  "kind": "InterfaceDeclaration",
1136
1246
  "signature": "export interface PrefabDefinition extends PrefabInput {\n readonly kind: \"prefab\";\n}",
1137
- "line": 731,
1247
+ "line": 786,
1138
1248
  "fields": [
1139
1249
  "kind"
1140
1250
  ]
@@ -1143,7 +1253,7 @@
1143
1253
  "name": "SceneInput",
1144
1254
  "kind": "InterfaceDeclaration",
1145
1255
  "signature": "export interface SceneInput {\n id: string;\n camera?: {\n position: Vec3;\n target: Vec3;\n fov?: number;\n near?: number;\n far?: number;\n };\n environment?: {\n background?: string;\n ambientIntensity?: number;\n lighting?: \"none\" | \"studio\";\n };\n follow?: {\n entity: string;\n distance?: number;\n height?: number;\n lookHeight?: number;\n yaw?: number;\n smoothing?: number;\n };\n gravity?: Vec3;\n entities: readonly EntityInput[];\n}",
1146
- "line": 734,
1256
+ "line": 789,
1147
1257
  "fields": [
1148
1258
  "id",
1149
1259
  "camera",
@@ -1157,7 +1267,7 @@
1157
1267
  "name": "SceneDefinition",
1158
1268
  "kind": "InterfaceDeclaration",
1159
1269
  "signature": "export interface SceneDefinition extends SceneInput {\n readonly kind: \"scene\";\n}",
1160
- "line": 759,
1270
+ "line": 814,
1161
1271
  "fields": [
1162
1272
  "kind"
1163
1273
  ]
@@ -1166,7 +1276,7 @@
1166
1276
  "name": "SystemInput",
1167
1277
  "kind": "InterfaceDeclaration",
1168
1278
  "signature": "export interface SystemInput {\n id: string;\n phase?: SystemPhase;\n before?: readonly string[];\n after?: readonly string[];\n reads?: readonly string[];\n writes?: readonly string[];\n structural?: boolean;\n run: (engine: SystemContext, dt: number) => void;\n}",
1169
- "line": 762,
1279
+ "line": 817,
1170
1280
  "fields": [
1171
1281
  "id",
1172
1282
  "phase",
@@ -1182,7 +1292,7 @@
1182
1292
  "name": "SystemDefinition",
1183
1293
  "kind": "InterfaceDeclaration",
1184
1294
  "signature": "export interface SystemDefinition extends SystemInput {\n readonly kind: \"system\";\n}",
1185
- "line": 772,
1295
+ "line": 827,
1186
1296
  "fields": [
1187
1297
  "kind"
1188
1298
  ]
@@ -1191,7 +1301,7 @@
1191
1301
  "name": "GameInput",
1192
1302
  "kind": "InterfaceDeclaration",
1193
1303
  "signature": "export interface GameInput {\n id: string;\n scene: SceneDefinition;\n systems?: readonly SystemDefinition[];\n components?: readonly ComponentDefinition[];\n prefabs?: readonly PrefabDefinition[];\n materials?: readonly MaterialDefinition[];\n computes?: readonly ComputeDefinition[];\n computeBuffers?: readonly ComputeBufferInput[];\n computeTextures?: readonly ComputeTextureInput[];\n assets?: readonly AssetDefinition[];\n scenes?: readonly SceneDefinition[];\n input?: Readonly<Record<string, readonly string[]>>;\n ui?: readonly UIElementDefinition[];\n sounds?: readonly SoundDefinition[];\n audioBuses?: readonly AudioBusDefinition[];\n render?: Partial<RenderSettings>;\n postProcesses?: readonly PostProcessDefinition[];\n}",
1194
- "line": 775,
1304
+ "line": 830,
1195
1305
  "fields": [
1196
1306
  "id",
1197
1307
  "scene",
@@ -1216,7 +1326,7 @@
1216
1326
  "name": "GameDefinition",
1217
1327
  "kind": "InterfaceDeclaration",
1218
1328
  "signature": "export interface GameDefinition extends GameInput {\n readonly kind: \"game\";\n}",
1219
- "line": 794,
1329
+ "line": 849,
1220
1330
  "fields": [
1221
1331
  "kind"
1222
1332
  ]
@@ -1225,7 +1335,7 @@
1225
1335
  "name": "GameInstance",
1226
1336
  "kind": "InterfaceDeclaration",
1227
1337
  "signature": "export interface GameInstance {\n update(dt: number): void;\n dispose(): void;\n}",
1228
- "line": 797,
1338
+ "line": 852,
1229
1339
  "fields": [
1230
1340
  "update",
1231
1341
  "dispose"
@@ -1235,61 +1345,61 @@
1235
1345
  "name": "defineComponent",
1236
1346
  "kind": "FunctionDeclaration",
1237
1347
  "signature": "export function defineComponent<const S extends ComponentSchema>(input: {\n id: string;\n schema: S;\n}): ComponentDefinition<S>;",
1238
- "line": 801
1348
+ "line": 856
1239
1349
  },
1240
1350
  {
1241
1351
  "name": "defineMaterial",
1242
1352
  "kind": "FunctionDeclaration",
1243
1353
  "signature": "export function defineMaterial(input: MaterialInput): MaterialDefinition;",
1244
- "line": 807
1354
+ "line": 862
1245
1355
  },
1246
1356
  {
1247
1357
  "name": "definePostProcess",
1248
1358
  "kind": "FunctionDeclaration",
1249
1359
  "signature": "export function definePostProcess(input: PostProcessInput): PostProcessDefinition;",
1250
- "line": 810
1360
+ "line": 865
1251
1361
  },
1252
1362
  {
1253
1363
  "name": "defineCompute",
1254
1364
  "kind": "FunctionDeclaration",
1255
1365
  "signature": "export function defineCompute(input: ComputeInput): ComputeDefinition;",
1256
- "line": 813
1366
+ "line": 868
1257
1367
  },
1258
1368
  {
1259
1369
  "name": "defineAsset",
1260
1370
  "kind": "FunctionDeclaration",
1261
1371
  "signature": "export function defineAsset(input: AssetInput): AssetDefinition;",
1262
- "line": 816
1372
+ "line": 871
1263
1373
  },
1264
1374
  {
1265
1375
  "name": "definePrefab",
1266
1376
  "kind": "FunctionDeclaration",
1267
1377
  "signature": "export function definePrefab(input: PrefabInput): PrefabDefinition;",
1268
- "line": 819
1378
+ "line": 874
1269
1379
  },
1270
1380
  {
1271
1381
  "name": "defineScene",
1272
1382
  "kind": "FunctionDeclaration",
1273
1383
  "signature": "export function defineScene(input: SceneInput): SceneDefinition;",
1274
- "line": 822
1384
+ "line": 877
1275
1385
  },
1276
1386
  {
1277
1387
  "name": "defineSystem",
1278
1388
  "kind": "FunctionDeclaration",
1279
1389
  "signature": "export function defineSystem(input: SystemInput): SystemDefinition;",
1280
- "line": 825
1390
+ "line": 880
1281
1391
  },
1282
1392
  {
1283
1393
  "name": "defineGame",
1284
1394
  "kind": "FunctionDeclaration",
1285
1395
  "signature": "export function defineGame(input: GameInput): GameDefinition;",
1286
- "line": 828
1396
+ "line": 883
1287
1397
  },
1288
1398
  {
1289
1399
  "name": "instantiateGame",
1290
1400
  "kind": "FunctionDeclaration",
1291
1401
  "signature": "export function instantiateGame(\n game: GameDefinition,\n engine: EngineFacade,\n): GameInstance;",
1292
- "line": 832
1402
+ "line": 887
1293
1403
  }
1294
1404
  ],
1295
1405
  "installedDeclarations": "lib/sdk/index.d.ts",