@aura3d/engine 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +309 -7
  2. package/dist/animation/AnimationClipEvents.d.ts +57 -0
  3. package/dist/animation/AnimationClipEvents.d.ts.map +1 -0
  4. package/dist/animation/AnimationClipEvents.js +171 -0
  5. package/dist/animation/AnimationClipEvents.js.map +1 -0
  6. package/dist/animation/AnimationClipRegistry.d.ts +76 -0
  7. package/dist/animation/AnimationClipRegistry.d.ts.map +1 -0
  8. package/dist/animation/AnimationClipRegistry.js +130 -0
  9. package/dist/animation/AnimationClipRegistry.js.map +1 -0
  10. package/dist/animation/AnimationController.d.ts +168 -0
  11. package/dist/animation/AnimationController.d.ts.map +1 -0
  12. package/dist/animation/AnimationController.js +619 -0
  13. package/dist/animation/AnimationController.js.map +1 -0
  14. package/dist/animation/HumanoidRetargeting.d.ts +76 -0
  15. package/dist/animation/HumanoidRetargeting.d.ts.map +1 -0
  16. package/dist/animation/HumanoidRetargeting.js +331 -0
  17. package/dist/animation/HumanoidRetargeting.js.map +1 -0
  18. package/dist/animation/browser-index.d.ts +18 -0
  19. package/dist/animation/browser-index.d.ts.map +1 -1
  20. package/dist/animation/browser-index.js +13 -0
  21. package/dist/animation/browser-index.js.map +1 -1
  22. package/dist/animation/index.d.ts +16 -1
  23. package/dist/animation/index.d.ts.map +1 -1
  24. package/dist/animation/index.js +11 -1
  25. package/dist/animation/index.js.map +1 -1
  26. package/dist/animation/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -1
  27. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js +3 -5
  28. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js.map +1 -1
  29. package/dist/assets/GLTFAnimationRuntime.js +1 -1
  30. package/dist/assets/GLTFLoader.js +1 -1
  31. package/dist/aura3d-cli/cli.js +194 -8
  32. package/dist/aura3d-cli/cli.js.map +1 -1
  33. package/dist/aura3d-cli/index.d.ts +280 -3
  34. package/dist/aura3d-cli/index.d.ts.map +1 -1
  35. package/dist/aura3d-cli/index.js +886 -4
  36. package/dist/aura3d-cli/index.js.map +1 -1
  37. package/dist/aura3d-cli/pull-bridge.d.ts +95 -0
  38. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -0
  39. package/dist/aura3d-cli/pull-bridge.js +247 -0
  40. package/dist/aura3d-cli/pull-bridge.js.map +1 -0
  41. package/dist/create-aura3d/index.d.ts +1 -1
  42. package/dist/create-aura3d/index.d.ts.map +1 -1
  43. package/dist/create-aura3d/index.js +9 -2
  44. package/dist/create-aura3d/index.js.map +1 -1
  45. package/dist/editor-runtime/ProjectSerializer.d.ts +74 -1
  46. package/dist/editor-runtime/ProjectSerializer.d.ts.map +1 -1
  47. package/dist/editor-runtime/ProjectSerializer.js +123 -6
  48. package/dist/editor-runtime/ProjectSerializer.js.map +1 -1
  49. package/dist/editor-runtime/TimelineModel.d.ts +18 -0
  50. package/dist/editor-runtime/TimelineModel.d.ts.map +1 -1
  51. package/dist/editor-runtime/TimelineModel.js +67 -3
  52. package/dist/editor-runtime/TimelineModel.js.map +1 -1
  53. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts +98 -0
  54. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts.map +1 -0
  55. package/dist/editor-runtime/TimelineRuntimeBridge.js +186 -0
  56. package/dist/editor-runtime/TimelineRuntimeBridge.js.map +1 -0
  57. package/dist/editor-runtime/index.d.ts +3 -1
  58. package/dist/editor-runtime/index.d.ts.map +1 -1
  59. package/dist/editor-runtime/index.js +1 -0
  60. package/dist/editor-runtime/index.js.map +1 -1
  61. package/dist/engine/agent-api/AnimationController.d.ts +607 -0
  62. package/dist/engine/agent-api/AnimationController.d.ts.map +1 -0
  63. package/dist/engine/agent-api/AnimationController.js +2192 -0
  64. package/dist/engine/agent-api/AnimationController.js.map +1 -0
  65. package/dist/engine/agent-api/AssetEvidence.d.ts +88 -0
  66. package/dist/engine/agent-api/AssetEvidence.d.ts.map +1 -0
  67. package/dist/engine/agent-api/AssetEvidence.js +157 -0
  68. package/dist/engine/agent-api/AssetEvidence.js.map +1 -0
  69. package/dist/engine/agent-api/AuraAppHandle.d.ts +55 -0
  70. package/dist/engine/agent-api/AuraAppHandle.d.ts.map +1 -0
  71. package/dist/engine/agent-api/AuraAppHandle.js +15 -0
  72. package/dist/engine/agent-api/AuraAppHandle.js.map +1 -0
  73. package/dist/engine/agent-api/AuraVoiceBridge.d.ts +96 -0
  74. package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -0
  75. package/dist/engine/agent-api/AuraVoiceBridge.js +370 -0
  76. package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -0
  77. package/dist/engine/agent-api/CartoonDirector.d.ts +95 -0
  78. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
  79. package/dist/engine/agent-api/CartoonDirector.js +342 -0
  80. package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
  81. package/dist/engine/agent-api/CartoonPerformance.d.ts +149 -0
  82. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
  83. package/dist/engine/agent-api/CartoonPerformance.js +317 -0
  84. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
  85. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +132 -0
  86. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
  87. package/dist/engine/agent-api/CartoonRenderQueue.js +385 -0
  88. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
  89. package/dist/engine/agent-api/CharacterAssembly.d.ts +126 -0
  90. package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -0
  91. package/dist/engine/agent-api/CharacterAssembly.js +280 -0
  92. package/dist/engine/agent-api/CharacterAssembly.js.map +1 -0
  93. package/dist/engine/agent-api/DialoguePerformance.d.ts +150 -0
  94. package/dist/engine/agent-api/DialoguePerformance.d.ts.map +1 -0
  95. package/dist/engine/agent-api/DialoguePerformance.js +335 -0
  96. package/dist/engine/agent-api/DialoguePerformance.js.map +1 -0
  97. package/dist/engine/agent-api/FrameLoop.d.ts +70 -0
  98. package/dist/engine/agent-api/FrameLoop.d.ts.map +1 -0
  99. package/dist/engine/agent-api/FrameLoop.js +165 -0
  100. package/dist/engine/agent-api/FrameLoop.js.map +1 -0
  101. package/dist/engine/agent-api/GameAssetValidation.d.ts +279 -0
  102. package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -0
  103. package/dist/engine/agent-api/GameAssetValidation.js +719 -0
  104. package/dist/engine/agent-api/GameAssetValidation.js.map +1 -0
  105. package/dist/engine/agent-api/GameEvidence.d.ts +148 -0
  106. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -0
  107. package/dist/engine/agent-api/GameEvidence.js +269 -0
  108. package/dist/engine/agent-api/GameEvidence.js.map +1 -0
  109. package/dist/engine/agent-api/GameRuntime.d.ts +931 -0
  110. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -0
  111. package/dist/engine/agent-api/GameRuntime.js +2229 -0
  112. package/dist/engine/agent-api/GameRuntime.js.map +1 -0
  113. package/dist/engine/agent-api/GameSceneBridge.d.ts +54 -0
  114. package/dist/engine/agent-api/GameSceneBridge.d.ts.map +1 -0
  115. package/dist/engine/agent-api/GameSceneBridge.js +110 -0
  116. package/dist/engine/agent-api/GameSceneBridge.js.map +1 -0
  117. package/dist/engine/agent-api/PromptAnimationContract.d.ts +278 -0
  118. package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -0
  119. package/dist/engine/agent-api/PromptAnimationContract.js +238 -0
  120. package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -0
  121. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +183 -0
  122. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -0
  123. package/dist/engine/agent-api/PromptAnimationEvidence.js +454 -0
  124. package/dist/engine/agent-api/PromptAnimationEvidence.js.map +1 -0
  125. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +100 -0
  126. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -0
  127. package/dist/engine/agent-api/RuntimeNodeHandle.js +36 -0
  128. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -0
  129. package/dist/engine/agent-api/ShotTimeline.d.ts +179 -0
  130. package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -0
  131. package/dist/engine/agent-api/ShotTimeline.js +264 -0
  132. package/dist/engine/agent-api/ShotTimeline.js.map +1 -0
  133. package/dist/engine/agent-api/VisemeController.d.ts +89 -0
  134. package/dist/engine/agent-api/VisemeController.d.ts.map +1 -0
  135. package/dist/engine/agent-api/VisemeController.js +207 -0
  136. package/dist/engine/agent-api/VisemeController.js.map +1 -0
  137. package/dist/engine/agent-api/game-kits/fighting.d.ts +123 -0
  138. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -0
  139. package/dist/engine/agent-api/game-kits/fighting.js +483 -0
  140. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -0
  141. package/dist/engine/agent-api/game-kits/index.d.ts +15 -0
  142. package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -0
  143. package/dist/engine/agent-api/game-kits/index.js +6 -0
  144. package/dist/engine/agent-api/game-kits/index.js.map +1 -0
  145. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +1 -0
  146. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts.map +1 -1
  147. package/dist/engine/agent-api/index.d.ts +487 -1
  148. package/dist/engine/agent-api/index.d.ts.map +1 -1
  149. package/dist/engine/agent-api/index.js +740 -6
  150. package/dist/engine/agent-api/index.js.map +1 -1
  151. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +1 -0
  154. package/dist/physics/CollisionVolumes.d.ts +57 -0
  155. package/dist/physics/CollisionVolumes.d.ts.map +1 -0
  156. package/dist/physics/CollisionVolumes.js +159 -0
  157. package/dist/physics/CollisionVolumes.js.map +1 -0
  158. package/dist/physics/HitboxWorld.d.ts +229 -0
  159. package/dist/physics/HitboxWorld.d.ts.map +1 -0
  160. package/dist/physics/HitboxWorld.js +640 -0
  161. package/dist/physics/HitboxWorld.js.map +1 -0
  162. package/dist/physics/KinematicBody.d.ts +157 -0
  163. package/dist/physics/KinematicBody.d.ts.map +1 -0
  164. package/dist/physics/KinematicBody.js +405 -0
  165. package/dist/physics/KinematicBody.js.map +1 -0
  166. package/dist/physics/KinematicWorld.d.ts +58 -0
  167. package/dist/physics/KinematicWorld.d.ts.map +1 -0
  168. package/dist/physics/KinematicWorld.js +246 -0
  169. package/dist/physics/KinematicWorld.js.map +1 -0
  170. package/dist/physics/index.d.ts +4 -0
  171. package/dist/physics/index.d.ts.map +1 -1
  172. package/dist/physics/index.js +4 -0
  173. package/dist/physics/index.js.map +1 -1
  174. package/dist/rendering/ForwardPass.js +2 -2
  175. package/dist/rendering/ShaderLibrary.js +2 -2
  176. package/dist/rendering/SkinnedLitMaterial.js +3 -3
  177. package/dist/rendering/SkinnedUnlitMaterial.js +3 -3
  178. package/dist/scene/Renderable.js +2 -2
  179. package/dist/scripting/VisualGraph.d.ts +2 -1
  180. package/dist/scripting/VisualGraph.d.ts.map +1 -1
  181. package/dist/scripting/VisualGraph.js +118 -1
  182. package/dist/scripting/VisualGraph.js.map +1 -1
  183. package/dist/scripting/VisualGraphContext.d.ts +123 -0
  184. package/dist/scripting/VisualGraphContext.d.ts.map +1 -0
  185. package/dist/scripting/VisualGraphContext.js +2 -0
  186. package/dist/scripting/VisualGraphContext.js.map +1 -0
  187. package/dist/scripting/VisualGraphExecutor.d.ts +6 -1
  188. package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
  189. package/dist/scripting/VisualGraphExecutor.js +364 -7
  190. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  191. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  192. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  193. package/dist/scripting/VisualNodeCatalog.js +61 -1
  194. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  195. package/dist/scripting/index.d.ts +1 -0
  196. package/dist/scripting/index.d.ts.map +1 -1
  197. package/dist/scripting/index.js.map +1 -1
  198. package/package.json +192 -118
@@ -1 +1 @@
1
- {"version":3,"file":"VisualGraph.js","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VisualGraph.js","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ export type VisualVector3 = readonly [number, number, number] | {
2
+ readonly x?: number;
3
+ readonly y?: number;
4
+ readonly z?: number;
5
+ };
6
+ export type VisualInputSet = readonly string[] | Readonly<Record<string, boolean>>;
7
+ export type VisualStateCollection<T extends {
8
+ readonly id: string;
9
+ }> = readonly T[] | Readonly<Record<string, T>>;
10
+ export interface VisualRuntimeNodeState {
11
+ readonly id: string;
12
+ readonly position?: VisualVector3;
13
+ readonly rotation?: VisualVector3;
14
+ readonly scale?: VisualVector3;
15
+ readonly visible?: boolean;
16
+ readonly material?: Readonly<Record<string, unknown>>;
17
+ readonly morphTargets?: Readonly<Record<string, number>>;
18
+ readonly tags?: readonly string[];
19
+ }
20
+ export interface VisualInputSnapshot {
21
+ readonly pressed?: VisualInputSet;
22
+ readonly held?: VisualInputSet;
23
+ readonly released?: VisualInputSet;
24
+ readonly buffered?: VisualInputSet;
25
+ readonly combos?: VisualInputSet;
26
+ readonly axes?: Readonly<Record<string, number>>;
27
+ }
28
+ export interface VisualAnimationEvent {
29
+ readonly id?: string;
30
+ readonly type: string;
31
+ readonly controllerId?: string;
32
+ readonly clip?: string;
33
+ readonly time?: number;
34
+ readonly bone?: string;
35
+ readonly payload?: unknown;
36
+ }
37
+ export interface VisualAnimationControllerState {
38
+ readonly id: string;
39
+ readonly nodeId?: string;
40
+ readonly currentClip?: string;
41
+ readonly clipTime?: number;
42
+ readonly clips?: readonly string[];
43
+ readonly layers?: Readonly<Record<string, number>>;
44
+ readonly morphTargets?: readonly string[];
45
+ readonly events?: readonly VisualAnimationEvent[];
46
+ }
47
+ export interface VisualPhysicsBodyState {
48
+ readonly id: string;
49
+ readonly position?: VisualVector3;
50
+ readonly velocity?: VisualVector3;
51
+ readonly grounded?: boolean;
52
+ }
53
+ export interface VisualCollisionEvent {
54
+ readonly id?: string;
55
+ readonly type: "enter" | "exit";
56
+ readonly bodyId?: string;
57
+ readonly otherBodyId?: string;
58
+ readonly point?: VisualVector3;
59
+ readonly normal?: VisualVector3;
60
+ readonly payload?: unknown;
61
+ }
62
+ export interface VisualRaycastHit {
63
+ readonly id: string;
64
+ readonly hit: boolean;
65
+ readonly bodyId?: string;
66
+ readonly point?: VisualVector3;
67
+ readonly normal?: VisualVector3;
68
+ readonly distance?: number;
69
+ }
70
+ export interface VisualOverlapResult {
71
+ readonly id: string;
72
+ readonly bodyIds: readonly string[];
73
+ }
74
+ export interface VisualCombatEvent {
75
+ readonly id?: string;
76
+ readonly type: "hit" | "blocked" | "damage" | "knockback";
77
+ readonly actorId?: string;
78
+ readonly targetId?: string;
79
+ readonly hitboxId?: string;
80
+ readonly amount?: number;
81
+ readonly payload?: unknown;
82
+ }
83
+ export interface VisualCameraState {
84
+ readonly id?: string;
85
+ readonly position?: VisualVector3;
86
+ readonly targetIds?: readonly string[];
87
+ }
88
+ export interface VisualGraphExecutionContext {
89
+ readonly frame?: number;
90
+ readonly time?: number;
91
+ readonly dt?: number;
92
+ readonly runtimeNodes?: VisualStateCollection<VisualRuntimeNodeState>;
93
+ readonly input?: VisualInputSnapshot;
94
+ readonly animationControllers?: VisualStateCollection<VisualAnimationControllerState>;
95
+ readonly animationEvents?: readonly VisualAnimationEvent[];
96
+ readonly physicsBodies?: VisualStateCollection<VisualPhysicsBodyState>;
97
+ readonly collisionEvents?: readonly VisualCollisionEvent[];
98
+ readonly raycastHits?: VisualStateCollection<VisualRaycastHit>;
99
+ readonly overlaps?: VisualStateCollection<VisualOverlapResult>;
100
+ readonly combatEvents?: readonly VisualCombatEvent[];
101
+ readonly camera?: VisualCameraState;
102
+ readonly evidence?: Readonly<Record<string, unknown>>;
103
+ }
104
+ export interface VisualGraphValidationOptions {
105
+ readonly context?: VisualGraphExecutionContext;
106
+ readonly strictReferences?: boolean;
107
+ readonly allowCycles?: boolean;
108
+ }
109
+ export interface VisualGraphSideEffect {
110
+ readonly kind: string;
111
+ readonly nodeId: string;
112
+ readonly target?: string;
113
+ readonly frame?: number;
114
+ readonly time?: number;
115
+ readonly payload: unknown;
116
+ }
117
+ export interface VisualGraphDiagnostic {
118
+ readonly level: "info" | "warning" | "error";
119
+ readonly code: string;
120
+ readonly message: string;
121
+ readonly nodeId?: string;
122
+ }
123
+ //# sourceMappingURL=VisualGraphContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualGraphContext.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraphContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=VisualGraphContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualGraphContext.js","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraphContext.ts"],"names":[],"mappings":""}
@@ -1,11 +1,16 @@
1
1
  import { type VisualGraph } from "./VisualGraph";
2
+ import { type VisualGraphDiagnostic, type VisualGraphExecutionContext, type VisualGraphSideEffect } from "./VisualGraphContext";
2
3
  export interface VisualExecutionResult {
3
4
  readonly values: ReadonlyMap<string, unknown>;
4
5
  readonly executionOrder: readonly string[];
5
6
  readonly nodeKinds: readonly string[];
7
+ readonly sideEffects: readonly VisualGraphSideEffect[];
8
+ readonly diagnostics: readonly VisualGraphDiagnostic[];
6
9
  readonly blockedClaims: readonly string[];
7
10
  }
8
11
  export declare class VisualGraphExecutor {
9
- execute(graph: VisualGraph): VisualExecutionResult;
12
+ private readonly defaultContext;
13
+ constructor(context?: VisualGraphExecutionContext);
14
+ execute(graph: VisualGraph, context?: VisualGraphExecutionContext): VisualExecutionResult;
10
15
  }
11
16
  //# sourceMappingURL=VisualGraphExecutor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VisualGraphExecutor.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraphExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAMjF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB;CAiDnD"}
1
+ {"version":3,"file":"VisualGraphExecutor.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/VisualGraphExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAI3B,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;gBAEjD,OAAO,GAAE,2BAAgC;IAIrD,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,2BAAiD,GAAG,qBAAqB;CAsD/G"}
@@ -1,15 +1,22 @@
1
1
  import { validateGraph } from "./VisualGraph.js";
2
+ import {} from "./VisualGraphContext.js";
2
3
  import { getVisualNodeDefinition } from "./VisualNodeCatalog.js";
3
4
  import {} from "./VisualNode.js";
4
5
  const visualNodeOutputsBrand = Symbol("VisualNodeOutputs");
5
6
  export class VisualGraphExecutor {
6
- execute(graph) {
7
- const errors = validateGraph(graph);
7
+ defaultContext;
8
+ constructor(context = {}) {
9
+ this.defaultContext = context;
10
+ }
11
+ execute(graph, context = this.defaultContext) {
12
+ const errors = validateGraph(graph, { context });
8
13
  if (errors.length > 0) {
9
14
  throw new Error(errors.join("; "));
10
15
  }
11
16
  const values = new Map();
12
17
  const executionOrder = [];
18
+ const sideEffects = [];
19
+ const diagnostics = [];
13
20
  const nodes = new Map(graph.nodes.map((node) => [node.id, node]));
14
21
  const visiting = new Set();
15
22
  const visited = new Set();
@@ -27,7 +34,7 @@ export class VisualGraphExecutor {
27
34
  for (const edge of graph.edges.filter((candidate) => candidate.toNode === node.id)) {
28
35
  executeNode(edge.fromNode);
29
36
  }
30
- setNodeOutput(values, node, executeVisualNode(node, graph.edges.filter((edge) => edge.toNode === node.id), values));
37
+ setNodeOutput(values, node, executeVisualNode(node, graph.edges.filter((edge) => edge.toNode === node.id), values, context, sideEffects, diagnostics));
31
38
  visiting.delete(nodeId);
32
39
  visited.add(nodeId);
33
40
  executionOrder.push(nodeId);
@@ -39,22 +46,31 @@ export class VisualGraphExecutor {
39
46
  values,
40
47
  executionOrder,
41
48
  nodeKinds: [...new Set(graph.nodes.map((node) => node.kind))].sort(),
49
+ sideEffects,
50
+ diagnostics,
42
51
  blockedClaims: [
43
52
  "Unity Visual Scripting parity",
44
53
  "Unreal Blueprint parity",
45
54
  "async latent action graph parity",
46
- "editor-authored visual scripting parity"
55
+ "editor-authored visual scripting parity",
56
+ "live engine installGraph bridge parity"
47
57
  ]
48
58
  };
49
59
  }
50
60
  }
51
- function executeVisualNode(node, inputEdges, values) {
61
+ function executeVisualNode(node, inputEdges, values, context, sideEffects, diagnostics) {
52
62
  const definition = getVisualNodeDefinition(node.kind);
53
63
  if (!definition)
54
64
  throw new Error(`Unsupported visual node kind: ${node.kind}`);
55
65
  const input = (port) => getInputValue(node, port, inputEdges, values);
56
- const number = (port) => Number(input(port) ?? 0);
66
+ const number = (port) => finiteNumber(input(port));
57
67
  const boolean = (port) => Boolean(input(port));
68
+ const string = (port) => String(input(port) ?? "");
69
+ const optionalString = (port) => {
70
+ const value = input(port);
71
+ return typeof value === "string" && value.length > 0 ? value : undefined;
72
+ };
73
+ const object = (port) => stableClone(input(port) ?? {});
58
74
  switch (node.kind) {
59
75
  case "const":
60
76
  return node.data?.value;
@@ -62,7 +78,7 @@ function executeVisualNode(node, inputEdges, values) {
62
78
  return input("in");
63
79
  case "add":
64
80
  return inputEdges.length > 1
65
- ? inputEdges.reduce((total, edge) => total + Number(readEdgeValue(edge, values) ?? 0), 0)
81
+ ? inputEdges.reduce((total, edge) => total + finiteNumber(readEdgeValue(edge, values)), 0)
66
82
  : number("in");
67
83
  case "subtract":
68
84
  return number("a") - number("b");
@@ -184,7 +200,249 @@ function executeVisualNode(node, inputEdges, values) {
184
200
  isOpen
185
201
  });
186
202
  }
203
+ case "onStart": {
204
+ const active = (context.frame ?? 0) === 0 && (context.time ?? 0) === 0;
205
+ return outputs(active, { out: active, active });
206
+ }
207
+ case "onFrame": {
208
+ const frame = { dt: context.dt ?? 0, time: context.time ?? 0, frame: context.frame ?? 0 };
209
+ return outputs(frame, { out: true, dt: frame.dt, time: frame.time, frame: frame.frame, context: frame });
210
+ }
211
+ case "getNode": {
212
+ const nodeId = string("nodeId");
213
+ const runtimeNode = collectionGet(context.runtimeNodes, nodeId);
214
+ if (!runtimeNode) {
215
+ diagnostics.push({ level: "warning", code: "runtime.nodeMissing", message: `Runtime node not found: ${nodeId}`, nodeId: node.id });
216
+ }
217
+ return outputs(stableClone(runtimeNode ?? null), {
218
+ node: stableClone(runtimeNode ?? null),
219
+ nodeId,
220
+ exists: runtimeNode !== undefined,
221
+ position: normalizeVector(runtimeNode?.position)
222
+ });
223
+ }
224
+ case "setPosition":
225
+ return command("runtime.setPosition", node, context, sideEffects, string("nodeId"), {
226
+ nodeId: string("nodeId"),
227
+ position: normalizeVector(input("position"))
228
+ });
229
+ case "translate": {
230
+ const nodeId = string("nodeId");
231
+ const current = normalizeVector(collectionGet(context.runtimeNodes, nodeId)?.position);
232
+ const delta = normalizeVector(input("delta"));
233
+ return command("runtime.translate", node, context, sideEffects, nodeId, {
234
+ nodeId,
235
+ from: current,
236
+ delta,
237
+ position: addVectors(current, delta)
238
+ });
239
+ }
240
+ case "rotate":
241
+ return command("runtime.rotate", node, context, sideEffects, string("nodeId"), {
242
+ nodeId: string("nodeId"),
243
+ rotation: normalizeVector(input("rotation"))
244
+ });
245
+ case "setVisible":
246
+ return command("runtime.setVisible", node, context, sideEffects, string("nodeId"), {
247
+ nodeId: string("nodeId"),
248
+ visible: boolean("visible")
249
+ });
250
+ case "setMaterial":
251
+ return command("runtime.setMaterial", node, context, sideEffects, string("nodeId"), {
252
+ nodeId: string("nodeId"),
253
+ material: object("material")
254
+ });
255
+ case "pressed":
256
+ return inputFlag(context.input?.pressed, string("action"));
257
+ case "held":
258
+ return inputFlag(context.input?.held, string("action"));
259
+ case "released":
260
+ return inputFlag(context.input?.released, string("action"));
261
+ case "axis":
262
+ return finiteNumber(context.input?.axes?.[string("axis")]);
263
+ case "buffered":
264
+ return inputFlag(context.input?.buffered, string("action"));
265
+ case "combo":
266
+ return inputFlag(context.input?.combos, string("combo"));
267
+ case "playClip":
268
+ return command("animation.playClip", node, context, sideEffects, string("controllerId"), {
269
+ controllerId: string("controllerId"),
270
+ clip: string("clip"),
271
+ loop: boolean("loop")
272
+ });
273
+ case "restartClip":
274
+ return command("animation.restartClip", node, context, sideEffects, string("controllerId"), {
275
+ controllerId: string("controllerId"),
276
+ clip: string("clip"),
277
+ restart: true
278
+ });
279
+ case "crossFade":
280
+ return command("animation.crossFade", node, context, sideEffects, string("controllerId"), {
281
+ controllerId: string("controllerId"),
282
+ clip: string("clip"),
283
+ duration: number("duration"),
284
+ restart: boolean("restart"),
285
+ layer: optionalString("layer")
286
+ });
287
+ case "setLayerWeight":
288
+ return command("animation.setLayerWeight", node, context, sideEffects, string("controllerId"), {
289
+ controllerId: string("controllerId"),
290
+ layer: string("layer"),
291
+ weight: number("weight")
292
+ });
293
+ case "onAnimationEvent": {
294
+ const event = findAnimationEvent(context, string("controllerId"), string("eventType"), optionalString("clip"));
295
+ return outputs(stableClone(event ?? null), {
296
+ out: event !== undefined,
297
+ fired: event !== undefined,
298
+ event: stableClone(event ?? null)
299
+ });
300
+ }
301
+ case "setMorphTarget": {
302
+ const morphTarget = string("morphTarget");
303
+ const weight = number("weight");
304
+ return command("animation.setMorphTarget", node, context, sideEffects, string("controllerId"), {
305
+ controllerId: string("controllerId"),
306
+ morphTarget,
307
+ weight,
308
+ weights: { [morphTarget]: weight }
309
+ });
310
+ }
311
+ case "setMorphTargets":
312
+ return command("animation.setMorphTargets", node, context, sideEffects, string("controllerId"), {
313
+ controllerId: string("controllerId"),
314
+ weights: object("weights")
315
+ });
316
+ case "getClipTime": {
317
+ const controller = collectionGet(context.animationControllers, string("controllerId"));
318
+ return outputs(controller?.clipTime ?? 0, {
319
+ out: controller?.clipTime ?? 0,
320
+ clip: controller?.currentClip ?? ""
321
+ });
322
+ }
323
+ case "setVelocity":
324
+ return command("physics.setVelocity", node, context, sideEffects, string("bodyId"), {
325
+ bodyId: string("bodyId"),
326
+ velocity: normalizeVector(input("velocity"))
327
+ });
328
+ case "jump":
329
+ return command("physics.jump", node, context, sideEffects, string("bodyId"), {
330
+ bodyId: string("bodyId"),
331
+ impulse: number("impulse")
332
+ });
333
+ case "dash":
334
+ return command("physics.dash", node, context, sideEffects, string("bodyId"), {
335
+ bodyId: string("bodyId"),
336
+ direction: normalizeVector(input("direction")),
337
+ speed: number("speed")
338
+ });
339
+ case "onCollisionEnter": {
340
+ const event = findCollisionEvent(context.collisionEvents, "enter", string("bodyId"), optionalString("otherBodyId"));
341
+ return outputs(stableClone(event ?? null), { out: event !== undefined, collided: event !== undefined, event: stableClone(event ?? null) });
342
+ }
343
+ case "onCollisionExit": {
344
+ const event = findCollisionEvent(context.collisionEvents, "exit", string("bodyId"), optionalString("otherBodyId"));
345
+ return outputs(stableClone(event ?? null), { out: event !== undefined, collided: event !== undefined, event: stableClone(event ?? null) });
346
+ }
347
+ case "raycast": {
348
+ const hit = collectionGet(context.raycastHits, string("queryId"));
349
+ return outputs(stableClone(hit ?? null), { hit: hit?.hit === true, result: stableClone(hit ?? null) });
350
+ }
351
+ case "overlap": {
352
+ const overlap = collectionGet(context.overlaps, string("queryId"));
353
+ return outputs(stableClone(overlap ?? null), { hit: (overlap?.bodyIds.length ?? 0) > 0, result: stableClone(overlap ?? null) });
354
+ }
355
+ case "openHitbox":
356
+ return command("combat.openHitbox", node, context, sideEffects, string("hitboxId"), {
357
+ hitboxId: string("hitboxId"),
358
+ ownerId: string("ownerId"),
359
+ damage: number("damage"),
360
+ payload: object("payload")
361
+ });
362
+ case "closeHitbox":
363
+ return command("combat.closeHitbox", node, context, sideEffects, string("hitboxId"), {
364
+ hitboxId: string("hitboxId")
365
+ });
366
+ case "setHurtbox":
367
+ return command("combat.setHurtbox", node, context, sideEffects, string("hurtboxId"), {
368
+ hurtboxId: string("hurtboxId"),
369
+ ownerId: string("ownerId"),
370
+ payload: object("payload")
371
+ });
372
+ case "onHit": {
373
+ const event = findCombatHit(context.combatEvents, optionalString("actorId"), optionalString("hitboxId"));
374
+ return outputs(stableClone(event ?? null), { out: event !== undefined, hit: event !== undefined, event: stableClone(event ?? null) });
375
+ }
376
+ case "applyDamage":
377
+ return command("combat.applyDamage", node, context, sideEffects, string("targetId"), {
378
+ targetId: string("targetId"),
379
+ amount: number("amount"),
380
+ sourceId: optionalString("sourceId")
381
+ });
382
+ case "applyKnockback":
383
+ return command("combat.applyKnockback", node, context, sideEffects, string("targetId"), {
384
+ targetId: string("targetId"),
385
+ velocity: normalizeVector(input("velocity")),
386
+ sourceId: optionalString("sourceId")
387
+ });
388
+ case "follow":
389
+ return command("camera.follow", node, context, sideEffects, string("targetId"), {
390
+ targetId: string("targetId"),
391
+ stiffness: number("stiffness")
392
+ });
393
+ case "frameTargets":
394
+ return command("camera.frameTargets", node, context, sideEffects, undefined, {
395
+ targetIds: object("targetIds"),
396
+ padding: number("padding")
397
+ });
398
+ case "shake":
399
+ return command("camera.shake", node, context, sideEffects, context.camera?.id, {
400
+ intensity: number("intensity"),
401
+ duration: number("duration")
402
+ });
403
+ case "cutTo":
404
+ return command("camera.cutTo", node, context, sideEffects, context.camera?.id, {
405
+ position: normalizeVector(input("position")),
406
+ target: stableClone(input("target") ?? null)
407
+ });
408
+ case "captureSnapshot": {
409
+ const snapshot = cleanObject({
410
+ kind: "evidence.snapshot",
411
+ label: optionalString("label") ?? node.id,
412
+ frame: context.frame,
413
+ time: context.time,
414
+ dt: context.dt,
415
+ runtimeNodes: context.runtimeNodes,
416
+ animationControllers: context.animationControllers,
417
+ physicsBodies: context.physicsBodies,
418
+ camera: context.camera,
419
+ evidence: context.evidence
420
+ });
421
+ pushSideEffect(sideEffects, "evidence.captureSnapshot", node, context, optionalString("label"), snapshot);
422
+ return outputs(snapshot, { out: true, snapshot });
423
+ }
424
+ case "markProof":
425
+ return command("evidence.markProof", node, context, sideEffects, string("proofId"), {
426
+ proofId: string("proofId"),
427
+ details: object("details")
428
+ });
429
+ case "assertState": {
430
+ const operator = optionalString("operator") ?? "equals";
431
+ const actual = input("actual");
432
+ const expected = input("expected");
433
+ const passed = evaluateAssertion(actual, expected, operator);
434
+ const assertion = cleanObject({
435
+ kind: "evidence.assertState",
436
+ operator,
437
+ actual,
438
+ expected,
439
+ passed
440
+ });
441
+ pushSideEffect(sideEffects, "evidence.assertState", node, context, undefined, assertion);
442
+ return outputs(assertion, { out: passed, passed, assertion });
443
+ }
187
444
  }
445
+ throw new Error(`Unsupported visual node kind: ${node.kind}`);
188
446
  }
189
447
  function getInputValue(node, portId, inputEdges, values) {
190
448
  const edge = inputEdges.find((candidate) => candidate.toPort === portId);
@@ -211,4 +469,103 @@ function outputs(value, byPort) {
211
469
  function isOutputMap(value) {
212
470
  return typeof value === "object" && value !== null && value[visualNodeOutputsBrand] === true;
213
471
  }
472
+ function finiteNumber(value) {
473
+ const numeric = Number(value ?? 0);
474
+ return Number.isFinite(numeric) ? numeric : 0;
475
+ }
476
+ function inputFlag(source, key) {
477
+ if (!source || key.length === 0)
478
+ return false;
479
+ return Array.isArray(source) ? source.includes(key) : source[key] === true;
480
+ }
481
+ function normalizeVector(value, fallback = { x: 0, y: 0, z: 0 }) {
482
+ if (Array.isArray(value)) {
483
+ return { x: finiteNumber(value[0] ?? fallback.x), y: finiteNumber(value[1] ?? fallback.y), z: finiteNumber(value[2] ?? fallback.z) };
484
+ }
485
+ if (typeof value === "object" && value !== null) {
486
+ const vector = value;
487
+ return {
488
+ x: finiteNumber(vector.x ?? fallback.x),
489
+ y: finiteNumber(vector.y ?? fallback.y),
490
+ z: finiteNumber(vector.z ?? fallback.z)
491
+ };
492
+ }
493
+ return { ...fallback };
494
+ }
495
+ function addVectors(a, b) {
496
+ return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
497
+ }
498
+ function command(kind, node, context, sideEffects, target, payload) {
499
+ const commandPayload = cleanObject({ kind, target, ...payload });
500
+ pushSideEffect(sideEffects, kind, node, context, target, commandPayload);
501
+ return outputs(commandPayload, { out: true, command: commandPayload });
502
+ }
503
+ function pushSideEffect(sideEffects, kind, node, context, target, payload) {
504
+ sideEffects.push(cleanObject({
505
+ kind,
506
+ nodeId: node.id,
507
+ target,
508
+ frame: context.frame,
509
+ time: context.time,
510
+ payload
511
+ }));
512
+ }
513
+ function collectionGet(collection, id) {
514
+ if (!collection || id.length === 0)
515
+ return undefined;
516
+ return Array.isArray(collection) ? collection.find((entry) => entry.id === id) : collection[id];
517
+ }
518
+ function findAnimationEvent(context, controllerId, eventType, clip) {
519
+ const controller = collectionGet(context.animationControllers, controllerId);
520
+ const events = [...(context.animationEvents ?? []), ...(controller?.events ?? [])];
521
+ return events.find((event) => event.type === eventType &&
522
+ (event.controllerId === undefined || event.controllerId === controllerId) &&
523
+ (clip === undefined || event.clip === undefined || event.clip === clip));
524
+ }
525
+ function findCollisionEvent(events, type, bodyId, otherBodyId) {
526
+ return events?.find((event) => event.type === type &&
527
+ (event.bodyId === bodyId || event.otherBodyId === bodyId) &&
528
+ (otherBodyId === undefined || event.bodyId === otherBodyId || event.otherBodyId === otherBodyId));
529
+ }
530
+ function findCombatHit(events, actorId, hitboxId) {
531
+ return events?.find((event) => event.type === "hit" &&
532
+ (actorId === undefined || event.actorId === actorId || event.targetId === actorId) &&
533
+ (hitboxId === undefined || event.hitboxId === hitboxId));
534
+ }
535
+ function evaluateAssertion(actual, expected, operator) {
536
+ switch (operator) {
537
+ case "equals":
538
+ return stableStringify(actual) === stableStringify(expected);
539
+ case "notEquals":
540
+ return stableStringify(actual) !== stableStringify(expected);
541
+ case "truthy":
542
+ return Boolean(actual);
543
+ case "falsy":
544
+ return !actual;
545
+ default:
546
+ return false;
547
+ }
548
+ }
549
+ function stableClone(value) {
550
+ return cleanObject(value);
551
+ }
552
+ function cleanObject(value) {
553
+ if (Array.isArray(value)) {
554
+ return value.map((entry) => cleanObject(entry));
555
+ }
556
+ if (typeof value === "object" && value !== null) {
557
+ const output = {};
558
+ for (const key of Object.keys(value).sort()) {
559
+ const entry = value[key];
560
+ if (entry !== undefined) {
561
+ output[key] = cleanObject(entry);
562
+ }
563
+ }
564
+ return output;
565
+ }
566
+ return value;
567
+ }
568
+ function stableStringify(value) {
569
+ return JSON.stringify(cleanObject(value));
570
+ }
214
571
  //# sourceMappingURL=VisualGraphExecutor.js.map