@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
package/tsconfig.json CHANGED
@@ -6,10 +6,6 @@
6
6
  "esModuleInterop": true,
7
7
  "skipLibCheck": true,
8
8
  "target": "esnext",
9
- "lib": [
10
- "esnext",
11
- "ES6"
12
- ],
13
9
  "allowJs": true,
14
10
  "resolveJsonModule": true,
15
11
  "moduleDetection": "force",
@@ -26,13 +22,13 @@
26
22
  "module": "preserve",
27
23
  "outDir": "./dist",
28
24
  "baseUrl": ".",
29
- "rootDir": "./src",
25
+ "rootDir": ".",
30
26
  "paths": {
31
- "~/*": [
32
- "./src/*"
33
- ],
34
27
  "@/*": [
35
28
  "./src/*"
29
+ ],
30
+ "~/*": [
31
+ "./stories/*"
36
32
  ]
37
33
  },
38
34
  /* Required for project references, which provide go-to-definition in your
@@ -42,14 +38,25 @@
42
38
  enabled because it is not compatible with composite / project references. Also declaration might be required for references to work fully. Not sure yet... */
43
39
  "declaration": true,
44
40
  "declarationMap": true,
41
+ "jsx": "react-jsx",
42
+ "lib": [
43
+ "dom",
44
+ "dom.iterable",
45
+ "esnext"
46
+ ],
45
47
  },
46
48
  "include": [
47
- "./src",
48
- "./src/**/*.json"
49
+ "./**/*.ts",
50
+ "./**/*.tsx",
51
+ "./**/*.json",
49
52
  ],
53
+ "exclude": [],
50
54
  "references": [
51
55
  {
52
- "path": "../core"
56
+ "path": "../../core"
57
+ },
58
+ {
59
+ "path": "../../flow"
53
60
  }
54
61
  ],
55
62
  }
package/tsdown.config.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  import { defineConfig } from 'tsdown';
2
2
 
3
3
  export default defineConfig({
4
- entry: ['./src/index.ts'],
4
+ entry: [
5
+ './src/index.ts',
6
+ './src/manifest.source.ts',
7
+ './src/ui/controls/vec3.tsx'
8
+ ],
5
9
  outDir: 'dist',
6
10
  target: 'es2022',
7
11
  sourcemap: true,
package/vite.config.js ADDED
@@ -0,0 +1,7 @@
1
+ import { defineConfig } from 'vite';
2
+ import tsconfigPaths from 'vite-tsconfig-paths';
3
+
4
+ // https://vitejs.dev/config/
5
+ export default defineConfig({
6
+ plugins: [tsconfigPaths()]
7
+ });
@@ -1,214 +0,0 @@
1
- import {
2
- EPSILON,
3
- equalsTolerance,
4
- parseSafeFloats,
5
- toSafeString
6
- } from '@kiberon-labs/behave-graph';
7
-
8
- import { Mat3 } from './Mat3.js';
9
- import { Mat4 } from './Mat4.js';
10
- import { Vec2 } from './Vec2.js';
11
-
12
- // uses OpenGL matrix layout where each column is specified subsequently in order from left to right.
13
- // ( x, y ) x [ 0 2 ] = ( x', y' )
14
- // [ 1 3 ]
15
-
16
- const NUM_ROWS = 2;
17
- const NUM_COLUMNS = 2;
18
- const NUM_ELEMENTS = NUM_ROWS * NUM_COLUMNS;
19
-
20
- export type Mat2JSON = number[];
21
-
22
- type Mat2Elements = [number, number, number, number];
23
-
24
- export class Mat2 {
25
- public elements: Mat2Elements;
26
- constructor(elements: Mat2Elements = [1, 0, 0, 1]) {
27
- this.elements = elements;
28
- if (elements.length !== NUM_ELEMENTS) {
29
- throw new Error(
30
- `elements must have length ${NUM_ELEMENTS}, got ${elements.length}`
31
- );
32
- }
33
- }
34
-
35
- clone(result = new Mat2()): Mat2 {
36
- return result.set(this.elements);
37
- }
38
- set(elements: Mat2Elements): this {
39
- if (elements.length !== NUM_ELEMENTS) {
40
- throw new Error(
41
- `elements must have length ${NUM_ELEMENTS}, got ${elements.length}`
42
- );
43
- }
44
- this.elements = [...elements];
45
- return this;
46
- }
47
- }
48
-
49
- export function mat2SetColumn3(
50
- m: Mat2,
51
- columnIndex: number,
52
- column: Vec2,
53
- result = new Mat2()
54
- ): Mat2 {
55
- const re = result.set(m.elements).elements;
56
- const base = columnIndex * NUM_ROWS;
57
- re[base + 0] = column.x;
58
- re[base + 1] = column.y;
59
- return result;
60
- }
61
-
62
- export function mat2SetRow3(
63
- m: Mat2,
64
- rowIndex: number,
65
- row: Vec2,
66
- result = new Mat2()
67
- ): Mat2 {
68
- const re = result.set(m.elements).elements;
69
- re[rowIndex + NUM_COLUMNS * 0] = row.x;
70
- re[rowIndex + NUM_COLUMNS * 1] = row.y;
71
- return result;
72
- }
73
-
74
- export function column3ToMat2(
75
- a: Vec2,
76
- b: Vec2,
77
- c: Vec2,
78
- result = new Mat2()
79
- ): Mat2 {
80
- const re = result.elements;
81
- const columns = [a, b, c];
82
- for (let c = 0; c < columns.length; c++) {
83
- const base = c * NUM_ROWS;
84
- const column = columns[c]!;
85
- re[base + 0] = column.x;
86
- re[base + 1] = column.y;
87
- }
88
- return result;
89
- }
90
-
91
- export function mat2Equals(a: Mat2, b: Mat2, tolerance = EPSILON): boolean {
92
- for (let i = 0; i < NUM_ELEMENTS; i++) {
93
- if (!equalsTolerance(a.elements[i]!, b.elements[i]!, tolerance))
94
- return false;
95
- }
96
- return true;
97
- }
98
- export function mat2Add(a: Mat2, b: Mat2, result: Mat2 = new Mat2()): Mat2 {
99
- for (let i = 0; i < NUM_ELEMENTS; i++) {
100
- result.elements[i] = a.elements[i]! + b.elements[i]!;
101
- }
102
- return result;
103
- }
104
- export function mat2Subtract(
105
- a: Mat2,
106
- b: Mat2,
107
- result: Mat2 = new Mat2()
108
- ): Mat2 {
109
- for (let i = 0; i < NUM_ELEMENTS; i++) {
110
- result.elements[i] = a.elements[i]! - b.elements[i]!;
111
- }
112
- return result;
113
- }
114
- export function mat2MultiplyByScalar(
115
- a: Mat2,
116
- b: number,
117
- result: Mat2 = new Mat2()
118
- ): Mat2 {
119
- for (let i = 0; i < NUM_ELEMENTS; i++) {
120
- result.elements[i] = a.elements[i]! * b;
121
- }
122
- return result;
123
- }
124
- export function mat2Negate(a: Mat2, result: Mat2 = new Mat2()): Mat2 {
125
- for (let i = 0; i < NUM_ELEMENTS; i++) {
126
- result.elements[i] = -a.elements[i]!;
127
- }
128
- return result;
129
- }
130
-
131
- export function mat2Multiply(a: Mat2, b: Mat2, result = new Mat2()): Mat2 {
132
- throw new Error('not implemented');
133
- }
134
-
135
- export function mat2Determinant(m: Mat2): number {
136
- throw new Error('not implemented');
137
- }
138
-
139
- export function mat2Transpose(m: Mat2, result = new Mat2()): Mat2 {
140
- const me = m.elements;
141
- const te = result.elements;
142
-
143
- te[0] = me[0];
144
- te[1] = me[2];
145
- te[2] = me[1];
146
- te[3] = me[3];
147
-
148
- return result;
149
- }
150
-
151
- export function mat2Inverse(m: Mat2, result = new Mat2()): Mat2 {
152
- throw new Error('not implemented');
153
- }
154
-
155
- export function mat2Mix(
156
- a: Mat2,
157
- b: Mat2,
158
- t: number,
159
- result = new Mat2()
160
- ): Mat2 {
161
- const s = 1 - t;
162
- for (let i = 0; i < NUM_ELEMENTS; i++) {
163
- result.elements[i] = a.elements[i]! * s + b.elements[i]! * t;
164
- }
165
- return result;
166
- }
167
- export function mat2FromArray(
168
- array: Float32Array | number[],
169
- offset = 0,
170
- result: Mat2 = new Mat2()
171
- ): Mat2 {
172
- for (let i = 0; i < NUM_ELEMENTS; i++) {
173
- result.elements[i] = array[offset + i]!;
174
- }
175
- return result;
176
- }
177
- export function mat2ToArray(
178
- a: Mat2,
179
- array: Float32Array | number[],
180
- offset = 0
181
- ): void {
182
- for (let i = 0; i < NUM_ELEMENTS; i++) {
183
- array[offset + i] = a.elements[i]!;
184
- }
185
- }
186
-
187
- export function mat2ToString(a: Mat2): string {
188
- return toSafeString(a.elements);
189
- }
190
- export function mat2Parse(text: string, result = new Mat2()): Mat2 {
191
- return mat2FromArray(parseSafeFloats(text), 0, result);
192
- }
193
-
194
- export function scale2ToMat2(s: Vec2, result = new Mat2()): Mat2 {
195
- return result.set([s.x, 0, 0, s.y]);
196
- }
197
- // from gl-matrix
198
- export function mat2ToScale2(m: Mat4, result = new Vec2()): Vec2 {
199
- const mat = m.elements;
200
- const m11 = mat[0];
201
- const m12 = mat[1];
202
- const m21 = mat[2];
203
- const m22 = mat[3];
204
-
205
- return result.set(
206
- Math.sqrt(m11 * m11 + m12 * m12),
207
- Math.sqrt(m21 * m21 + m22 * m22)
208
- );
209
- }
210
-
211
- export function mat3ToMat2(a: Mat3, result = new Mat2()): Mat2 {
212
- const ae = a.elements;
213
- return result.set([ae[0], ae[1], ae[3], ae[4]]);
214
- }
package/src/loadScene.ts DELETED
@@ -1,81 +0,0 @@
1
- import { Group } from 'three';
2
- import { DRACOLoader, type GLTF, GLTFLoader } from 'three-stdlib';
3
-
4
- import type { IScene } from './Abstractions/IScene.js';
5
- import { buildScene, type ObjectMap } from './buildScene.js';
6
-
7
- // Taken from react-three-fiber
8
- // Collects nodes and materials from a THREE.Object3D
9
- export function buildGraph(object: Group) {
10
- const data: ObjectMap = { nodes: {}, materials: {} };
11
- if (object) {
12
- object.traverse((obj: any) => {
13
- if (obj.name) data.nodes[obj.name] = obj;
14
- if (obj.material && !data.materials[obj.material.name])
15
- data.materials[obj.material.name] = obj.material;
16
- });
17
- }
18
- return data;
19
- }
20
-
21
- type ThreeSceneReturn = {
22
- scene: IScene;
23
- gltf: GLTF & ObjectMap;
24
- };
25
-
26
- /**
27
- * Loads a gltf, and corresponding IScene from a url
28
- * @param url
29
- * @param onProgress invoked on progress of loading the gltf
30
- * @returns
31
- */
32
- export const loadGltfAndBuildScene = (
33
- url: string,
34
- onProgress?: (progress: number) => void
35
- ): Promise<ThreeSceneReturn> => {
36
- const loader = new GLTFLoader();
37
-
38
- // Optional: Provide a DRACOLoader instance to decode compressed mesh data
39
- const dracoLoader = new DRACOLoader();
40
- dracoLoader.setDecoderPath(
41
- 'https://www.gstatic.com/draco/versioned/decoders/1.4.3/'
42
- );
43
- loader.setDRACOLoader(dracoLoader);
44
-
45
- // Load a glTF resource
46
-
47
- // eslint-disable-next-line promise/avoid-new
48
- const result = new Promise<ThreeSceneReturn>((resolve, reject) => {
49
- loader.load(
50
- // resource URL
51
- url,
52
- // called when the resource is loaded
53
- function (gltf) {
54
- Object.assign(gltf, buildGraph(gltf.scene));
55
- const asObjectMap = gltf as GLTF & ObjectMap;
56
-
57
- const scene = buildScene({
58
- gltf: asObjectMap,
59
- setOnClickListeners: undefined,
60
- setActiveAnimations: undefined
61
- });
62
-
63
- resolve({
64
- scene,
65
- gltf: asObjectMap
66
- });
67
- },
68
- // called while loading is progressing
69
- function (xhr) {
70
- const progress = (xhr.loaded / xhr.total) * 100;
71
- if (onProgress) onProgress(progress);
72
- },
73
- // called when loading has errors
74
- function (error) {
75
- reject(error);
76
- }
77
- );
78
- });
79
-
80
- return result;
81
- };