@kiberon-labs/behave-graph-scene 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/.storybook/main.ts +18 -0
  2. package/.storybook/preview.ts +16 -0
  3. package/.storybook/vscode.css +822 -0
  4. package/.turbo/turbo-build.log +4 -3
  5. package/CHANGELOG.md +84 -0
  6. package/README.md +1 -1
  7. package/dist/Abstractions/Drivers/DummyScene.d.ts +47 -3
  8. package/dist/Abstractions/Drivers/DummyScene.d.ts.map +1 -1
  9. package/dist/Abstractions/Drivers/DummyScene.js +57 -0
  10. package/dist/Abstractions/Drivers/DummyScene.js.map +1 -1
  11. package/dist/Abstractions/IScene.d.ts +63 -4
  12. package/dist/Abstractions/IScene.d.ts.map +1 -1
  13. package/dist/Abstractions/IScene.js +19 -0
  14. package/dist/Abstractions/IScene.js.map +1 -0
  15. package/dist/Nodes/Actions/AddLight.d.ts +21 -0
  16. package/dist/Nodes/Actions/AddLight.d.ts.map +1 -0
  17. package/dist/Nodes/Actions/AddLight.js +38 -0
  18. package/dist/Nodes/Actions/AddLight.js.map +1 -0
  19. package/dist/Nodes/Actions/CloneMesh.d.ts +16 -0
  20. package/dist/Nodes/Actions/CloneMesh.d.ts.map +1 -0
  21. package/dist/Nodes/Actions/CloneMesh.js +28 -0
  22. package/dist/Nodes/Actions/CloneMesh.js.map +1 -0
  23. package/dist/Nodes/Actions/CreateMesh.d.ts +22 -0
  24. package/dist/Nodes/Actions/CreateMesh.d.ts.map +1 -0
  25. package/dist/Nodes/Actions/CreateMesh.js +44 -0
  26. package/dist/Nodes/Actions/CreateMesh.js.map +1 -0
  27. package/dist/Nodes/Actions/DeleteMesh.d.ts +15 -0
  28. package/dist/Nodes/Actions/DeleteMesh.d.ts.map +1 -0
  29. package/dist/Nodes/Actions/DeleteMesh.js +27 -0
  30. package/dist/Nodes/Actions/DeleteMesh.js.map +1 -0
  31. package/dist/Nodes/Actions/EaseSceneProperty.d.ts +1 -1
  32. package/dist/Nodes/Actions/EaseSceneProperty.d.ts.map +1 -1
  33. package/dist/Nodes/Actions/EaseSceneProperty.js +2 -2
  34. package/dist/Nodes/Actions/EaseSceneProperty.js.map +1 -1
  35. package/dist/Nodes/Actions/LookAt.d.ts +16 -0
  36. package/dist/Nodes/Actions/LookAt.d.ts.map +1 -0
  37. package/dist/Nodes/Actions/LookAt.js +35 -0
  38. package/dist/Nodes/Actions/LookAt.js.map +1 -0
  39. package/dist/Nodes/Actions/MoveTowards.d.ts +21 -0
  40. package/dist/Nodes/Actions/MoveTowards.d.ts.map +1 -0
  41. package/dist/Nodes/Actions/MoveTowards.js +46 -0
  42. package/dist/Nodes/Actions/MoveTowards.js.map +1 -0
  43. package/dist/Nodes/Actions/RemoveLight.d.ts +15 -0
  44. package/dist/Nodes/Actions/RemoveLight.d.ts.map +1 -0
  45. package/dist/Nodes/Actions/RemoveLight.js +27 -0
  46. package/dist/Nodes/Actions/RemoveLight.js.map +1 -0
  47. package/dist/Nodes/Actions/SetLightProperty.d.ts +25 -0
  48. package/dist/Nodes/Actions/SetLightProperty.d.ts.map +1 -0
  49. package/dist/Nodes/Actions/SetLightProperty.js +64 -0
  50. package/dist/Nodes/Actions/SetLightProperty.js.map +1 -0
  51. package/dist/Nodes/Actions/SetMaterialProperty.d.ts +25 -0
  52. package/dist/Nodes/Actions/SetMaterialProperty.d.ts.map +1 -0
  53. package/dist/Nodes/Actions/SetMaterialProperty.js +69 -0
  54. package/dist/Nodes/Actions/SetMaterialProperty.js.map +1 -0
  55. package/dist/Nodes/Actions/SetMeshPosition.d.ts +18 -0
  56. package/dist/Nodes/Actions/SetMeshPosition.d.ts.map +1 -0
  57. package/dist/Nodes/Actions/SetMeshPosition.js +34 -0
  58. package/dist/Nodes/Actions/SetMeshPosition.js.map +1 -0
  59. package/dist/Nodes/Actions/SetMeshVisible.d.ts +16 -0
  60. package/dist/Nodes/Actions/SetMeshVisible.d.ts.map +1 -0
  61. package/dist/Nodes/Actions/SetMeshVisible.js +28 -0
  62. package/dist/Nodes/Actions/SetMeshVisible.js.map +1 -0
  63. package/dist/Nodes/Actions/SetSceneProperty.d.ts +12 -1
  64. package/dist/Nodes/Actions/SetSceneProperty.d.ts.map +1 -1
  65. package/dist/Nodes/Actions/SetSceneProperty.js +1 -1
  66. package/dist/Nodes/Actions/SetSceneProperty.js.map +1 -1
  67. package/dist/Nodes/Events/OnAnyMeshClicked.d.ts +13 -0
  68. package/dist/Nodes/Events/OnAnyMeshClicked.d.ts.map +1 -0
  69. package/dist/Nodes/Events/OnAnyMeshClicked.js +34 -0
  70. package/dist/Nodes/Events/OnAnyMeshClicked.js.map +1 -0
  71. package/dist/Nodes/Events/OnSceneChanged.d.ts +12 -0
  72. package/dist/Nodes/Events/OnSceneChanged.d.ts.map +1 -0
  73. package/dist/Nodes/Events/OnSceneChanged.js +28 -0
  74. package/dist/Nodes/Events/OnSceneChanged.js.map +1 -0
  75. package/dist/Nodes/Events/OnSceneNodeClick.d.ts +14 -1
  76. package/dist/Nodes/Events/OnSceneNodeClick.d.ts.map +1 -1
  77. package/dist/Nodes/Events/OnSceneNodeClick.js +1 -1
  78. package/dist/Nodes/Events/OnSceneNodeClick.js.map +1 -1
  79. package/dist/Nodes/Logic/ColorNodes.d.ts +17 -13
  80. package/dist/Nodes/Logic/ColorNodes.d.ts.map +1 -1
  81. package/dist/Nodes/Logic/EulerNodes.d.ts +16 -12
  82. package/dist/Nodes/Logic/EulerNodes.d.ts.map +1 -1
  83. package/dist/Nodes/Logic/Mat3Nodes.d.ts +26 -23
  84. package/dist/Nodes/Logic/Mat3Nodes.d.ts.map +1 -1
  85. package/dist/Nodes/Logic/Mat3Nodes.js +0 -14
  86. package/dist/Nodes/Logic/Mat3Nodes.js.map +1 -1
  87. package/dist/Nodes/Logic/Mat4Nodes.d.ts +32 -28
  88. package/dist/Nodes/Logic/Mat4Nodes.d.ts.map +1 -1
  89. package/dist/Nodes/Logic/QuatNodes.d.ts +22 -18
  90. package/dist/Nodes/Logic/QuatNodes.d.ts.map +1 -1
  91. package/dist/Nodes/Logic/Vec2Nodes.d.ts +16 -12
  92. package/dist/Nodes/Logic/Vec2Nodes.d.ts.map +1 -1
  93. package/dist/Nodes/Logic/Vec3Nodes.d.ts +17 -13
  94. package/dist/Nodes/Logic/Vec3Nodes.d.ts.map +1 -1
  95. package/dist/Nodes/Logic/Vec4Nodes.d.ts +16 -12
  96. package/dist/Nodes/Logic/Vec4Nodes.d.ts.map +1 -1
  97. package/dist/Nodes/Queries/GetDistanceBetween.d.ts +18 -0
  98. package/dist/Nodes/Queries/GetDistanceBetween.d.ts.map +1 -0
  99. package/dist/Nodes/Queries/GetDistanceBetween.js +30 -0
  100. package/dist/Nodes/Queries/GetDistanceBetween.js.map +1 -0
  101. package/dist/Nodes/Queries/GetLightProperty.d.ts +23 -0
  102. package/dist/Nodes/Queries/GetLightProperty.d.ts.map +1 -0
  103. package/dist/Nodes/Queries/GetLightProperty.js +68 -0
  104. package/dist/Nodes/Queries/GetLightProperty.js.map +1 -0
  105. package/dist/Nodes/Queries/GetMaterialProperty.d.ts +23 -0
  106. package/dist/Nodes/Queries/GetMaterialProperty.d.ts.map +1 -0
  107. package/dist/Nodes/Queries/GetMaterialProperty.js +69 -0
  108. package/dist/Nodes/Queries/GetMaterialProperty.js.map +1 -0
  109. package/dist/Nodes/Queries/GetMeshPosition.d.ts +16 -0
  110. package/dist/Nodes/Queries/GetMeshPosition.d.ts.map +1 -0
  111. package/dist/Nodes/Queries/GetMeshPosition.js +29 -0
  112. package/dist/Nodes/Queries/GetMeshPosition.js.map +1 -0
  113. package/dist/Nodes/Queries/GetSceneProperty.d.ts +10 -1
  114. package/dist/Nodes/Queries/GetSceneProperty.d.ts.map +1 -1
  115. package/dist/Nodes/Queries/GetSceneProperty.js +2 -2
  116. package/dist/Nodes/Queries/GetSceneProperty.js.map +1 -1
  117. package/dist/Values/Internal/Mat3.d.ts +1 -1
  118. package/dist/Values/Internal/Mat3.d.ts.map +1 -1
  119. package/dist/Values/Internal/Mat3.js +1 -3
  120. package/dist/Values/Internal/Mat3.js.map +1 -1
  121. package/dist/Values/Internal/Mat4.d.ts.map +1 -1
  122. package/dist/Values/Internal/Mat4.js +1 -3
  123. package/dist/Values/Internal/Mat4.js.map +1 -1
  124. package/dist/Values/Internal/Vec3.d.ts +1 -1
  125. package/dist/Values/Internal/Vec3.d.ts.map +1 -1
  126. package/dist/Values/Internal/Vec3.js +0 -2
  127. package/dist/Values/Internal/Vec3.js.map +1 -1
  128. package/dist/Values/Internal/Vec4.d.ts.map +1 -1
  129. package/dist/Values/Internal/Vec4.js +0 -1
  130. package/dist/Values/Internal/Vec4.js.map +1 -1
  131. package/dist/_virtual/rolldown_runtime.js +23 -1
  132. package/dist/behave-graph.manifest.json +6082 -0
  133. package/dist/buildScene.d.ts.map +1 -1
  134. package/dist/buildScene.js +24 -3
  135. package/dist/buildScene.js.map +1 -1
  136. package/dist/index.d.ts +29 -3
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +22 -4
  139. package/dist/manifest.source.d.ts +7 -0
  140. package/dist/manifest.source.d.ts.map +1 -0
  141. package/dist/manifest.source.js +54 -0
  142. package/dist/manifest.source.js.map +1 -0
  143. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js +207 -0
  144. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  145. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js +40 -0
  146. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
  147. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.development.js +766 -0
  148. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.development.js.map +1 -0
  149. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.production.js +367 -0
  150. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.production.js.map +1 -0
  151. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/index.js +15 -0
  152. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/index.js.map +1 -0
  153. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js +15 -0
  154. package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js.map +1 -0
  155. package/dist/packages/nodes/scene/package.js +7 -0
  156. package/dist/packages/nodes/scene/package.js.map +1 -0
  157. package/dist/registerSceneProfile.d.ts +3 -3
  158. package/dist/registerSceneProfile.d.ts.map +1 -1
  159. package/dist/registerSceneProfile.js +35 -1
  160. package/dist/registerSceneProfile.js.map +1 -1
  161. package/dist/ui/controls/vec3.d.ts +9 -0
  162. package/dist/ui/controls/vec3.d.ts.map +1 -0
  163. package/dist/ui/controls/vec3.js +99 -0
  164. package/dist/ui/controls/vec3.js.map +1 -0
  165. package/package.json +28 -9
  166. package/src/Abstractions/Drivers/DummyScene.ts +110 -2
  167. package/src/Abstractions/IScene.ts +74 -3
  168. package/src/Nodes/Actions/AddLight.ts +46 -0
  169. package/src/Nodes/Actions/CloneMesh.ts +31 -0
  170. package/src/Nodes/Actions/CreateMesh.ts +47 -0
  171. package/src/Nodes/Actions/DeleteMesh.ts +29 -0
  172. package/src/Nodes/Actions/EaseSceneProperty.ts +6 -2
  173. package/src/Nodes/Actions/LookAt.ts +34 -0
  174. package/src/Nodes/Actions/MoveTowards.ts +55 -0
  175. package/src/Nodes/Actions/RemoveLight.ts +29 -0
  176. package/src/Nodes/Actions/SetLightProperty.ts +60 -0
  177. package/src/Nodes/Actions/SetMaterialProperty.ts +62 -0
  178. package/src/Nodes/Actions/SetMeshPosition.ts +37 -0
  179. package/src/Nodes/Actions/SetMeshVisible.ts +31 -0
  180. package/src/Nodes/Actions/SetSceneProperty.ts +3 -5
  181. package/src/Nodes/Events/OnAnyMeshClicked.ts +48 -0
  182. package/src/Nodes/Events/OnSceneChanged.ts +43 -0
  183. package/src/Nodes/Events/OnSceneNodeClick.ts +3 -3
  184. package/src/Nodes/Logic/Mat3Nodes.ts +0 -10
  185. package/src/Nodes/Queries/GetDistanceBetween.ts +37 -0
  186. package/src/Nodes/Queries/GetLightProperty.ts +53 -0
  187. package/src/Nodes/Queries/GetMaterialProperty.ts +55 -0
  188. package/src/Nodes/Queries/GetMeshPosition.ts +32 -0
  189. package/src/Nodes/Queries/GetSceneProperty.ts +4 -5
  190. package/src/Values/Internal/Mat3.ts +3 -3
  191. package/src/Values/Internal/Mat4.ts +5 -4
  192. package/src/Values/Internal/Vec3.ts +5 -4
  193. package/src/Values/Internal/Vec4.ts +3 -2
  194. package/src/buildScene.ts +36 -2
  195. package/src/index.ts +26 -2
  196. package/src/manifest.source.ts +61 -0
  197. package/src/registerSceneProfile.ts +41 -4
  198. package/src/ui/controls/vec3.tsx +69 -0
  199. package/stories/click.stories.tsx +112 -0
  200. package/stories/components/DemoScene.ts +610 -0
  201. package/stories/components/SceneViewer.tsx +204 -0
  202. package/stories/components/SceneViewerPanel.tsx +41 -0
  203. package/stories/data/clickDemo.json +94 -0
  204. package/stories/data/rotate.json +402 -0
  205. package/stories/index.stories.tsx +90 -0
  206. package/stories/plugin/sceneViewerPlugin.tsx +88 -0
  207. package/tests/manifest.test.ts +65 -0
  208. package/tests/readSceneGraphs.test.ts +8 -1
  209. package/tests/registerSceneProfile.test.ts +6 -5
  210. package/tsconfig.json +18 -11
  211. package/tsdown.config.ts +5 -1
  212. package/vite.config.js +7 -0
  213. package/src/Values/Internal/Mat2.ts +0 -214
  214. package/src/loadScene.ts +0 -81
@@ -0,0 +1,7 @@
1
+ //#region package.json
2
+ var name = "@kiberon-labs/behave-graph-scene";
3
+ var version = "2.0.0";
4
+
5
+ //#endregion
6
+ export { name, version };
7
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","names":[],"sources":["../../../../package.json"],"sourcesContent":["{\n \"name\": \"@kiberon-labs/behave-graph-scene\",\n \"version\": \"2.0.0\",\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.js\",\n \"source\": \"./src/index.ts\",\n \"behaveGraph\": {\n \"manifest\": \"./dist/behave-graph.manifest.json\"\n },\n \"scripts\": {\n \"build\": \"tsdown && behave-graph-manifest dist/manifest.source.js --out dist\",\n \"release\": \"npm publish --dry-run\",\n \"check\": \"oxfmt --check\",\n \"format\": \"oxfmt\",\n \"test\": \"vitest\",\n \"dev\": \"tsdown --watch src\",\n \"lint\": \"oxlint\",\n \"typecheck\": \"tsc --noEmit\",\n \"storybook\": \"storybook dev -p 6006\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Kiberon-Labs/behave-graph\",\n \"directory\": \"packages/nodes/scene\"\n },\n \"bugs\": \"https://github.com/Kiberon-Labs/behave-graph/issues\",\n \"devDependencies\": {\n \"@kiberon-labs/behave-graph-flow\": \"workspace:*\",\n \"@storybook/addon-a11y\": \"^10.0.8\",\n \"@storybook/addon-docs\": \"^10.0.8\",\n \"@storybook/addon-vitest\": \"^10.0.8\",\n \"@storybook/react-vite\": \"^10.0.8\",\n \"@types/glob\": \"^8.0.0\",\n \"@types/node\": \"^24.10.1\",\n \"@types/offscreencanvas\": \"^2019.7.0\",\n \"@types/react\": \"^19.2.6\",\n \"@types/three\": \"0.152.1\",\n \"oxfmt\": \"^0.14.0\",\n \"oxlint\": \"^1.29.0\",\n \"react\": \"19.2.4\",\n \"storybook\": \"^10.0.8\",\n \"tsdown\": \"^0.16.5\",\n \"vite\": \"^7.2.4\",\n \"vite-tsconfig-paths\": \"^5.1.4\",\n \"react-dom\": \"19.2.4\",\n \"vitest\": \"^4.0.10\"\n },\n \"author\": \"kiberonlabsdev\",\n \"license\": \"ISC\",\n \"peerDependencies\": {\n \"@kiberon-labs/behave-graph\": \"workspace:*\",\n \"three\": \"0.152.2\",\n \"three-stdlib\": \"^2.22.4\"\n },\n \"publishConfig\": {\n \"provenance\": true,\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@vscode-elements/react-elements\": \"^2.4.0\"\n }\n}"],"mappings":";WACU;cACG"}
@@ -1,9 +1,9 @@
1
- import { IRegistry, NodeDefinition, ValueType } from "@kiberon-labs/behave-graph";
1
+ import { IRegistry, NodeDefinition, ValueType, ValueTypeMap } from "@kiberon-labs/behave-graph";
2
2
 
3
3
  //#region src/registerSceneProfile.d.ts
4
- declare const getSceneValuesMap: any;
4
+ declare const getSceneValuesMap: () => ValueTypeMap;
5
5
  declare const getSceneStringConversions: (values: Record<string, ValueType>) => NodeDefinition[];
6
- declare const getSceneNodesMap: any;
6
+ declare const getSceneNodesMap: () => Record<string, NodeDefinition>;
7
7
  declare const registerSceneProfile: (registry: IRegistry) => IRegistry;
8
8
  //#endregion
9
9
  export { getSceneNodesMap, getSceneStringConversions, getSceneValuesMap, registerSceneProfile };
@@ -1 +1 @@
1
- {"version":3,"file":"registerSceneProfile.d.ts","names":[],"sources":["../src/registerSceneProfile.ts"],"sourcesContent":[],"mappings":";;;cAiCa;cAiBA,oCACH,eAAe,eACtB;AAnBU,cAwBA,gBATX,EAAA,GAAA;AAEW,cAyCA,oBApCV,EAAA,CAAA,QAAA,EAoC4C,SApC5C,EAAA,GAoCwD,SApCxD"}
1
+ {"version":3,"file":"registerSceneProfile.d.ts","names":[],"sources":["../src/registerSceneProfile.ts"],"sourcesContent":[],"mappings":";;;cAkDa,yBAAiB;cAiBjB,oCACH,eAAe,eACtB;AAnBU,cAwBA,gBAxBiB,EAAA,GAAA,GAwBD,MAT3B,CAAA,MAAA,EAS2B,cAT3B,CAAA;AAEW,cA+DA,oBA1DV,EAAA,CAAA,QAAA,EA0D4C,SA1D5C,EAAA,GA0DwD,SA1DxD"}
@@ -6,7 +6,20 @@ import { Vec3Value } from "./Values/Vec3Value.js";
6
6
  import { Vec4Value } from "./Values/Vec4Value.js";
7
7
  import { Mat3Value } from "./Values/Mat3Value.js";
8
8
  import { Mat4Value } from "./Values/Mat4Value.js";
9
+ import { AddLight } from "./Nodes/Actions/AddLight.js";
10
+ import { CloneMesh } from "./Nodes/Actions/CloneMesh.js";
11
+ import { CreateMesh } from "./Nodes/Actions/CreateMesh.js";
12
+ import { DeleteMesh } from "./Nodes/Actions/DeleteMesh.js";
13
+ import { LookAt } from "./Nodes/Actions/LookAt.js";
14
+ import { MoveTowards } from "./Nodes/Actions/MoveTowards.js";
15
+ import { RemoveLight } from "./Nodes/Actions/RemoveLight.js";
16
+ import { SetLightProperty } from "./Nodes/Actions/SetLightProperty.js";
17
+ import { SetMaterialProperty } from "./Nodes/Actions/SetMaterialProperty.js";
18
+ import { SetMeshPosition } from "./Nodes/Actions/SetMeshPosition.js";
19
+ import { SetMeshVisible } from "./Nodes/Actions/SetMeshVisible.js";
9
20
  import { SetSceneProperty } from "./Nodes/Actions/SetSceneProperty.js";
21
+ import { OnAnyMeshClicked } from "./Nodes/Events/OnAnyMeshClicked.js";
22
+ import { OnSceneChanged } from "./Nodes/Events/OnSceneChanged.js";
10
23
  import { OnSceneNodeClick } from "./Nodes/Events/OnSceneNodeClick.js";
11
24
  import { ColorNodes_exports } from "./Nodes/Logic/ColorNodes.js";
12
25
  import { EulerNodes_exports } from "./Nodes/Logic/EulerNodes.js";
@@ -16,6 +29,10 @@ import { Vec2Nodes_exports } from "./Nodes/Logic/Vec2Nodes.js";
16
29
  import { Vec3Nodes_exports } from "./Nodes/Logic/Vec3Nodes.js";
17
30
  import { Vec4Nodes_exports } from "./Nodes/Logic/Vec4Nodes.js";
18
31
  import { QuatNodes_exports } from "./Nodes/Logic/QuatNodes.js";
32
+ import { GetDistanceBetween } from "./Nodes/Queries/GetDistanceBetween.js";
33
+ import { GetLightProperty } from "./Nodes/Queries/GetLightProperty.js";
34
+ import { GetMaterialProperty } from "./Nodes/Queries/GetMaterialProperty.js";
35
+ import { GetMeshPosition } from "./Nodes/Queries/GetMeshPosition.js";
19
36
  import { GetSceneProperty } from "./Nodes/Queries/GetSceneProperty.js";
20
37
  import { getCoreValuesMap, getNodeDescriptions, getStringConversionsForValueType, memo } from "@kiberon-labs/behave-graph";
21
38
 
@@ -52,8 +69,25 @@ const getSceneNodesMap = memo(() => {
52
69
  ...getNodeDescriptions(Mat3Nodes_exports),
53
70
  ...getNodeDescriptions(Mat4Nodes_exports),
54
71
  OnSceneNodeClick,
72
+ OnSceneChanged,
73
+ OnAnyMeshClicked,
55
74
  ...SetSceneProperty(allValueTypeNames),
75
+ CreateMesh,
76
+ DeleteMesh,
77
+ CloneMesh,
78
+ MoveTowards,
79
+ LookAt,
80
+ SetMeshPosition,
81
+ SetMeshVisible,
82
+ AddLight,
83
+ RemoveLight,
84
+ SetLightProperty,
85
+ SetMaterialProperty,
56
86
  ...GetSceneProperty(allValueTypeNames),
87
+ GetLightProperty,
88
+ GetMaterialProperty,
89
+ GetMeshPosition,
90
+ GetDistanceBetween,
57
91
  ...getSceneStringConversions(getSceneValuesMap())
58
92
  ];
59
93
  return Object.fromEntries(nodeDefinitions.map((nodeDefinition) => [nodeDefinition.typeName, nodeDefinition]));
@@ -69,7 +103,7 @@ const registerSceneProfile = (registry) => {
69
103
  ...registry.nodes,
70
104
  ...getSceneNodesMap()
71
105
  },
72
- dependencies: { ...registry.dependencies }
106
+ dependencies: registry.dependencies
73
107
  };
74
108
  };
75
109
 
@@ -1 +1 @@
1
- {"version":3,"file":"registerSceneProfile.js","names":["Vec2Nodes","Vec3Nodes","Vec4Nodes","ColorNodes","EulerNodes","QuatNodes","Mat3Nodes","Mat4Nodes"],"sources":["../src/registerSceneProfile.ts"],"sourcesContent":["import {\n getCoreValuesMap,\n getNodeDescriptions,\n getStringConversionsForValueType,\n memo\n} from '@kiberon-labs/behave-graph';\nimport type {\n IRegistry,\n NodeDefinition,\n ValueType,\n ValueTypeMap\n} from '@kiberon-labs/behave-graph';\n\nimport { SetSceneProperty } from './Nodes/Actions/SetSceneProperty.js';\nimport { OnSceneNodeClick } from './Nodes/Events/OnSceneNodeClick.js';\nimport * as ColorNodes from './Nodes/Logic/ColorNodes.js';\nimport * as EulerNodes from './Nodes/Logic/EulerNodes.js';\nimport * as Mat3Nodes from './Nodes/Logic/Mat3Nodes.js';\nimport * as Mat4Nodes from './Nodes/Logic/Mat4Nodes.js';\nimport * as QuatNodes from './Nodes/Logic/QuatNodes.js';\nimport * as Vec2Nodes from './Nodes/Logic/Vec2Nodes.js';\nimport * as Vec3Nodes from './Nodes/Logic/Vec3Nodes.js';\nimport * as Vec4Nodes from './Nodes/Logic/Vec4Nodes.js';\nimport { GetSceneProperty } from './Nodes/Queries/GetSceneProperty.js';\nimport { ColorValue } from './Values/ColorValue.js';\nimport { EulerValue } from './Values/EulerValue.js';\nimport { Mat3Value } from './Values/Mat3Value.js';\nimport { Mat4Value } from './Values/Mat4Value.js';\nimport { QuatValue } from './Values/QuatValue.js';\nimport { Vec2Value } from './Values/Vec2Value.js';\nimport { Vec3Value } from './Values/Vec3Value.js';\nimport { Vec4Value } from './Values/Vec4Value.js';\n\nexport const getSceneValuesMap = memo<ValueTypeMap>(() => {\n const valueTypes = [\n Vec2Value,\n Vec3Value,\n Vec4Value,\n ColorValue,\n EulerValue,\n QuatValue,\n Mat3Value,\n Mat4Value\n ];\n const temp = Object.fromEntries(\n valueTypes.map((valueType) => [valueType.name, valueType])\n );\n return temp;\n});\n\nexport const getSceneStringConversions = (\n values: Record<string, ValueType>\n): NodeDefinition[] =>\n Object.keys(values).flatMap((valueTypeName) =>\n getStringConversionsForValueType({ values, valueTypeName })\n );\n\nexport const getSceneNodesMap = memo<Record<string, NodeDefinition>>(() => {\n const allValueTypeNames = Object.keys({\n ...getCoreValuesMap(),\n ...getSceneValuesMap()\n });\n\n const nodeDefinitions = [\n // pull in value type nodes\n ...getNodeDescriptions(Vec2Nodes),\n ...getNodeDescriptions(Vec3Nodes),\n ...getNodeDescriptions(Vec4Nodes),\n ...getNodeDescriptions(ColorNodes),\n ...getNodeDescriptions(EulerNodes),\n ...getNodeDescriptions(QuatNodes),\n ...getNodeDescriptions(Mat3Nodes),\n ...getNodeDescriptions(Mat4Nodes),\n\n // events\n OnSceneNodeClick,\n // actions\n ...SetSceneProperty(allValueTypeNames),\n ...GetSceneProperty(allValueTypeNames),\n\n ...getSceneStringConversions(getSceneValuesMap())\n ];\n\n return Object.fromEntries(\n nodeDefinitions.map((nodeDefinition) => [\n nodeDefinition.typeName,\n nodeDefinition\n ])\n );\n});\n\nexport const registerSceneProfile = (registry: IRegistry): IRegistry => {\n const values = {\n ...registry.values,\n ...getCoreValuesMap(),\n ...getSceneValuesMap()\n };\n return {\n values,\n nodes: { ...registry.nodes, ...getSceneNodesMap() },\n dependencies: {\n ...registry.dependencies\n }\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,oBAAoB,WAAyB;CACxD,MAAM,aAAa;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAID,QAHa,OAAO,YAClB,WAAW,KAAK,cAAc,CAAC,UAAU,MAAM,UAAU,CAAC,CAC3D;EAED;AAEF,MAAa,6BACX,WAEA,OAAO,KAAK,OAAO,CAAC,SAAS,kBAC3B,iCAAiC;CAAE;CAAQ;CAAe,CAAC,CAC5D;AAEH,MAAa,mBAAmB,WAA2C;CACzE,MAAM,oBAAoB,OAAO,KAAK;EACpC,GAAG,kBAAkB;EACrB,GAAG,mBAAmB;EACvB,CAAC;CAEF,MAAM,kBAAkB;EAEtB,GAAG,oBAAoBA,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,mBAAW;EAClC,GAAG,oBAAoBC,mBAAW;EAClC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EAGjC;EAEA,GAAG,iBAAiB,kBAAkB;EACtC,GAAG,iBAAiB,kBAAkB;EAEtC,GAAG,0BAA0B,mBAAmB,CAAC;EAClD;AAED,QAAO,OAAO,YACZ,gBAAgB,KAAK,mBAAmB,CACtC,eAAe,UACf,eACD,CAAC,CACH;EACD;AAEF,MAAa,wBAAwB,aAAmC;AAMtE,QAAO;EACL,QANa;GACb,GAAG,SAAS;GACZ,GAAG,kBAAkB;GACrB,GAAG,mBAAmB;GACvB;EAGC,OAAO;GAAE,GAAG,SAAS;GAAO,GAAG,kBAAkB;GAAE;EACnD,cAAc,EACZ,GAAG,SAAS,cACb;EACF"}
1
+ {"version":3,"file":"registerSceneProfile.js","names":["Vec2Nodes","Vec3Nodes","Vec4Nodes","ColorNodes","EulerNodes","QuatNodes","Mat3Nodes","Mat4Nodes"],"sources":["../src/registerSceneProfile.ts"],"sourcesContent":["import {\n getCoreValuesMap,\n getNodeDescriptions,\n getStringConversionsForValueType,\n memo\n} from '@kiberon-labs/behave-graph';\nimport type {\n IRegistry,\n NodeDefinition,\n ValueType,\n ValueTypeMap\n} from '@kiberon-labs/behave-graph';\n\nimport { AddLight } from './Nodes/Actions/AddLight.js';\nimport { CloneMesh } from './Nodes/Actions/CloneMesh.js';\nimport { CreateMesh } from './Nodes/Actions/CreateMesh.js';\nimport { DeleteMesh } from './Nodes/Actions/DeleteMesh.js';\nimport { LookAt } from './Nodes/Actions/LookAt.js';\nimport { MoveTowards } from './Nodes/Actions/MoveTowards.js';\nimport { RemoveLight } from './Nodes/Actions/RemoveLight.js';\nimport { SetLightProperty } from './Nodes/Actions/SetLightProperty.js';\nimport { SetMaterialProperty } from './Nodes/Actions/SetMaterialProperty.js';\nimport { SetMeshPosition } from './Nodes/Actions/SetMeshPosition.js';\nimport { SetMeshVisible } from './Nodes/Actions/SetMeshVisible.js';\nimport { SetSceneProperty } from './Nodes/Actions/SetSceneProperty.js';\nimport { OnAnyMeshClicked } from './Nodes/Events/OnAnyMeshClicked.js';\nimport { OnSceneChanged } from './Nodes/Events/OnSceneChanged.js';\nimport { OnSceneNodeClick } from './Nodes/Events/OnSceneNodeClick.js';\nimport * as ColorNodes from './Nodes/Logic/ColorNodes.js';\nimport * as EulerNodes from './Nodes/Logic/EulerNodes.js';\nimport * as Mat3Nodes from './Nodes/Logic/Mat3Nodes.js';\nimport * as Mat4Nodes from './Nodes/Logic/Mat4Nodes.js';\nimport * as QuatNodes from './Nodes/Logic/QuatNodes.js';\nimport * as Vec2Nodes from './Nodes/Logic/Vec2Nodes.js';\nimport * as Vec3Nodes from './Nodes/Logic/Vec3Nodes.js';\nimport * as Vec4Nodes from './Nodes/Logic/Vec4Nodes.js';\nimport { GetDistanceBetween } from './Nodes/Queries/GetDistanceBetween.js';\nimport { GetLightProperty } from './Nodes/Queries/GetLightProperty.js';\nimport { GetMaterialProperty } from './Nodes/Queries/GetMaterialProperty.js';\nimport { GetMeshPosition } from './Nodes/Queries/GetMeshPosition.js';\nimport { GetSceneProperty } from './Nodes/Queries/GetSceneProperty.js';\nimport { ColorValue } from './Values/ColorValue.js';\nimport { EulerValue } from './Values/EulerValue.js';\nimport { Mat3Value } from './Values/Mat3Value.js';\nimport { Mat4Value } from './Values/Mat4Value.js';\nimport { QuatValue } from './Values/QuatValue.js';\nimport { Vec2Value } from './Values/Vec2Value.js';\nimport { Vec3Value } from './Values/Vec3Value.js';\nimport { Vec4Value } from './Values/Vec4Value.js';\n\nexport const getSceneValuesMap = memo<ValueTypeMap>(() => {\n const valueTypes = [\n Vec2Value,\n Vec3Value,\n Vec4Value,\n ColorValue,\n EulerValue,\n QuatValue,\n Mat3Value,\n Mat4Value\n ];\n const temp = Object.fromEntries(\n valueTypes.map((valueType) => [valueType.name, valueType])\n );\n return temp;\n});\n\nexport const getSceneStringConversions = (\n values: Record<string, ValueType>\n): NodeDefinition[] =>\n Object.keys(values).flatMap((valueTypeName) =>\n getStringConversionsForValueType({ values, valueTypeName })\n );\n\nexport const getSceneNodesMap = memo<Record<string, NodeDefinition>>(() => {\n const allValueTypeNames = Object.keys({\n ...getCoreValuesMap(),\n ...getSceneValuesMap()\n });\n\n const nodeDefinitions = [\n // pull in value type nodes\n ...getNodeDescriptions(Vec2Nodes),\n ...getNodeDescriptions(Vec3Nodes),\n ...getNodeDescriptions(Vec4Nodes),\n ...getNodeDescriptions(ColorNodes),\n ...getNodeDescriptions(EulerNodes),\n ...getNodeDescriptions(QuatNodes),\n ...getNodeDescriptions(Mat3Nodes),\n ...getNodeDescriptions(Mat4Nodes),\n\n // events\n OnSceneNodeClick,\n OnSceneChanged,\n OnAnyMeshClicked,\n // actions - property\n ...SetSceneProperty(allValueTypeNames),\n // actions - mesh lifecycle\n CreateMesh,\n DeleteMesh,\n CloneMesh,\n // actions - spatial\n MoveTowards,\n LookAt,\n SetMeshPosition,\n SetMeshVisible,\n // actions - lighting\n AddLight,\n RemoveLight,\n SetLightProperty,\n // actions - material\n SetMaterialProperty,\n // queries\n ...GetSceneProperty(allValueTypeNames),\n GetLightProperty,\n GetMaterialProperty,\n GetMeshPosition,\n GetDistanceBetween,\n\n ...getSceneStringConversions(getSceneValuesMap())\n ];\n\n return Object.fromEntries(\n nodeDefinitions.map((nodeDefinition) => [\n nodeDefinition.typeName,\n nodeDefinition\n ])\n );\n});\n\nexport const registerSceneProfile = (registry: IRegistry): IRegistry => {\n const values = {\n ...registry.values,\n ...getCoreValuesMap(),\n ...getSceneValuesMap()\n };\n return {\n values,\n nodes: { ...registry.nodes, ...getSceneNodesMap() },\n dependencies: registry.dependencies\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,MAAa,oBAAoB,WAAyB;CACxD,MAAM,aAAa;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAID,QAHa,OAAO,YAClB,WAAW,KAAK,cAAc,CAAC,UAAU,MAAM,UAAU,CAAC,CAC3D;EAED;AAEF,MAAa,6BACX,WAEA,OAAO,KAAK,OAAO,CAAC,SAAS,kBAC3B,iCAAiC;CAAE;CAAQ;CAAe,CAAC,CAC5D;AAEH,MAAa,mBAAmB,WAA2C;CACzE,MAAM,oBAAoB,OAAO,KAAK;EACpC,GAAG,kBAAkB;EACrB,GAAG,mBAAmB;EACvB,CAAC;CAEF,MAAM,kBAAkB;EAEtB,GAAG,oBAAoBA,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,mBAAW;EAClC,GAAG,oBAAoBC,mBAAW;EAClC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EACjC,GAAG,oBAAoBC,kBAAU;EAGjC;EACA;EACA;EAEA,GAAG,iBAAiB,kBAAkB;EAEtC;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EAEA,GAAG,iBAAiB,kBAAkB;EACtC;EACA;EACA;EACA;EAEA,GAAG,0BAA0B,mBAAmB,CAAC;EAClD;AAED,QAAO,OAAO,YACZ,gBAAgB,KAAK,mBAAmB,CACtC,eAAe,UACf,eACD,CAAC,CACH;EACD;AAEF,MAAa,wBAAwB,aAAmC;AAMtE,QAAO;EACL,QANa;GACb,GAAG,SAAS;GACZ,GAAG,kBAAkB;GACrB,GAAG,mBAAmB;GACvB;EAGC,OAAO;GAAE,GAAG,SAAS;GAAO,GAAG,kBAAkB;GAAE;EACnD,cAAc,SAAS;EACxB"}
@@ -0,0 +1,9 @@
1
+ import { Vec3JSON } from "../../Values/Internal/Vec3.js";
2
+ import React from "react";
3
+ import { ControlProps } from "@kiberon-labs/behave-graph-flow";
4
+
5
+ //#region src/ui/controls/vec3.d.ts
6
+ declare const Vec3Control: React.FC<ControlProps<Vec3JSON>>;
7
+ //#endregion
8
+ export { Vec3Control };
9
+ //# sourceMappingURL=vec3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vec3.d.ts","names":[],"sources":["../../../src/ui/controls/vec3.tsx"],"sourcesContent":[],"mappings":";;;;;cAgBa,aAAa,KAAA,CAAM,GAAG,aAAa"}
@@ -0,0 +1,99 @@
1
+ import { __toESM } from "../../_virtual/rolldown_runtime.js";
2
+ import { require_react } from "../../node_modules/.pnpm/react@19.2.3/node_modules/react/index.js";
3
+ import { require_jsx_runtime } from "../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js";
4
+ import { VscodeTextfield } from "@vscode-elements/react-elements";
5
+
6
+ //#region src/ui/controls/vec3.tsx
7
+ var import_react = /* @__PURE__ */ __toESM(require_react());
8
+ var import_jsx_runtime = require_jsx_runtime();
9
+ const readNumber = (e) => {
10
+ const stringValue = e.currentTarget.value;
11
+ const num = parseFloat(stringValue);
12
+ return isNaN(num) ? void 0 : num;
13
+ };
14
+ const Vec3Control = ({ value, onChange }) => {
15
+ const vec = value ?? [
16
+ 0,
17
+ 0,
18
+ 0
19
+ ];
20
+ const handleChangeX = (e) => {
21
+ const num = readNumber(e);
22
+ if (num !== void 0) onChange([
23
+ num,
24
+ vec[1],
25
+ vec[2]
26
+ ]);
27
+ };
28
+ const handleChangeY = (e) => {
29
+ const num = readNumber(e);
30
+ if (num !== void 0) onChange([
31
+ vec[0],
32
+ num,
33
+ vec[2]
34
+ ]);
35
+ };
36
+ const handleChangeZ = (e) => {
37
+ const num = readNumber(e);
38
+ if (num !== void 0) onChange([
39
+ vec[0],
40
+ vec[1],
41
+ num
42
+ ]);
43
+ };
44
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
45
+ style: {
46
+ display: "flex",
47
+ gap: "4px",
48
+ alignItems: "center"
49
+ },
50
+ children: [
51
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
52
+ style: {
53
+ fontSize: "11px",
54
+ opacity: .7,
55
+ minWidth: "12px"
56
+ },
57
+ children: "X"
58
+ }),
59
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VscodeTextfield, {
60
+ type: "number",
61
+ value: vec[0].toString(),
62
+ onChange: handleChangeX,
63
+ style: { flex: 1 }
64
+ }),
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
66
+ style: {
67
+ fontSize: "11px",
68
+ opacity: .7,
69
+ minWidth: "12px"
70
+ },
71
+ children: "Y"
72
+ }),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VscodeTextfield, {
74
+ type: "number",
75
+ value: vec[1].toString(),
76
+ onChange: handleChangeY,
77
+ style: { flex: 1 }
78
+ }),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
80
+ style: {
81
+ fontSize: "11px",
82
+ opacity: .7,
83
+ minWidth: "12px"
84
+ },
85
+ children: "Z"
86
+ }),
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VscodeTextfield, {
88
+ type: "number",
89
+ value: vec[2].toString(),
90
+ onChange: handleChangeZ,
91
+ style: { flex: 1 }
92
+ })
93
+ ]
94
+ });
95
+ };
96
+
97
+ //#endregion
98
+ export { Vec3Control };
99
+ //# sourceMappingURL=vec3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vec3.js","names":["Vec3Control: React.FC<ControlProps<Vec3JSON>>"],"sources":["../../../src/ui/controls/vec3.tsx"],"sourcesContent":["import React from 'react';\n\nimport { VscodeTextfield } from '@vscode-elements/react-elements';\nimport type { ControlProps } from '@kiberon-labs/behave-graph-flow';\nimport type { Vec3JSON } from '@/Values/Internal/Vec3';\n\n// The @vscode-elements/react-elements typings surface the underlying custom\n// element's DOM events, so its `onChange` hands back a plain `Event`. Pull the\n// value out via the input target (same hack the flow number control uses).\nconst readNumber = (e: Event): number | undefined => {\n const stringValue = (e as unknown as React.ChangeEvent<HTMLInputElement>)\n .currentTarget.value;\n const num = parseFloat(stringValue);\n return isNaN(num) ? undefined : num;\n};\n\nexport const Vec3Control: React.FC<ControlProps<Vec3JSON>> = ({\n value,\n onChange\n}) => {\n const vec = value ?? [0, 0, 0];\n\n const handleChangeX = (e: Event) => {\n const num = readNumber(e);\n if (num !== undefined) onChange([num, vec[1], vec[2]]);\n };\n\n const handleChangeY = (e: Event) => {\n const num = readNumber(e);\n if (num !== undefined) onChange([vec[0], num, vec[2]]);\n };\n\n const handleChangeZ = (e: Event) => {\n const num = readNumber(e);\n if (num !== undefined) onChange([vec[0], vec[1], num]);\n };\n\n return (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <label style={{ fontSize: '11px', opacity: 0.7, minWidth: '12px' }}>\n X\n </label>\n <VscodeTextfield\n type=\"number\"\n value={vec[0].toString()}\n onChange={handleChangeX}\n style={{ flex: 1 }}\n />\n <label style={{ fontSize: '11px', opacity: 0.7, minWidth: '12px' }}>\n Y\n </label>\n <VscodeTextfield\n type=\"number\"\n value={vec[1].toString()}\n onChange={handleChangeY}\n style={{ flex: 1 }}\n />\n <label style={{ fontSize: '11px', opacity: 0.7, minWidth: '12px' }}>\n Z\n </label>\n <VscodeTextfield\n type=\"number\"\n value={vec[2].toString()}\n onChange={handleChangeZ}\n style={{ flex: 1 }}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;;AASA,MAAM,cAAc,MAAiC;CACnD,MAAM,cAAe,EAClB,cAAc;CACjB,MAAM,MAAM,WAAW,YAAY;AACnC,QAAO,MAAM,IAAI,GAAG,SAAY;;AAGlC,MAAaA,eAAiD,EAC5D,OACA,eACI;CACJ,MAAM,MAAM,SAAS;EAAC;EAAG;EAAG;EAAE;CAE9B,MAAM,iBAAiB,MAAa;EAClC,MAAM,MAAM,WAAW,EAAE;AACzB,MAAI,QAAQ,OAAW,UAAS;GAAC;GAAK,IAAI;GAAI,IAAI;GAAG,CAAC;;CAGxD,MAAM,iBAAiB,MAAa;EAClC,MAAM,MAAM,WAAW,EAAE;AACzB,MAAI,QAAQ,OAAW,UAAS;GAAC,IAAI;GAAI;GAAK,IAAI;GAAG,CAAC;;CAGxD,MAAM,iBAAiB,MAAa;EAClC,MAAM,MAAM,WAAW,EAAE;AACzB,MAAI,QAAQ,OAAW,UAAS;GAAC,IAAI;GAAI,IAAI;GAAI;GAAI,CAAC;;AAGxD,QACE,6CAAC;EAAI,OAAO;GAAE,SAAS;GAAQ,KAAK;GAAO,YAAY;GAAU;;GAC/D,4CAAC;IAAM,OAAO;KAAE,UAAU;KAAQ,SAAS;KAAK,UAAU;KAAQ;cAAE;KAE5D;GACR,4CAAC;IACC,MAAK;IACL,OAAO,IAAI,GAAG,UAAU;IACxB,UAAU;IACV,OAAO,EAAE,MAAM,GAAG;KAClB;GACF,4CAAC;IAAM,OAAO;KAAE,UAAU;KAAQ,SAAS;KAAK,UAAU;KAAQ;cAAE;KAE5D;GACR,4CAAC;IACC,MAAK;IACL,OAAO,IAAI,GAAG,UAAU;IACxB,UAAU;IACV,OAAO,EAAE,MAAM,GAAG;KAClB;GACF,4CAAC;IAAM,OAAO;KAAE,UAAU;KAAQ,SAAS;KAAK,UAAU;KAAQ;cAAE;KAE5D;GACR,4CAAC;IACC,MAAK;IACL,OAAO,IAAI,GAAG,UAAU;IACxB,UAAU;IACV,OAAO,EAAE,MAAM,GAAG;KAClB;;GACE"}
package/package.json CHANGED
@@ -1,44 +1,63 @@
1
1
  {
2
2
  "name": "@kiberon-labs/behave-graph-scene",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
7
7
  "source": "./src/index.ts",
8
+ "behaveGraph": {
9
+ "manifest": "./dist/behave-graph.manifest.json"
10
+ },
8
11
  "repository": {
9
12
  "type": "git",
10
13
  "url": "https://github.com/Kiberon-Labs/behave-graph",
11
- "directory": "packages/scene"
14
+ "directory": "packages/nodes/scene"
12
15
  },
13
- "bugs": "https://github.com/kiberon-labs/behave-graph/issues",
16
+ "bugs": "https://github.com/Kiberon-Labs/behave-graph/issues",
14
17
  "devDependencies": {
18
+ "@storybook/addon-a11y": "^10.0.8",
19
+ "@storybook/addon-docs": "^10.0.8",
20
+ "@storybook/addon-vitest": "^10.0.8",
21
+ "@storybook/react-vite": "^10.0.8",
15
22
  "@types/glob": "^8.0.0",
16
23
  "@types/node": "^24.10.1",
17
24
  "@types/offscreencanvas": "^2019.7.0",
25
+ "@types/react": "^19.2.6",
18
26
  "@types/three": "0.152.1",
19
27
  "oxfmt": "^0.14.0",
20
28
  "oxlint": "^1.29.0",
29
+ "react": "19.2.4",
30
+ "storybook": "^10.0.8",
21
31
  "tsdown": "^0.16.5",
22
- "vitest": "^4.0.10"
32
+ "vite": "^7.2.4",
33
+ "vite-tsconfig-paths": "^5.1.4",
34
+ "react-dom": "19.2.4",
35
+ "vitest": "^4.0.10",
36
+ "@kiberon-labs/behave-graph-flow": "3.0.0"
23
37
  },
24
- "dependencies": {},
38
+ "author": "kiberonlabsdev",
25
39
  "license": "ISC",
26
40
  "peerDependencies": {
27
- "@kiberon-labs/behave-graph": "*",
28
41
  "three": "0.152.2",
29
- "three-stdlib": "^2.22.4"
42
+ "three-stdlib": "^2.22.4",
43
+ "@kiberon-labs/behave-graph": "1.2.0"
30
44
  },
31
45
  "publishConfig": {
32
46
  "provenance": true,
33
47
  "access": "public"
34
48
  },
49
+ "dependencies": {
50
+ "@vscode-elements/react-elements": "^2.4.0"
51
+ },
35
52
  "scripts": {
36
- "build": "tsdown",
53
+ "build": "tsdown && behave-graph-manifest dist/manifest.source.js --out dist",
54
+ "release": "npm publish --dry-run",
37
55
  "check": "oxfmt --check",
38
56
  "format": "oxfmt",
39
57
  "test": "vitest",
40
58
  "dev": "tsdown --watch src",
41
59
  "lint": "oxlint",
42
- "typecheck": "tsc"
60
+ "typecheck": "tsc --noEmit",
61
+ "storybook": "storybook dev -p 6006"
43
62
  }
44
63
  }
@@ -13,7 +13,7 @@ import { QuatValue } from '../../Values/QuatValue.js';
13
13
  import { Vec2Value } from '../../Values/Vec2Value.js';
14
14
  import { Vec3Value } from '../../Values/Vec3Value.js';
15
15
  import { Vec4Value } from '../../Values/Vec4Value.js';
16
- import type { IScene } from '../IScene.js';
16
+ import type { GeometryType, IScene, LightType } from '../IScene.js';
17
17
 
18
18
  export class DummyScene implements IScene {
19
19
  public onSceneChanged = new EventEmitter<void>();
@@ -38,7 +38,7 @@ export class DummyScene implements IScene {
38
38
  // pull in value type nodes
39
39
  }
40
40
 
41
- getProperty(jsonPath: string, valueTypeName: string): any {
41
+ getProperty(jsonPath: string, valueTypeName: string): unknown {
42
42
  return this.valueRegistry[valueTypeName]?.creator();
43
43
  }
44
44
  setProperty(): void {
@@ -76,4 +76,112 @@ export class DummyScene implements IScene {
76
76
  removeOnSceneChangedListener(): void {
77
77
  console.log('removed on scene changed listener');
78
78
  }
79
+
80
+ // --- mesh lifecycle ---
81
+ createMesh(
82
+ _name: string,
83
+ _geometryType: GeometryType,
84
+ _size: { x: number; y: number; z: number }
85
+ ): void {
86
+ console.log('created mesh (dummy)');
87
+ }
88
+
89
+ deleteMesh(_name: string): void {
90
+ console.log('deleted mesh (dummy)');
91
+ }
92
+
93
+ getMeshNames() {
94
+ return [];
95
+ }
96
+
97
+ // --- lighting ---
98
+ addLight(
99
+ _name: string,
100
+ _lightType: LightType,
101
+ _color: { r: number; g: number; b: number },
102
+ _intensity: number
103
+ ): void {
104
+ console.log('added light (dummy)');
105
+ }
106
+
107
+ removeLight(_name: string): void {
108
+ console.log('removed light (dummy)');
109
+ }
110
+
111
+ setLightProperty(_name: string, _property: string, _value: unknown): void {
112
+ console.log('set light property (dummy)');
113
+ }
114
+
115
+ getLightProperty(_name: string, _property: string): unknown {
116
+ return undefined;
117
+ }
118
+
119
+ getLightNames() {
120
+ return [];
121
+ }
122
+
123
+ // --- material ---
124
+ setMaterialProperty(
125
+ _meshName: string,
126
+ _property: string,
127
+ _value: unknown
128
+ ): void {
129
+ console.log('set material property (dummy)');
130
+ }
131
+
132
+ getMaterialProperty(_meshName: string, _property: string): unknown {
133
+ return undefined;
134
+ }
135
+
136
+ // --- global click ---
137
+ addOnAnyMeshClickedListener(_callback: (meshName: string) => void): void {
138
+ console.log('added on any mesh clicked listener (dummy)');
139
+ }
140
+
141
+ removeOnAnyMeshClickedListener(_callback: (meshName: string) => void): void {
142
+ console.log('removed on any mesh clicked listener (dummy)');
143
+ }
144
+
145
+ // --- spatial helpers ---
146
+ getMeshPosition(
147
+ _meshName: string
148
+ ): { x: number; y: number; z: number } | undefined {
149
+ return { x: 0, y: 0, z: 0 };
150
+ }
151
+
152
+ setMeshPosition(
153
+ _meshName: string,
154
+ _position: { x: number; y: number; z: number }
155
+ ): void {
156
+ console.log('set mesh position (dummy)');
157
+ }
158
+
159
+ getDistanceBetween(_meshA: string, _meshB: string): number {
160
+ return 0;
161
+ }
162
+
163
+ lookAt(
164
+ _meshName: string,
165
+ _target: { x: number; y: number; z: number }
166
+ ): void {
167
+ console.log('lookAt (dummy)');
168
+ }
169
+
170
+ moveTowards(
171
+ _meshName: string,
172
+ _target: { x: number; y: number; z: number },
173
+ _speed: number,
174
+ _deltaSeconds: number
175
+ ): boolean {
176
+ return true;
177
+ }
178
+
179
+ // --- mesh utilities ---
180
+ cloneMesh(_sourceName: string, _newName: string): void {
181
+ console.log('cloned mesh (dummy)');
182
+ }
183
+
184
+ setMeshVisible(_meshName: string, _visible: boolean): void {
185
+ console.log('set mesh visible (dummy)');
186
+ }
79
187
  }
@@ -1,8 +1,29 @@
1
1
  import type { Choices } from '@kiberon-labs/behave-graph';
2
2
 
3
+ export const GeometryType = {
4
+ Box: 'box',
5
+ Sphere: 'sphere',
6
+ Cylinder: 'cylinder',
7
+ Torus: 'torus',
8
+ Plane: 'plane',
9
+ Cone: 'cone'
10
+ } as const;
11
+
12
+ export type GeometryType = (typeof GeometryType)[keyof typeof GeometryType];
13
+
14
+ export const LightType = {
15
+ Point: 'point',
16
+ Directional: 'directional',
17
+ Spot: 'spot',
18
+ Ambient: 'ambient'
19
+ } as const;
20
+
21
+ export type LightType = (typeof LightType)[keyof typeof LightType];
22
+
3
23
  export interface IScene {
4
- getProperty(jsonPath: string, valueTypeName: string): any;
5
- setProperty(jsonPath: string, valueTypeName: string, value: any): void;
24
+ // --- existing property accessors ---
25
+ getProperty(jsonPath: string, valueTypeName: string): unknown;
26
+ setProperty(jsonPath: string, valueTypeName: string, value: unknown): void;
6
27
  addOnClickedListener(
7
28
  jsonPath: string,
8
29
  callback: (jsonPath: string) => void
@@ -12,7 +33,57 @@ export interface IScene {
12
33
  callback: (jsonPath: string) => void
13
34
  ): void;
14
35
  getRaycastableProperties: () => Choices;
15
- getProperties: () => Choices;
36
+ getProperties: (valueFilter?: string) => Choices;
16
37
  addOnSceneChangedListener(listener: () => void): void;
17
38
  removeOnSceneChangedListener(listener: () => void): void;
39
+
40
+ // --- mesh lifecycle ---
41
+ createMesh(
42
+ name: string,
43
+ geometryType: GeometryType,
44
+ size: { x: number; y: number; z: number }
45
+ ): void;
46
+ deleteMesh(name: string): void;
47
+ getMeshNames: () => Choices;
48
+
49
+ // --- lighting ---
50
+ addLight(
51
+ name: string,
52
+ lightType: LightType,
53
+ color: { r: number; g: number; b: number },
54
+ intensity: number
55
+ ): void;
56
+ removeLight(name: string): void;
57
+ setLightProperty(name: string, property: string, value: unknown): void;
58
+ getLightProperty(name: string, property: string): unknown;
59
+ getLightNames: () => Choices;
60
+
61
+ // --- material ---
62
+ setMaterialProperty(meshName: string, property: string, value: unknown): void;
63
+ getMaterialProperty(meshName: string, property: string): unknown;
64
+
65
+ // --- global click (returns which mesh was hit) ---
66
+ addOnAnyMeshClickedListener(callback: (meshName: string) => void): void;
67
+ removeOnAnyMeshClickedListener(callback: (meshName: string) => void): void;
68
+
69
+ // --- spatial helpers ---
70
+ getMeshPosition(
71
+ meshName: string
72
+ ): { x: number; y: number; z: number } | undefined;
73
+ setMeshPosition(
74
+ meshName: string,
75
+ position: { x: number; y: number; z: number }
76
+ ): void;
77
+ getDistanceBetween(meshA: string, meshB: string): number;
78
+ lookAt(meshName: string, target: { x: number; y: number; z: number }): void;
79
+ moveTowards(
80
+ meshName: string,
81
+ target: { x: number; y: number; z: number },
82
+ speed: number,
83
+ deltaSeconds: number
84
+ ): boolean; // returns true when arrived
85
+
86
+ // --- mesh utilities ---
87
+ cloneMesh(sourceName: string, newName: string): void;
88
+ setMeshVisible(meshName: string, visible: boolean): void;
18
89
  }
@@ -0,0 +1,46 @@
1
+ import {
2
+ makeFlowNodeDefinition,
3
+ NodeCategory
4
+ } from '@kiberon-labs/behave-graph';
5
+
6
+ import { LightType } from '../../Abstractions/IScene.js';
7
+
8
+ const lightTypeChoices = Object.values(LightType).map((v) => ({
9
+ text: v,
10
+ value: v
11
+ }));
12
+
13
+ export const AddLight = makeFlowNodeDefinition({
14
+ typeName: 'scene/addLight',
15
+ category: NodeCategory.Effect,
16
+ label: 'Add Light',
17
+ in: {
18
+ flow: 'flow',
19
+ name: 'string',
20
+ lightType: (_) => ({
21
+ valueType: 'string',
22
+ choices: lightTypeChoices
23
+ }),
24
+ color: 'color',
25
+ intensity: 'float'
26
+ },
27
+ out: {
28
+ flow: 'flow'
29
+ },
30
+ initialState: undefined,
31
+ triggered: ({ commit, read, graph }) => {
32
+ const scene = graph.getDependency('IScene');
33
+ const name = read<string>('name');
34
+ const lightType = read<string>('lightType');
35
+ const color = read<{ r: number; g: number; b: number }>('color');
36
+ const intensity = read<number>('intensity');
37
+
38
+ scene?.addLight(
39
+ name,
40
+ lightType as (typeof LightType)[keyof typeof LightType],
41
+ color,
42
+ intensity
43
+ );
44
+ commit('flow');
45
+ }
46
+ });
@@ -0,0 +1,31 @@
1
+ import {
2
+ makeFlowNodeDefinition,
3
+ NodeCategory
4
+ } from '@kiberon-labs/behave-graph';
5
+
6
+ // Clone an existing mesh under a new name.
7
+ export const CloneMesh = makeFlowNodeDefinition({
8
+ typeName: 'scene/cloneMesh',
9
+ category: NodeCategory.Effect,
10
+ label: 'Clone Mesh',
11
+ in: {
12
+ flow: 'flow',
13
+ sourceName: (_, graphApi) => {
14
+ const scene = graphApi.getDependency('IScene');
15
+ return {
16
+ valueType: 'string',
17
+ choices: scene?.getMeshNames()
18
+ };
19
+ },
20
+ newName: 'string'
21
+ },
22
+ out: {
23
+ flow: 'flow'
24
+ },
25
+ initialState: undefined,
26
+ triggered: ({ commit, read, graph }) => {
27
+ const scene = graph.getDependency('IScene');
28
+ scene?.cloneMesh(read<string>('sourceName'), read<string>('newName'));
29
+ commit('flow');
30
+ }
31
+ });