@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.
- package/.storybook/main.ts +18 -0
- package/.storybook/preview.ts +16 -0
- package/.storybook/vscode.css +822 -0
- package/.turbo/turbo-build.log +4 -3
- package/CHANGELOG.md +84 -0
- package/README.md +1 -1
- package/dist/Abstractions/Drivers/DummyScene.d.ts +47 -3
- package/dist/Abstractions/Drivers/DummyScene.d.ts.map +1 -1
- package/dist/Abstractions/Drivers/DummyScene.js +57 -0
- package/dist/Abstractions/Drivers/DummyScene.js.map +1 -1
- package/dist/Abstractions/IScene.d.ts +63 -4
- package/dist/Abstractions/IScene.d.ts.map +1 -1
- package/dist/Abstractions/IScene.js +19 -0
- package/dist/Abstractions/IScene.js.map +1 -0
- package/dist/Nodes/Actions/AddLight.d.ts +21 -0
- package/dist/Nodes/Actions/AddLight.d.ts.map +1 -0
- package/dist/Nodes/Actions/AddLight.js +38 -0
- package/dist/Nodes/Actions/AddLight.js.map +1 -0
- package/dist/Nodes/Actions/CloneMesh.d.ts +16 -0
- package/dist/Nodes/Actions/CloneMesh.d.ts.map +1 -0
- package/dist/Nodes/Actions/CloneMesh.js +28 -0
- package/dist/Nodes/Actions/CloneMesh.js.map +1 -0
- package/dist/Nodes/Actions/CreateMesh.d.ts +22 -0
- package/dist/Nodes/Actions/CreateMesh.d.ts.map +1 -0
- package/dist/Nodes/Actions/CreateMesh.js +44 -0
- package/dist/Nodes/Actions/CreateMesh.js.map +1 -0
- package/dist/Nodes/Actions/DeleteMesh.d.ts +15 -0
- package/dist/Nodes/Actions/DeleteMesh.d.ts.map +1 -0
- package/dist/Nodes/Actions/DeleteMesh.js +27 -0
- package/dist/Nodes/Actions/DeleteMesh.js.map +1 -0
- package/dist/Nodes/Actions/EaseSceneProperty.d.ts +1 -1
- package/dist/Nodes/Actions/EaseSceneProperty.d.ts.map +1 -1
- package/dist/Nodes/Actions/EaseSceneProperty.js +2 -2
- package/dist/Nodes/Actions/EaseSceneProperty.js.map +1 -1
- package/dist/Nodes/Actions/LookAt.d.ts +16 -0
- package/dist/Nodes/Actions/LookAt.d.ts.map +1 -0
- package/dist/Nodes/Actions/LookAt.js +35 -0
- package/dist/Nodes/Actions/LookAt.js.map +1 -0
- package/dist/Nodes/Actions/MoveTowards.d.ts +21 -0
- package/dist/Nodes/Actions/MoveTowards.d.ts.map +1 -0
- package/dist/Nodes/Actions/MoveTowards.js +46 -0
- package/dist/Nodes/Actions/MoveTowards.js.map +1 -0
- package/dist/Nodes/Actions/RemoveLight.d.ts +15 -0
- package/dist/Nodes/Actions/RemoveLight.d.ts.map +1 -0
- package/dist/Nodes/Actions/RemoveLight.js +27 -0
- package/dist/Nodes/Actions/RemoveLight.js.map +1 -0
- package/dist/Nodes/Actions/SetLightProperty.d.ts +25 -0
- package/dist/Nodes/Actions/SetLightProperty.d.ts.map +1 -0
- package/dist/Nodes/Actions/SetLightProperty.js +64 -0
- package/dist/Nodes/Actions/SetLightProperty.js.map +1 -0
- package/dist/Nodes/Actions/SetMaterialProperty.d.ts +25 -0
- package/dist/Nodes/Actions/SetMaterialProperty.d.ts.map +1 -0
- package/dist/Nodes/Actions/SetMaterialProperty.js +69 -0
- package/dist/Nodes/Actions/SetMaterialProperty.js.map +1 -0
- package/dist/Nodes/Actions/SetMeshPosition.d.ts +18 -0
- package/dist/Nodes/Actions/SetMeshPosition.d.ts.map +1 -0
- package/dist/Nodes/Actions/SetMeshPosition.js +34 -0
- package/dist/Nodes/Actions/SetMeshPosition.js.map +1 -0
- package/dist/Nodes/Actions/SetMeshVisible.d.ts +16 -0
- package/dist/Nodes/Actions/SetMeshVisible.d.ts.map +1 -0
- package/dist/Nodes/Actions/SetMeshVisible.js +28 -0
- package/dist/Nodes/Actions/SetMeshVisible.js.map +1 -0
- package/dist/Nodes/Actions/SetSceneProperty.d.ts +12 -1
- package/dist/Nodes/Actions/SetSceneProperty.d.ts.map +1 -1
- package/dist/Nodes/Actions/SetSceneProperty.js +1 -1
- package/dist/Nodes/Actions/SetSceneProperty.js.map +1 -1
- package/dist/Nodes/Events/OnAnyMeshClicked.d.ts +13 -0
- package/dist/Nodes/Events/OnAnyMeshClicked.d.ts.map +1 -0
- package/dist/Nodes/Events/OnAnyMeshClicked.js +34 -0
- package/dist/Nodes/Events/OnAnyMeshClicked.js.map +1 -0
- package/dist/Nodes/Events/OnSceneChanged.d.ts +12 -0
- package/dist/Nodes/Events/OnSceneChanged.d.ts.map +1 -0
- package/dist/Nodes/Events/OnSceneChanged.js +28 -0
- package/dist/Nodes/Events/OnSceneChanged.js.map +1 -0
- package/dist/Nodes/Events/OnSceneNodeClick.d.ts +14 -1
- package/dist/Nodes/Events/OnSceneNodeClick.d.ts.map +1 -1
- package/dist/Nodes/Events/OnSceneNodeClick.js +1 -1
- package/dist/Nodes/Events/OnSceneNodeClick.js.map +1 -1
- package/dist/Nodes/Logic/ColorNodes.d.ts +17 -13
- package/dist/Nodes/Logic/ColorNodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/EulerNodes.d.ts +16 -12
- package/dist/Nodes/Logic/EulerNodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/Mat3Nodes.d.ts +26 -23
- package/dist/Nodes/Logic/Mat3Nodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/Mat3Nodes.js +0 -14
- package/dist/Nodes/Logic/Mat3Nodes.js.map +1 -1
- package/dist/Nodes/Logic/Mat4Nodes.d.ts +32 -28
- package/dist/Nodes/Logic/Mat4Nodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/QuatNodes.d.ts +22 -18
- package/dist/Nodes/Logic/QuatNodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/Vec2Nodes.d.ts +16 -12
- package/dist/Nodes/Logic/Vec2Nodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/Vec3Nodes.d.ts +17 -13
- package/dist/Nodes/Logic/Vec3Nodes.d.ts.map +1 -1
- package/dist/Nodes/Logic/Vec4Nodes.d.ts +16 -12
- package/dist/Nodes/Logic/Vec4Nodes.d.ts.map +1 -1
- package/dist/Nodes/Queries/GetDistanceBetween.d.ts +18 -0
- package/dist/Nodes/Queries/GetDistanceBetween.d.ts.map +1 -0
- package/dist/Nodes/Queries/GetDistanceBetween.js +30 -0
- package/dist/Nodes/Queries/GetDistanceBetween.js.map +1 -0
- package/dist/Nodes/Queries/GetLightProperty.d.ts +23 -0
- package/dist/Nodes/Queries/GetLightProperty.d.ts.map +1 -0
- package/dist/Nodes/Queries/GetLightProperty.js +68 -0
- package/dist/Nodes/Queries/GetLightProperty.js.map +1 -0
- package/dist/Nodes/Queries/GetMaterialProperty.d.ts +23 -0
- package/dist/Nodes/Queries/GetMaterialProperty.d.ts.map +1 -0
- package/dist/Nodes/Queries/GetMaterialProperty.js +69 -0
- package/dist/Nodes/Queries/GetMaterialProperty.js.map +1 -0
- package/dist/Nodes/Queries/GetMeshPosition.d.ts +16 -0
- package/dist/Nodes/Queries/GetMeshPosition.d.ts.map +1 -0
- package/dist/Nodes/Queries/GetMeshPosition.js +29 -0
- package/dist/Nodes/Queries/GetMeshPosition.js.map +1 -0
- package/dist/Nodes/Queries/GetSceneProperty.d.ts +10 -1
- package/dist/Nodes/Queries/GetSceneProperty.d.ts.map +1 -1
- package/dist/Nodes/Queries/GetSceneProperty.js +2 -2
- package/dist/Nodes/Queries/GetSceneProperty.js.map +1 -1
- package/dist/Values/Internal/Mat3.d.ts +1 -1
- package/dist/Values/Internal/Mat3.d.ts.map +1 -1
- package/dist/Values/Internal/Mat3.js +1 -3
- package/dist/Values/Internal/Mat3.js.map +1 -1
- package/dist/Values/Internal/Mat4.d.ts.map +1 -1
- package/dist/Values/Internal/Mat4.js +1 -3
- package/dist/Values/Internal/Mat4.js.map +1 -1
- package/dist/Values/Internal/Vec3.d.ts +1 -1
- package/dist/Values/Internal/Vec3.d.ts.map +1 -1
- package/dist/Values/Internal/Vec3.js +0 -2
- package/dist/Values/Internal/Vec3.js.map +1 -1
- package/dist/Values/Internal/Vec4.d.ts.map +1 -1
- package/dist/Values/Internal/Vec4.js +0 -1
- package/dist/Values/Internal/Vec4.js.map +1 -1
- package/dist/_virtual/rolldown_runtime.js +23 -1
- package/dist/behave-graph.manifest.json +6082 -0
- package/dist/buildScene.d.ts.map +1 -1
- package/dist/buildScene.js +24 -3
- package/dist/buildScene.js.map +1 -1
- package/dist/index.d.ts +29 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -4
- package/dist/manifest.source.d.ts +7 -0
- package/dist/manifest.source.d.ts.map +1 -0
- package/dist/manifest.source.js +54 -0
- package/dist/manifest.source.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js +207 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js +40 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.development.js +766 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.production.js +367 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/index.js +15 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/index.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js +15 -0
- package/dist/node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/packages/nodes/scene/package.js +7 -0
- package/dist/packages/nodes/scene/package.js.map +1 -0
- package/dist/registerSceneProfile.d.ts +3 -3
- package/dist/registerSceneProfile.d.ts.map +1 -1
- package/dist/registerSceneProfile.js +35 -1
- package/dist/registerSceneProfile.js.map +1 -1
- package/dist/ui/controls/vec3.d.ts +9 -0
- package/dist/ui/controls/vec3.d.ts.map +1 -0
- package/dist/ui/controls/vec3.js +99 -0
- package/dist/ui/controls/vec3.js.map +1 -0
- package/package.json +28 -9
- package/src/Abstractions/Drivers/DummyScene.ts +110 -2
- package/src/Abstractions/IScene.ts +74 -3
- package/src/Nodes/Actions/AddLight.ts +46 -0
- package/src/Nodes/Actions/CloneMesh.ts +31 -0
- package/src/Nodes/Actions/CreateMesh.ts +47 -0
- package/src/Nodes/Actions/DeleteMesh.ts +29 -0
- package/src/Nodes/Actions/EaseSceneProperty.ts +6 -2
- package/src/Nodes/Actions/LookAt.ts +34 -0
- package/src/Nodes/Actions/MoveTowards.ts +55 -0
- package/src/Nodes/Actions/RemoveLight.ts +29 -0
- package/src/Nodes/Actions/SetLightProperty.ts +60 -0
- package/src/Nodes/Actions/SetMaterialProperty.ts +62 -0
- package/src/Nodes/Actions/SetMeshPosition.ts +37 -0
- package/src/Nodes/Actions/SetMeshVisible.ts +31 -0
- package/src/Nodes/Actions/SetSceneProperty.ts +3 -5
- package/src/Nodes/Events/OnAnyMeshClicked.ts +48 -0
- package/src/Nodes/Events/OnSceneChanged.ts +43 -0
- package/src/Nodes/Events/OnSceneNodeClick.ts +3 -3
- package/src/Nodes/Logic/Mat3Nodes.ts +0 -10
- package/src/Nodes/Queries/GetDistanceBetween.ts +37 -0
- package/src/Nodes/Queries/GetLightProperty.ts +53 -0
- package/src/Nodes/Queries/GetMaterialProperty.ts +55 -0
- package/src/Nodes/Queries/GetMeshPosition.ts +32 -0
- package/src/Nodes/Queries/GetSceneProperty.ts +4 -5
- package/src/Values/Internal/Mat3.ts +3 -3
- package/src/Values/Internal/Mat4.ts +5 -4
- package/src/Values/Internal/Vec3.ts +5 -4
- package/src/Values/Internal/Vec4.ts +3 -2
- package/src/buildScene.ts +36 -2
- package/src/index.ts +26 -2
- package/src/manifest.source.ts +61 -0
- package/src/registerSceneProfile.ts +41 -4
- package/src/ui/controls/vec3.tsx +69 -0
- package/stories/click.stories.tsx +112 -0
- package/stories/components/DemoScene.ts +610 -0
- package/stories/components/SceneViewer.tsx +204 -0
- package/stories/components/SceneViewerPanel.tsx +41 -0
- package/stories/data/clickDemo.json +94 -0
- package/stories/data/rotate.json +402 -0
- package/stories/index.stories.tsx +90 -0
- package/stories/plugin/sceneViewerPlugin.tsx +88 -0
- package/tests/manifest.test.ts +65 -0
- package/tests/readSceneGraphs.test.ts +8 -1
- package/tests/registerSceneProfile.test.ts +6 -5
- package/tsconfig.json +18 -11
- package/tsdown.config.ts +5 -1
- package/vite.config.js +7 -0
- package/src/Values/Internal/Mat2.ts +0 -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": "
|
|
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
|
-
"
|
|
48
|
-
"
|
|
49
|
+
"./**/*.ts",
|
|
50
|
+
"./**/*.tsx",
|
|
51
|
+
"./**/*.json",
|
|
49
52
|
],
|
|
53
|
+
"exclude": [],
|
|
50
54
|
"references": [
|
|
51
55
|
{
|
|
52
|
-
"path": "
|
|
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: [
|
|
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
|
@@ -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
|
-
};
|