@kiberon-labs/behave-graph-scene 1.0.0 → 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 +8 -0
- package/CHANGELOG.md +84 -0
- package/LICENSE +6 -0
- package/README.md +13 -0
- package/dist/Abstractions/Drivers/DummyScene.d.ts +64 -0
- package/dist/Abstractions/Drivers/DummyScene.d.ts.map +1 -0
- package/dist/Abstractions/Drivers/DummyScene.js +115 -0
- package/dist/Abstractions/Drivers/DummyScene.js.map +1 -0
- package/dist/Abstractions/IScene.d.ts +75 -0
- package/dist/Abstractions/IScene.d.ts.map +1 -0
- package/dist/Abstractions/IScene.js +19 -0
- package/dist/Abstractions/IScene.js.map +1 -0
- package/dist/GLTFJson.d.ts +33 -0
- package/dist/GLTFJson.d.ts.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 +23 -0
- package/dist/Nodes/Actions/EaseSceneProperty.d.ts.map +1 -0
- package/dist/Nodes/Actions/EaseSceneProperty.js +73 -0
- package/dist/Nodes/Actions/EaseSceneProperty.js.map +1 -0
- 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 +16 -0
- package/dist/Nodes/Actions/SetSceneProperty.d.ts.map +1 -0
- package/dist/Nodes/Actions/SetSceneProperty.js +28 -0
- package/dist/Nodes/Actions/SetSceneProperty.js.map +1 -0
- 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 +18 -0
- package/dist/Nodes/Events/OnSceneNodeClick.d.ts.map +1 -0
- package/dist/Nodes/Events/OnSceneNodeClick.js +39 -0
- package/dist/Nodes/Events/OnSceneNodeClick.js.map +1 -0
- package/dist/Nodes/Logic/ColorNodes.d.ts +23 -0
- package/dist/Nodes/Logic/ColorNodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/ColorNodes.js +137 -0
- package/dist/Nodes/Logic/ColorNodes.js.map +1 -0
- package/dist/Nodes/Logic/EulerNodes.d.ts +22 -0
- package/dist/Nodes/Logic/EulerNodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/EulerNodes.js +132 -0
- package/dist/Nodes/Logic/EulerNodes.js.map +1 -0
- package/dist/Nodes/Logic/Mat3Nodes.d.ts +31 -0
- package/dist/Nodes/Logic/Mat3Nodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/Mat3Nodes.js +199 -0
- package/dist/Nodes/Logic/Mat3Nodes.js.map +1 -0
- package/dist/Nodes/Logic/Mat4Nodes.d.ts +38 -0
- package/dist/Nodes/Logic/Mat4Nodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/Mat4Nodes.js +267 -0
- package/dist/Nodes/Logic/Mat4Nodes.js.map +1 -0
- package/dist/Nodes/Logic/QuatNodes.d.ts +28 -0
- package/dist/Nodes/Logic/QuatNodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/QuatNodes.js +173 -0
- package/dist/Nodes/Logic/QuatNodes.js.map +1 -0
- package/dist/Nodes/Logic/Vec2Nodes.d.ts +22 -0
- package/dist/Nodes/Logic/Vec2Nodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/Vec2Nodes.js +115 -0
- package/dist/Nodes/Logic/Vec2Nodes.js.map +1 -0
- package/dist/Nodes/Logic/Vec3Nodes.d.ts +23 -0
- package/dist/Nodes/Logic/Vec3Nodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/Vec3Nodes.js +137 -0
- package/dist/Nodes/Logic/Vec3Nodes.js.map +1 -0
- package/dist/Nodes/Logic/Vec4Nodes.d.ts +22 -0
- package/dist/Nodes/Logic/Vec4Nodes.d.ts.map +1 -0
- package/dist/Nodes/Logic/Vec4Nodes.js +132 -0
- package/dist/Nodes/Logic/Vec4Nodes.js.map +1 -0
- package/dist/Nodes/Logic/VecElements.d.ts +9 -0
- package/dist/Nodes/Logic/VecElements.d.ts.map +1 -0
- package/dist/Nodes/Logic/VecElements.js +22 -0
- package/dist/Nodes/Logic/VecElements.js.map +1 -0
- 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 +14 -0
- package/dist/Nodes/Queries/GetSceneProperty.d.ts.map +1 -0
- package/dist/Nodes/Queries/GetSceneProperty.js +23 -0
- package/dist/Nodes/Queries/GetSceneProperty.js.map +1 -0
- package/dist/Values/ColorValue.d.ts +7 -0
- package/dist/Values/ColorValue.d.ts.map +1 -0
- package/dist/Values/ColorValue.js +20 -0
- package/dist/Values/ColorValue.js.map +1 -0
- package/dist/Values/EulerValue.d.ts +7 -0
- package/dist/Values/EulerValue.d.ts.map +1 -0
- package/dist/Values/EulerValue.js +20 -0
- package/dist/Values/EulerValue.js.map +1 -0
- package/dist/Values/Internal/Mat3.d.ts +43 -0
- package/dist/Values/Internal/Mat3.d.ts.map +1 -0
- package/dist/Values/Internal/Mat3.js +276 -0
- package/dist/Values/Internal/Mat3.js.map +1 -0
- package/dist/Values/Internal/Mat4.d.ts +53 -0
- package/dist/Values/Internal/Mat4.d.ts.map +1 -0
- package/dist/Values/Internal/Mat4.js +443 -0
- package/dist/Values/Internal/Mat4.js.map +1 -0
- package/dist/Values/Internal/Vec2.d.ts +25 -0
- package/dist/Values/Internal/Vec2.d.ts.map +1 -0
- package/dist/Values/Internal/Vec2.js +64 -0
- package/dist/Values/Internal/Vec2.js.map +1 -0
- package/dist/Values/Internal/Vec3.d.ts +38 -0
- package/dist/Values/Internal/Vec3.d.ts.map +1 -0
- package/dist/Values/Internal/Vec3.js +157 -0
- package/dist/Values/Internal/Vec3.js.map +1 -0
- package/dist/Values/Internal/Vec4.d.ts +49 -0
- package/dist/Values/Internal/Vec4.d.ts.map +1 -0
- package/dist/Values/Internal/Vec4.js +190 -0
- package/dist/Values/Internal/Vec4.js.map +1 -0
- package/dist/Values/Mat3Value.d.ts +7 -0
- package/dist/Values/Mat3Value.d.ts.map +1 -0
- package/dist/Values/Mat3Value.js +16 -0
- package/dist/Values/Mat3Value.js.map +1 -0
- package/dist/Values/Mat4Value.d.ts +7 -0
- package/dist/Values/Mat4Value.d.ts.map +1 -0
- package/dist/Values/Mat4Value.js +16 -0
- package/dist/Values/Mat4Value.js.map +1 -0
- package/dist/Values/QuatValue.d.ts +7 -0
- package/dist/Values/QuatValue.d.ts.map +1 -0
- package/dist/Values/QuatValue.js +21 -0
- package/dist/Values/QuatValue.js.map +1 -0
- package/dist/Values/Vec2Value.d.ts +7 -0
- package/dist/Values/Vec2Value.d.ts.map +1 -0
- package/dist/Values/Vec2Value.js +16 -0
- package/dist/Values/Vec2Value.js.map +1 -0
- package/dist/Values/Vec3Value.d.ts +7 -0
- package/dist/Values/Vec3Value.d.ts.map +1 -0
- package/dist/Values/Vec3Value.js +20 -0
- package/dist/Values/Vec3Value.js.map +1 -0
- package/dist/Values/Vec4Value.d.ts +7 -0
- package/dist/Values/Vec4Value.d.ts.map +1 -0
- package/dist/Values/Vec4Value.js +21 -0
- package/dist/Values/Vec4Value.js.map +1 -0
- package/dist/_virtual/rolldown_runtime.js +35 -0
- package/dist/behave-graph.manifest.json +6082 -0
- package/dist/buildScene.d.ts +74 -0
- package/dist/buildScene.d.ts.map +1 -0
- package/dist/buildScene.js +304 -0
- package/dist/buildScene.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- 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 +10 -0
- package/dist/registerSceneProfile.d.ts.map +1 -0
- package/dist/registerSceneProfile.js +112 -0
- package/dist/registerSceneProfile.js.map +1 -0
- 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 +42 -13
- 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/Logic/QuatNodes.ts +11 -11
- 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/graphs/logic/Color.json +53 -53
- package/tests/graphs/logic/Euler.json +53 -53
- package/tests/graphs/logic/Quaternion.json +56 -56
- package/tests/graphs/logic/Vector2.json +50 -50
- package/tests/graphs/logic/Vector3.json +53 -53
- package/tests/graphs/logic/Vector4.json +56 -56
- package/tests/manifest.test.ts +65 -0
- package/tests/readSceneGraphs.test.ts +8 -1
- package/tests/registerSceneProfile.test.ts +6 -5
- package/tests/tsconfig.json +10 -10
- package/tsconfig.json +61 -54
- 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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { EPSILON, equalsTolerance, parseSafeFloats, toSafeString } from "@kiberon-labs/behave-graph";
|
|
2
|
+
|
|
3
|
+
//#region src/Values/Internal/Vec2.ts
|
|
4
|
+
var Vec2 = class Vec2 {
|
|
5
|
+
x;
|
|
6
|
+
y;
|
|
7
|
+
constructor(x = 0, y = 0) {
|
|
8
|
+
this.x = x;
|
|
9
|
+
this.y = y;
|
|
10
|
+
}
|
|
11
|
+
clone(result = new Vec2()) {
|
|
12
|
+
return result.set(this.x, this.y);
|
|
13
|
+
}
|
|
14
|
+
set(x, y) {
|
|
15
|
+
this.x = x;
|
|
16
|
+
this.y = y;
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function vec2Equals(a, b, tolerance = EPSILON) {
|
|
21
|
+
return equalsTolerance(a.x, b.x, tolerance) && equalsTolerance(a.y, b.y, tolerance);
|
|
22
|
+
}
|
|
23
|
+
function vec2Add(a, b, result = new Vec2()) {
|
|
24
|
+
return result.set(a.x + b.x, a.y + b.y);
|
|
25
|
+
}
|
|
26
|
+
function vec2Subtract(a, b, result = new Vec2()) {
|
|
27
|
+
return result.set(a.x - b.x, a.y - b.y);
|
|
28
|
+
}
|
|
29
|
+
function vec2MultiplyByScalar(a, b, result = new Vec2()) {
|
|
30
|
+
return result.set(a.x * b, a.y * b);
|
|
31
|
+
}
|
|
32
|
+
function vec2Negate(a, result = new Vec2()) {
|
|
33
|
+
return result.set(-a.x, -a.y);
|
|
34
|
+
}
|
|
35
|
+
function vec2Length(a) {
|
|
36
|
+
return Math.sqrt(vec2Dot(a, a));
|
|
37
|
+
}
|
|
38
|
+
function vec2Normalize(a, result = new Vec2()) {
|
|
39
|
+
return vec2MultiplyByScalar(a, 1 / vec2Length(a), result);
|
|
40
|
+
}
|
|
41
|
+
function vec2Dot(a, b) {
|
|
42
|
+
return a.x * b.x + a.y * b.y;
|
|
43
|
+
}
|
|
44
|
+
function vec2Mix(a, b, t, result = new Vec2()) {
|
|
45
|
+
const s = 1 - t;
|
|
46
|
+
return result.set(a.x * s + b.x * t, a.y * s + b.y * t);
|
|
47
|
+
}
|
|
48
|
+
function vec2FromArray(array, offset = 0, result = new Vec2()) {
|
|
49
|
+
return result.set(array[offset + 0], array[offset + 1]);
|
|
50
|
+
}
|
|
51
|
+
function vec2ToArray(a, array, offset = 0) {
|
|
52
|
+
array[offset + 0] = a.x;
|
|
53
|
+
array[offset + 1] = a.y;
|
|
54
|
+
}
|
|
55
|
+
function vec2ToString(a) {
|
|
56
|
+
return toSafeString([a.x, a.y]);
|
|
57
|
+
}
|
|
58
|
+
function vec2Parse(text, result = new Vec2()) {
|
|
59
|
+
return vec2FromArray(parseSafeFloats(text), 0, result);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { Vec2, vec2Add, vec2Dot, vec2Equals, vec2FromArray, vec2Length, vec2Mix, vec2MultiplyByScalar, vec2Negate, vec2Normalize, vec2Parse, vec2Subtract, vec2ToArray, vec2ToString };
|
|
64
|
+
//# sourceMappingURL=Vec2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec2.js","names":[],"sources":["../../../src/Values/Internal/Vec2.ts"],"sourcesContent":["import {\n EPSILON,\n equalsTolerance,\n parseSafeFloats,\n toSafeString\n} from '@kiberon-labs/behave-graph';\n\nexport type Vec2JSON = number[];\n\nexport class Vec2 {\n public x: number;\n public y: number;\n constructor(x: number = 0, y: number = 0) {\n this.x = x;\n this.y = y;\n }\n\n clone(result = new Vec2()): Vec2 {\n return result.set(this.x, this.y);\n }\n set(x: number, y: number): this {\n this.x = x;\n this.y = y;\n return this;\n }\n}\n\nexport function vec2Equals(\n a: Vec2,\n b: Vec2,\n tolerance: number = EPSILON\n): boolean {\n return (\n equalsTolerance(a.x, b.x, tolerance) && equalsTolerance(a.y, b.y, tolerance)\n );\n}\nexport function vec2Add(a: Vec2, b: Vec2, result: Vec2 = new Vec2()): Vec2 {\n return result.set(a.x + b.x, a.y + b.y);\n}\nexport function vec2Subtract(\n a: Vec2,\n b: Vec2,\n result: Vec2 = new Vec2()\n): Vec2 {\n return result.set(a.x - b.x, a.y - b.y);\n}\nexport function vec2MultiplyByScalar(\n a: Vec2,\n b: number,\n result: Vec2 = new Vec2()\n): Vec2 {\n return result.set(a.x * b, a.y * b);\n}\nexport function vec2Negate(a: Vec2, result: Vec2 = new Vec2()): Vec2 {\n return result.set(-a.x, -a.y);\n}\nexport function vec2Length(a: Vec2): number {\n return Math.sqrt(vec2Dot(a, a));\n}\nexport function vec2Normalize(a: Vec2, result: Vec2 = new Vec2()): Vec2 {\n const invLength = 1 / vec2Length(a);\n return vec2MultiplyByScalar(a, invLength, result);\n}\nexport function vec2Dot(a: Vec2, b: Vec2): number {\n return a.x * b.x + a.y * b.y;\n}\nexport function vec2Mix(\n a: Vec2,\n b: Vec2,\n t: number,\n result = new Vec2()\n): Vec2 {\n const s = 1 - t;\n return result.set(a.x * s + b.x * t, a.y * s + b.y * t);\n}\nexport function vec2FromArray(\n array: Float32Array | number[],\n offset = 0,\n result: Vec2 = new Vec2()\n): Vec2 {\n return result.set(array[offset + 0]!, array[offset + 1]!);\n}\nexport function vec2ToArray(\n a: Vec2,\n array: Float32Array | number[],\n offset = 0\n): void {\n array[offset + 0] = a.x;\n array[offset + 1] = a.y;\n}\n\nexport function vec2ToString(a: Vec2): string {\n return toSafeString([a.x, a.y]);\n}\nexport function vec2Parse(text: string, result = new Vec2()): Vec2 {\n return vec2FromArray(parseSafeFloats(text), 0, result);\n}\n"],"mappings":";;;AASA,IAAa,OAAb,MAAa,KAAK;CAChB,AAAO;CACP,AAAO;CACP,YAAY,IAAY,GAAG,IAAY,GAAG;AACxC,OAAK,IAAI;AACT,OAAK,IAAI;;CAGX,MAAM,SAAS,IAAI,MAAM,EAAQ;AAC/B,SAAO,OAAO,IAAI,KAAK,GAAG,KAAK,EAAE;;CAEnC,IAAI,GAAW,GAAiB;AAC9B,OAAK,IAAI;AACT,OAAK,IAAI;AACT,SAAO;;;AAIX,SAAgB,WACd,GACA,GACA,YAAoB,SACX;AACT,QACE,gBAAgB,EAAE,GAAG,EAAE,GAAG,UAAU,IAAI,gBAAgB,EAAE,GAAG,EAAE,GAAG,UAAU;;AAGhF,SAAgB,QAAQ,GAAS,GAAS,SAAe,IAAI,MAAM,EAAQ;AACzE,QAAO,OAAO,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;;AAEzC,SAAgB,aACd,GACA,GACA,SAAe,IAAI,MAAM,EACnB;AACN,QAAO,OAAO,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;;AAEzC,SAAgB,qBACd,GACA,GACA,SAAe,IAAI,MAAM,EACnB;AACN,QAAO,OAAO,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE;;AAErC,SAAgB,WAAW,GAAS,SAAe,IAAI,MAAM,EAAQ;AACnE,QAAO,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;;AAE/B,SAAgB,WAAW,GAAiB;AAC1C,QAAO,KAAK,KAAK,QAAQ,GAAG,EAAE,CAAC;;AAEjC,SAAgB,cAAc,GAAS,SAAe,IAAI,MAAM,EAAQ;AAEtE,QAAO,qBAAqB,GADV,IAAI,WAAW,EAAE,EACO,OAAO;;AAEnD,SAAgB,QAAQ,GAAS,GAAiB;AAChD,QAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;;AAE7B,SAAgB,QACd,GACA,GACA,GACA,SAAS,IAAI,MAAM,EACb;CACN,MAAM,IAAI,IAAI;AACd,QAAO,OAAO,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE;;AAEzD,SAAgB,cACd,OACA,SAAS,GACT,SAAe,IAAI,MAAM,EACnB;AACN,QAAO,OAAO,IAAI,MAAM,SAAS,IAAK,MAAM,SAAS,GAAI;;AAE3D,SAAgB,YACd,GACA,OACA,SAAS,GACH;AACN,OAAM,SAAS,KAAK,EAAE;AACtB,OAAM,SAAS,KAAK,EAAE;;AAGxB,SAAgB,aAAa,GAAiB;AAC5C,QAAO,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;;AAEjC,SAAgB,UAAU,MAAc,SAAS,IAAI,MAAM,EAAQ;AACjE,QAAO,cAAc,gBAAgB,KAAK,EAAE,GAAG,OAAO"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Vec4 } from "./Vec4.js";
|
|
2
|
+
import { Mat4 } from "./Mat4.js";
|
|
3
|
+
import { Mat3 } from "./Mat3.js";
|
|
4
|
+
|
|
5
|
+
//#region src/Values/Internal/Vec3.d.ts
|
|
6
|
+
type Vec3JSON = [number, number, number];
|
|
7
|
+
declare class Vec3 {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
z: number;
|
|
11
|
+
constructor(x?: number, y?: number, z?: number);
|
|
12
|
+
clone(result?: Vec3): Vec3;
|
|
13
|
+
set(x: number, y: number, z: number): this;
|
|
14
|
+
}
|
|
15
|
+
declare function vec3Equals(a: Vec3, b: Vec3, tolerance?: number): boolean;
|
|
16
|
+
declare function vec3Add(a: Vec3, b: Vec3, result?: Vec3): Vec3;
|
|
17
|
+
declare function vec3Subtract(a: Vec3, b: Vec3, result?: Vec3): Vec3;
|
|
18
|
+
declare function vec3MultiplyByScalar(a: Vec3, b: number, result?: Vec3): Vec3;
|
|
19
|
+
declare function vec3Negate(a: Vec3, result?: Vec3): Vec3;
|
|
20
|
+
declare function vec3Length(a: Vec3): number;
|
|
21
|
+
declare function vec3Normalize(a: Vec3, result?: Vec3): Vec3;
|
|
22
|
+
declare function vec3Dot(a: Vec3, b: Vec3): number;
|
|
23
|
+
declare function vec3Cross(a: Vec3, b: Vec3, result?: Vec3): Vec3;
|
|
24
|
+
declare function vec3Mix(a: Vec3, b: Vec3, t: number, result?: Vec3): Vec3;
|
|
25
|
+
declare function vec3FromArray(array: Float32Array | number[], offset?: number, result?: Vec3): Vec3;
|
|
26
|
+
declare function vec3ToArray(a: Vec3, array: Float32Array | number[], offset?: number): void;
|
|
27
|
+
declare function vec3ToString(a: Vec3): string;
|
|
28
|
+
declare function vec3Parse(text: string, result?: Vec3): Vec3;
|
|
29
|
+
declare function hslToRGB(hsl: Vec3, result?: Vec3): Vec3;
|
|
30
|
+
declare function rgbToHSL(rgb: Vec3, result?: Vec3): Vec3;
|
|
31
|
+
declare function hexToRGB(hex: number, result?: Vec3): Vec3;
|
|
32
|
+
declare function rgbToHex(rgb: Vec3): number;
|
|
33
|
+
declare function mat3ToEuler(m: Mat3, result?: Vec3): Vec3;
|
|
34
|
+
declare function mat4ToEuler(m: Mat4, result?: Vec3): Vec3;
|
|
35
|
+
declare function quatToEuler(q: Vec4, result?: Vec3): Vec3;
|
|
36
|
+
//#endregion
|
|
37
|
+
export { Vec3, Vec3JSON, hexToRGB, hslToRGB, mat3ToEuler, mat4ToEuler, quatToEuler, rgbToHSL, rgbToHex, vec3Add, vec3Cross, vec3Dot, vec3Equals, vec3FromArray, vec3Length, vec3Mix, vec3MultiplyByScalar, vec3Negate, vec3Normalize, vec3Parse, vec3Subtract, vec3ToArray, vec3ToString };
|
|
38
|
+
//# sourceMappingURL=Vec3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec3.d.ts","names":[],"sources":["../../../src/Values/Internal/Vec3.ts"],"sourcesContent":[],"mappings":";;;;;KAaY,QAAA;cAEC,IAAA;EAFD,CAAA,EAAA,MAAA;EAEC,CAAA,EAAA,MAAI;EAsBD,CAAA,EAAA,MAAA;EAWA,WAAO,CAAA,CAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,EAAA,MAAA;EAAI,KAAA,CAAA,MAAA,CAAA,EAvBb,IAuBa,CAAA,EAvBG,IAuBH;EAAS,GAAA,CAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAA4B,iBAXhD,UAAA,CAWgD,CAAA,EAV3D,IAU2D,EAAA,CAAA,EAT3D,IAS2D,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAAI,iBAApD,OAAA,CAAoD,CAAA,EAAzC,IAAyC,EAAA,CAAA,EAAhC,IAAgC,EAAA,MAAA,CAAA,EAApB,IAAoB,CAAA,EAAJ,IAAI;AAGpD,iBAAA,YAAA,CAAY,CAAA,EAAI,IAAJ,EAAA,CAAA,EAAa,IAAb,EAAA,MAAA,CAAA,EAAyB,IAAzB,CAAA,EAAyC,IAAzC;AAAI,iBAGhB,oBAAA,CAHgB,CAAA,EAI3B,IAJ2B,EAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAMxB,IANwB,CAAA,EAO7B,IAP6B;AAAS,iBAUzB,UAAA,CAVyB,CAAA,EAUX,IAVW,EAAA,MAAA,CAAA,EAUC,IAVD,CAAA,EAUiB,IAVjB;AAAY,iBAarC,UAAA,CAbqC,CAAA,EAavB,IAbuB,CAAA,EAAA,MAAA;AAAgB,iBAgBrD,aAAA,CAhBqD,CAAA,EAgBpC,IAhBoC,EAAA,MAAA,CAAA,EAgBxB,IAhBwB,CAAA,EAgBR,IAhBQ;AAAI,iBAoBzD,OAAA,CApByD,CAAA,EAoB9C,IApB8C,EAAA,CAAA,EAoBrC,IApBqC,CAAA,EAAA,MAAA;AAGzD,iBAoBA,SAAA,CApBoB,CAAA,EAoBP,IApBO,EAAA,CAAA,EAoBE,IApBF,EAAA,MAAA,CAAA,EAoBc,IApBd,CAAA,EAoB8B,IApB9B;AAC/B,iBA6BW,OAAA,CA7BX,CAAA,EA8BA,IA9BA,EAAA,CAAA,EA+BA,IA/BA,EAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAiCG,IAjCH,CAAA,EAkCF,IAlCE;AAEG,iBAoCQ,aAAA,CApCR,KAAA,EAqCC,YArCD,GAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAuCA,IAvCA,CAAA,EAwCL,IAxCK;AACL,iBA0Ca,WAAA,CA1Cb,CAAA,EA2CE,IA3CF,EAAA,KAAA,EA4CM,YA5CN,GAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;AAAI,iBAmDS,YAAA,CAnDT,CAAA,EAmDyB,IAnDzB,CAAA,EAAA,MAAA;AAGS,iBAmDA,SAAA,CAnDU,IAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAmDoB,IAnDpB,CAAA,EAmDoC,IAnDpC;AAAI,iBAuDd,QAAA,CAvDc,GAAA,EAuDA,IAvDA,EAAA,MAAA,CAAA,EAuDY,IAvDZ,CAAA,EAuD4B,IAvD5B;AAAY,iBA+F1B,QAAA,CA/F0B,GAAA,EA+FZ,IA/FY,EAAA,MAAA,CAAA,EA+FA,IA/FA,CAAA,EA+FgB,IA/FhB;AAAgB,iBAuI1C,QAAA,CAvI0C,GAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAuId,IAvIc,CAAA,EAuIE,IAvIF;AAAI,iBAgJ9C,QAAA,CAhJ8C,GAAA,EAgJhC,IAhJgC,CAAA,EAAA,MAAA;AAG9C,iBAkJA,WAAA,CAlJkB,CAAA,EAkJH,IAlJG,EAAA,MAAA,CAAA,EAkJS,IAlJT,CAAA,EAkJyB,IAlJzB;AAGlB,iBA2KA,WAAA,CA3Ka,CAAA,EA2KE,IA3KF,EAAA,MAAA,CAAA,EA2Kc,IA3Kd,CAAA,EA2K8B,IA3K9B;AAAI,iBA+KjB,WAAA,CA/KiB,CAAA,EA+KF,IA/KE,EAAA,MAAA,CAAA,EA+KU,IA/KV,CAAA,EA+K0B,IA/K1B"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { mat4ToMat3, quatToMat3 } from "./Mat3.js";
|
|
2
|
+
import { EPSILON, clamp, equalsTolerance, parseSafeFloats, toSafeString } from "@kiberon-labs/behave-graph";
|
|
3
|
+
|
|
4
|
+
//#region src/Values/Internal/Vec3.ts
|
|
5
|
+
var Vec3 = class Vec3 {
|
|
6
|
+
x;
|
|
7
|
+
y;
|
|
8
|
+
z;
|
|
9
|
+
constructor(x = 0, y = 0, z = 0) {
|
|
10
|
+
this.x = x;
|
|
11
|
+
this.y = y;
|
|
12
|
+
this.z = z;
|
|
13
|
+
}
|
|
14
|
+
clone(result = new Vec3()) {
|
|
15
|
+
return result.set(this.x, this.y, this.z);
|
|
16
|
+
}
|
|
17
|
+
set(x, y, z) {
|
|
18
|
+
this.x = x;
|
|
19
|
+
this.y = y;
|
|
20
|
+
this.z = z;
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
function vec3Equals(a, b, tolerance = EPSILON) {
|
|
25
|
+
return equalsTolerance(a.x, b.x, tolerance) && equalsTolerance(a.y, b.y, tolerance) && equalsTolerance(a.z, b.z, tolerance);
|
|
26
|
+
}
|
|
27
|
+
function vec3Add(a, b, result = new Vec3()) {
|
|
28
|
+
return result.set(a.x + b.x, a.y + b.y, a.z + b.z);
|
|
29
|
+
}
|
|
30
|
+
function vec3Subtract(a, b, result = new Vec3()) {
|
|
31
|
+
return result.set(a.x - b.x, a.y - b.y, a.z - b.z);
|
|
32
|
+
}
|
|
33
|
+
function vec3MultiplyByScalar(a, b, result = new Vec3()) {
|
|
34
|
+
return result.set(a.x * b, a.y * b, a.z * b);
|
|
35
|
+
}
|
|
36
|
+
function vec3Negate(a, result = new Vec3()) {
|
|
37
|
+
return result.set(-a.x, -a.y, -a.z);
|
|
38
|
+
}
|
|
39
|
+
function vec3Length(a) {
|
|
40
|
+
return Math.sqrt(vec3Dot(a, a));
|
|
41
|
+
}
|
|
42
|
+
function vec3Normalize(a, result = new Vec3()) {
|
|
43
|
+
return vec3MultiplyByScalar(a, 1 / vec3Length(a), result);
|
|
44
|
+
}
|
|
45
|
+
function vec3Dot(a, b) {
|
|
46
|
+
return a.x * b.x + a.y * b.y + a.z * b.z;
|
|
47
|
+
}
|
|
48
|
+
function vec3Cross(a, b, result = new Vec3()) {
|
|
49
|
+
const ax = a.x;
|
|
50
|
+
const ay = a.y;
|
|
51
|
+
const az = a.z;
|
|
52
|
+
const bx = b.x;
|
|
53
|
+
const by = b.y;
|
|
54
|
+
const bz = b.z;
|
|
55
|
+
return result.set(ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx);
|
|
56
|
+
}
|
|
57
|
+
function vec3Mix(a, b, t, result = new Vec3()) {
|
|
58
|
+
const s = 1 - t;
|
|
59
|
+
return result.set(a.x * s + b.x * t, a.y * s + b.y * t, a.z * s + b.z * t);
|
|
60
|
+
}
|
|
61
|
+
function vec3FromArray(array, offset = 0, result = new Vec3()) {
|
|
62
|
+
return result.set(array[offset + 0], array[offset + 1], array[offset + 2]);
|
|
63
|
+
}
|
|
64
|
+
function vec3ToArray(a, array, offset = 0) {
|
|
65
|
+
array[offset + 0] = a.x;
|
|
66
|
+
array[offset + 1] = a.y;
|
|
67
|
+
array[offset + 2] = a.z;
|
|
68
|
+
}
|
|
69
|
+
function vec3ToString(a) {
|
|
70
|
+
return toSafeString([
|
|
71
|
+
a.x,
|
|
72
|
+
a.y,
|
|
73
|
+
a.z
|
|
74
|
+
]);
|
|
75
|
+
}
|
|
76
|
+
function vec3Parse(text, result = new Vec3()) {
|
|
77
|
+
return vec3FromArray(parseSafeFloats(text), 0, result);
|
|
78
|
+
}
|
|
79
|
+
function hslToRGB(hsl, result = new Vec3()) {
|
|
80
|
+
function hue2rgb(p$1, q$1, t) {
|
|
81
|
+
if (t < 0) t += 1;
|
|
82
|
+
if (t > 1) t -= 1;
|
|
83
|
+
if (t < 1 / 6) return p$1 + (q$1 - p$1) * 6 * t;
|
|
84
|
+
if (t < 1 / 2) return q$1;
|
|
85
|
+
if (t < 2 / 3) return p$1 + (q$1 - p$1) * 6 * (2 / 3 - t);
|
|
86
|
+
return p$1;
|
|
87
|
+
}
|
|
88
|
+
const h = (hsl.x % 1 + 1) % 1;
|
|
89
|
+
const s = Math.min(Math.max(hsl.y, 0), 1);
|
|
90
|
+
const l = Math.min(Math.max(hsl.z, 0), 1);
|
|
91
|
+
if (s === 0) return result.set(1, 1, 1);
|
|
92
|
+
const p = l <= .5 ? l * (1 + s) : l + s - l * s;
|
|
93
|
+
const q = 2 * l - p;
|
|
94
|
+
return result.set(hue2rgb(q, p, h + 1 / 3), hue2rgb(q, p, h), hue2rgb(q, p, h - 1 / 3));
|
|
95
|
+
}
|
|
96
|
+
function rgbToHSL(rgb, result = new Vec3()) {
|
|
97
|
+
const r = rgb.x, g = rgb.y, b = rgb.z;
|
|
98
|
+
const max = Math.max(r, g, b);
|
|
99
|
+
const min = Math.min(r, g, b);
|
|
100
|
+
let hue = 0;
|
|
101
|
+
let saturation = 0;
|
|
102
|
+
const lightness = (min + max) / 2;
|
|
103
|
+
if (min === max) {
|
|
104
|
+
hue = 0;
|
|
105
|
+
saturation = 0;
|
|
106
|
+
} else {
|
|
107
|
+
const delta = max - min;
|
|
108
|
+
saturation = lightness <= .5 ? delta / (max + min) : delta / (2 - max - min);
|
|
109
|
+
switch (max) {
|
|
110
|
+
case r:
|
|
111
|
+
hue = (g - b) / delta + (g < b ? 6 : 0);
|
|
112
|
+
break;
|
|
113
|
+
case g:
|
|
114
|
+
hue = (b - r) / delta + 2;
|
|
115
|
+
break;
|
|
116
|
+
case b:
|
|
117
|
+
hue = (r - g) / delta + 4;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
hue /= 6;
|
|
121
|
+
}
|
|
122
|
+
return result.set(hue, saturation, lightness);
|
|
123
|
+
}
|
|
124
|
+
function hexToRGB(hex, result = new Vec3()) {
|
|
125
|
+
hex = Math.floor(hex);
|
|
126
|
+
return result.set((hex >> 16 & 255) / 255, (hex >> 8 & 255) / 255, (hex & 255) / 255);
|
|
127
|
+
}
|
|
128
|
+
function rgbToHex(rgb) {
|
|
129
|
+
return rgb.x * 255 << 16 ^ rgb.y * 255 << 8 ^ rgb.z * 255 << 0;
|
|
130
|
+
}
|
|
131
|
+
function mat3ToEuler(m, result = new Vec3()) {
|
|
132
|
+
const te = m.elements;
|
|
133
|
+
const m11 = te[0], m12 = te[3], m13 = te[6];
|
|
134
|
+
te[1];
|
|
135
|
+
const m22 = te[4], m23 = te[7];
|
|
136
|
+
te[2];
|
|
137
|
+
const m32 = te[5], m33 = te[8];
|
|
138
|
+
result.y = Math.asin(clamp(m13, -1, 1));
|
|
139
|
+
if (Math.abs(m13) < .9999999) {
|
|
140
|
+
result.x = Math.atan2(-m23, m33);
|
|
141
|
+
result.z = Math.atan2(-m12, m11);
|
|
142
|
+
} else {
|
|
143
|
+
result.x = Math.atan2(m32, m22);
|
|
144
|
+
result.z = 0;
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
function mat4ToEuler(m, result = new Vec3()) {
|
|
149
|
+
return mat3ToEuler(mat4ToMat3(m), result);
|
|
150
|
+
}
|
|
151
|
+
function quatToEuler(q, result = new Vec3()) {
|
|
152
|
+
return mat3ToEuler(quatToMat3(q), result);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
//#endregion
|
|
156
|
+
export { Vec3, hexToRGB, hslToRGB, mat3ToEuler, mat4ToEuler, quatToEuler, rgbToHSL, rgbToHex, vec3Add, vec3Cross, vec3Dot, vec3Equals, vec3FromArray, vec3Length, vec3Mix, vec3MultiplyByScalar, vec3Negate, vec3Normalize, vec3Parse, vec3Subtract, vec3ToArray, vec3ToString };
|
|
157
|
+
//# sourceMappingURL=Vec3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec3.js","names":["p","q"],"sources":["../../../src/Values/Internal/Vec3.ts"],"sourcesContent":["import {\n clamp,\n EPSILON,\n equalsTolerance,\n parseSafeFloats,\n toSafeString\n} from '@kiberon-labs/behave-graph';\n\nimport type { Mat3 } from './Mat3.js';\nimport { mat4ToMat3, quatToMat3 } from './Mat3.js';\nimport type { Mat4 } from './Mat4.js';\nimport type { Vec4 } from './Vec4.js';\n\nexport type Vec3JSON = [number, number, number];\n\nexport class Vec3 {\n public x: number;\n public y: number;\n public z: number;\n constructor(x: number = 0, y: number = 0, z: number = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n clone(result = new Vec3()): Vec3 {\n return result.set(this.x, this.y, this.z);\n }\n\n set(x: number, y: number, z: number): this {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n}\n\nexport function vec3Equals(\n a: Vec3,\n b: Vec3,\n tolerance: number = EPSILON\n): boolean {\n return (\n equalsTolerance(a.x, b.x, tolerance) &&\n equalsTolerance(a.y, b.y, tolerance) &&\n equalsTolerance(a.z, b.z, tolerance)\n );\n}\nexport function vec3Add(a: Vec3, b: Vec3, result = new Vec3()): Vec3 {\n return result.set(a.x + b.x, a.y + b.y, a.z + b.z);\n}\nexport function vec3Subtract(a: Vec3, b: Vec3, result = new Vec3()): Vec3 {\n return result.set(a.x - b.x, a.y - b.y, a.z - b.z);\n}\nexport function vec3MultiplyByScalar(\n a: Vec3,\n b: number,\n result = new Vec3()\n): Vec3 {\n return result.set(a.x * b, a.y * b, a.z * b);\n}\nexport function vec3Negate(a: Vec3, result = new Vec3()): Vec3 {\n return result.set(-a.x, -a.y, -a.z);\n}\nexport function vec3Length(a: Vec3): number {\n return Math.sqrt(vec3Dot(a, a));\n}\nexport function vec3Normalize(a: Vec3, result = new Vec3()): Vec3 {\n const invLength = 1 / vec3Length(a);\n return vec3MultiplyByScalar(a, invLength, result);\n}\nexport function vec3Dot(a: Vec3, b: Vec3): number {\n return a.x * b.x + a.y * b.y + a.z * b.z;\n}\nexport function vec3Cross(a: Vec3, b: Vec3, result = new Vec3()): Vec3 {\n const ax = a.x;\n const ay = a.y;\n const az = a.z;\n const bx = b.x;\n const by = b.y;\n const bz = b.z;\n\n return result.set(ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx);\n}\nexport function vec3Mix(\n a: Vec3,\n b: Vec3,\n t: number,\n result = new Vec3()\n): Vec3 {\n const s = 1 - t;\n return result.set(a.x * s + b.x * t, a.y * s + b.y * t, a.z * s + b.z * t);\n}\nexport function vec3FromArray(\n array: Float32Array | number[],\n offset = 0,\n result = new Vec3()\n): Vec3 {\n return result.set(array[offset + 0]!, array[offset + 1]!, array[offset + 2]!);\n}\nexport function vec3ToArray(\n a: Vec3,\n array: Float32Array | number[],\n offset = 0\n): void {\n array[offset + 0] = a.x;\n array[offset + 1] = a.y;\n array[offset + 2] = a.z;\n}\nexport function vec3ToString(a: Vec3): string {\n return toSafeString([a.x, a.y, a.z]);\n}\nexport function vec3Parse(text: string, result = new Vec3()): Vec3 {\n return vec3FromArray(parseSafeFloats(text), 0, result);\n}\n\nexport function hslToRGB(hsl: Vec3, result = new Vec3()): Vec3 {\n function hue2rgb(p: number, q: number, t: number): number {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * 6 * (2 / 3 - t);\n }\n\n return p;\n }\n\n // h,s,l ranges are in 0.0 - 1.0\n const h = ((hsl.x % 1) + 1) % 1; // euclidean modulo\n const s = Math.min(Math.max(hsl.y, 0), 1);\n const l = Math.min(Math.max(hsl.z, 0), 1);\n\n if (s === 0) {\n return result.set(1, 1, 1);\n }\n\n const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n const q = 2 * l - p;\n\n return result.set(\n hue2rgb(q, p, h + 1 / 3),\n hue2rgb(q, p, h),\n hue2rgb(q, p, h - 1 / 3)\n );\n}\n\nexport function rgbToHSL(rgb: Vec3, result = new Vec3()): Vec3 {\n // h,s,l ranges are in 0.0 - 1.0\n const r = rgb.x,\n g = rgb.y,\n b = rgb.z;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n let hue = 0;\n let saturation = 0;\n const lightness = (min + max) / 2;\n\n if (min === max) {\n hue = 0;\n saturation = 0;\n } else {\n const delta = max - min;\n\n saturation =\n lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\n\n switch (max) {\n case r:\n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g:\n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n\n hue /= 6;\n }\n\n return result.set(hue, saturation, lightness);\n}\n\nexport function hexToRGB(hex: number, result = new Vec3()): Vec3 {\n hex = Math.floor(hex);\n return result.set(\n ((hex >> 16) & 255) / 255,\n ((hex >> 8) & 255) / 255,\n (hex & 255) / 255\n );\n}\n\nexport function rgbToHex(rgb: Vec3): number {\n return ((rgb.x * 255) << 16) ^ ((rgb.y * 255) << 8) ^ ((rgb.z * 255) << 0);\n}\n\n// from three.js\nexport function mat3ToEuler(m: Mat3, result = new Vec3()): Vec3 {\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n const te = m.elements;\n const m11 = te[0],\n m12 = te[3],\n m13 = te[6];\n const m21 = te[1],\n m22 = te[4],\n m23 = te[7];\n const m31 = te[2],\n m32 = te[5],\n m33 = te[8];\n\n result.y = Math.asin(clamp(m13, -1, 1));\n\n if (Math.abs(m13) < 0.9999999) {\n result.x = Math.atan2(-m23, m33);\n result.z = Math.atan2(-m12, m11);\n } else {\n result.x = Math.atan2(m32, m22);\n result.z = 0;\n }\n\n return result;\n}\n\n// from three.js\nexport function mat4ToEuler(m: Mat4, result = new Vec3()): Vec3 {\n return mat3ToEuler(mat4ToMat3(m), result);\n}\n\nexport function quatToEuler(q: Vec4, result = new Vec3()): Vec3 {\n return mat3ToEuler(quatToMat3(q), result);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Vec3 } from "./Vec3.js";
|
|
2
|
+
import { Mat4 } from "./Mat4.js";
|
|
3
|
+
import { Mat3 } from "./Mat3.js";
|
|
4
|
+
|
|
5
|
+
//#region src/Values/Internal/Vec4.d.ts
|
|
6
|
+
type Vec4JSON = number[];
|
|
7
|
+
declare class Vec4 {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
z: number;
|
|
11
|
+
w: number;
|
|
12
|
+
constructor(x?: number, y?: number, z?: number, w?: number);
|
|
13
|
+
clone(result?: Vec4): Vec4;
|
|
14
|
+
set(x: number, y: number, z: number, w: number): this;
|
|
15
|
+
}
|
|
16
|
+
declare function vec4Equals(a: Vec4, b: Vec4, tolerance?: number): boolean;
|
|
17
|
+
declare function vec4Add(a: Vec4, b: Vec4, result?: Vec4): Vec4;
|
|
18
|
+
declare function vec4Subtract(a: Vec4, b: Vec4, result?: Vec4): Vec4;
|
|
19
|
+
declare function vec4MultiplyByScalar(a: Vec4, b: number, result?: Vec4): Vec4;
|
|
20
|
+
declare function vec4Negate(a: Vec4, result?: Vec4): Vec4;
|
|
21
|
+
declare function vec4Length(a: Vec4): number;
|
|
22
|
+
declare function vec4Normalize(a: Vec4, result?: Vec4): Vec4;
|
|
23
|
+
declare function vec4Dot(a: Vec4, b: Vec4): number;
|
|
24
|
+
declare function vec4Mix(a: Vec4, b: Vec4, t: number, result?: Vec4): Vec4;
|
|
25
|
+
declare function vec4FromArray(array: Float32Array | number[], offset?: number, result?: Vec4): Vec4;
|
|
26
|
+
declare function vec4ToArray(a: Vec4, array: Float32Array | number[], offset?: number): void;
|
|
27
|
+
declare function vec4ToString(a: Vec4): string;
|
|
28
|
+
declare function vec4Parse(text: string, result?: Vec4): Vec4;
|
|
29
|
+
declare function quatConjugate(a: Vec4, result?: Vec4): Vec4;
|
|
30
|
+
declare function quatMultiply(a: Vec4, b: Vec4, result?: Vec4): Vec4;
|
|
31
|
+
declare function quatSlerp(a: Vec4, b: Vec4, t: number, result?: Vec4): Vec4;
|
|
32
|
+
/**
|
|
33
|
+
* Calculate the exponential of a unit quaternion.
|
|
34
|
+
*
|
|
35
|
+
* @param {quat} out the receiving quaternion
|
|
36
|
+
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
|
37
|
+
* @returns {quat} out
|
|
38
|
+
*/
|
|
39
|
+
declare function quatExp(a: Vec4, result?: Vec4): Vec4;
|
|
40
|
+
declare function quatLn(a: Vec4, result?: Vec4): Vec4;
|
|
41
|
+
declare function quatPow(a: Vec4, b: number, result?: Vec4): Vec4;
|
|
42
|
+
declare function eulerToQuat(euler: Vec3, result?: Vec4): Vec4;
|
|
43
|
+
declare function angleAxisToQuat(angle: number, axis: Vec3, result?: Vec4): Vec4;
|
|
44
|
+
declare function quatToAngleAxis(q: Vec4, result?: Vec3): [angle: number, axis: Vec3];
|
|
45
|
+
declare function mat4ToQuat(m: Mat4, result?: Vec4): Vec4;
|
|
46
|
+
declare function mat3ToQuat(m: Mat3, result?: Vec4): Vec4;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { Vec4, Vec4JSON, angleAxisToQuat, eulerToQuat, mat3ToQuat, mat4ToQuat, quatConjugate, quatExp, quatLn, quatMultiply, quatPow, quatSlerp, quatToAngleAxis, vec4Add, vec4Dot, vec4Equals, vec4FromArray, vec4Length, vec4Mix, vec4MultiplyByScalar, vec4Negate, vec4Normalize, vec4Parse, vec4Subtract, vec4ToArray, vec4ToString };
|
|
49
|
+
//# sourceMappingURL=Vec4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec4.d.ts","names":[],"sources":["../../../src/Values/Internal/Vec4.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { mat4ToMat3 } from "./Mat3.js";
|
|
2
|
+
import { Vec3 } from "./Vec3.js";
|
|
3
|
+
import { EPSILON, equalsTolerance, parseSafeFloats, toSafeString } from "@kiberon-labs/behave-graph";
|
|
4
|
+
|
|
5
|
+
//#region src/Values/Internal/Vec4.ts
|
|
6
|
+
var Vec4 = class Vec4 {
|
|
7
|
+
x;
|
|
8
|
+
y;
|
|
9
|
+
z;
|
|
10
|
+
w;
|
|
11
|
+
constructor(x = 0, y = 0, z = 0, w = 0) {
|
|
12
|
+
this.x = x;
|
|
13
|
+
this.y = y;
|
|
14
|
+
this.z = z;
|
|
15
|
+
this.w = w;
|
|
16
|
+
}
|
|
17
|
+
clone(result = new Vec4()) {
|
|
18
|
+
return result.set(this.x, this.y, this.z, this.w);
|
|
19
|
+
}
|
|
20
|
+
set(x, y, z, w) {
|
|
21
|
+
this.x = x;
|
|
22
|
+
this.y = y;
|
|
23
|
+
this.z = z;
|
|
24
|
+
this.w = w;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
function vec4Equals(a, b, tolerance = EPSILON) {
|
|
29
|
+
return equalsTolerance(a.x, b.x, tolerance) && equalsTolerance(a.y, b.y, tolerance) && equalsTolerance(a.z, b.z, tolerance) && equalsTolerance(a.w, b.w, tolerance);
|
|
30
|
+
}
|
|
31
|
+
function vec4Add(a, b, result = new Vec4()) {
|
|
32
|
+
return result.set(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
|
|
33
|
+
}
|
|
34
|
+
function vec4Subtract(a, b, result = new Vec4()) {
|
|
35
|
+
return result.set(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
|
|
36
|
+
}
|
|
37
|
+
function vec4MultiplyByScalar(a, b, result = new Vec4()) {
|
|
38
|
+
return result.set(a.x * b, a.y * b, a.z * b, a.w * b);
|
|
39
|
+
}
|
|
40
|
+
function vec4Negate(a, result = new Vec4()) {
|
|
41
|
+
return result.set(-a.x, -a.y, -a.z, -a.w);
|
|
42
|
+
}
|
|
43
|
+
function vec4Length(a) {
|
|
44
|
+
return Math.sqrt(vec4Dot(a, a));
|
|
45
|
+
}
|
|
46
|
+
function vec4Normalize(a, result = new Vec4()) {
|
|
47
|
+
return vec4MultiplyByScalar(a, 1 / vec4Length(a), result);
|
|
48
|
+
}
|
|
49
|
+
function vec4Dot(a, b) {
|
|
50
|
+
return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
|
|
51
|
+
}
|
|
52
|
+
function vec4Mix(a, b, t, result = new Vec4()) {
|
|
53
|
+
const s = 1 - t;
|
|
54
|
+
return result.set(a.x * s + b.x * t, a.y * s + b.y * t, a.z * s + b.z * t, a.w * s + b.w * t);
|
|
55
|
+
}
|
|
56
|
+
function vec4FromArray(array, offset = 0, result = new Vec4()) {
|
|
57
|
+
return result.set(array[offset + 0], array[offset + 1], array[offset + 2], array[offset + 3]);
|
|
58
|
+
}
|
|
59
|
+
function vec4ToArray(a, array, offset = 0) {
|
|
60
|
+
array[offset + 0] = a.x;
|
|
61
|
+
array[offset + 1] = a.y;
|
|
62
|
+
array[offset + 2] = a.z;
|
|
63
|
+
array[offset + 3] = a.w;
|
|
64
|
+
}
|
|
65
|
+
function vec4ToString(a) {
|
|
66
|
+
return toSafeString([
|
|
67
|
+
a.x,
|
|
68
|
+
a.y,
|
|
69
|
+
a.z,
|
|
70
|
+
a.w
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
function vec4Parse(text, result = new Vec4()) {
|
|
74
|
+
return vec4FromArray(parseSafeFloats(text), 0, result);
|
|
75
|
+
}
|
|
76
|
+
function quatConjugate(a, result = new Vec4()) {
|
|
77
|
+
return result.set(-a.x, -a.y, -a.z, a.w);
|
|
78
|
+
}
|
|
79
|
+
function quatMultiply(a, b, result = new Vec4()) {
|
|
80
|
+
const qax = a.x;
|
|
81
|
+
const qay = a.y;
|
|
82
|
+
const qaz = a.z;
|
|
83
|
+
const qaw = a.w;
|
|
84
|
+
const qbx = b.x;
|
|
85
|
+
const qby = b.y;
|
|
86
|
+
const qbz = b.z;
|
|
87
|
+
const qbw = b.w;
|
|
88
|
+
return result.set(qax * qbw + qaw * qbx + qay * qbz - qaz * qby, qay * qbw + qaw * qby + qaz * qbx - qax * qbz, qaz * qbw + qaw * qbz + qax * qby - qay * qbx, qaw * qbw - qax * qbx - qay * qby - qaz * qbz);
|
|
89
|
+
}
|
|
90
|
+
function quatSlerp(a, b, t, result = new Vec4()) {
|
|
91
|
+
if (t <= 0) return a.clone(result);
|
|
92
|
+
if (t >= 1) return b.clone(result);
|
|
93
|
+
let cosHalfTheta = vec4Dot(a, b);
|
|
94
|
+
if (cosHalfTheta < 0) {
|
|
95
|
+
vec4Negate(b, result);
|
|
96
|
+
cosHalfTheta = -cosHalfTheta;
|
|
97
|
+
} else b.clone(result);
|
|
98
|
+
if (cosHalfTheta >= 1) return result;
|
|
99
|
+
const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta;
|
|
100
|
+
if (sqrSinHalfTheta <= Number.EPSILON) {
|
|
101
|
+
vec4Mix(a, result, t);
|
|
102
|
+
vec4Normalize(result, result);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);
|
|
106
|
+
const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);
|
|
107
|
+
const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta;
|
|
108
|
+
const ratioB = Math.sin(t * halfTheta) / sinHalfTheta;
|
|
109
|
+
result.w = a.w * ratioA + result.w * ratioB;
|
|
110
|
+
result.x = a.x * ratioA + result.x * ratioB;
|
|
111
|
+
result.y = a.y * ratioA + result.y * ratioB;
|
|
112
|
+
result.z = a.z * ratioA + result.z * ratioB;
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Calculate the exponential of a unit quaternion.
|
|
117
|
+
*
|
|
118
|
+
* @param {quat} out the receiving quaternion
|
|
119
|
+
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
|
120
|
+
* @returns {quat} out
|
|
121
|
+
*/
|
|
122
|
+
function quatExp(a, result = new Vec4()) {
|
|
123
|
+
const x = a.x, y = a.y, z = a.z, w = a.w;
|
|
124
|
+
const r = Math.sqrt(x * x + y * y + z * z);
|
|
125
|
+
const et = Math.exp(w);
|
|
126
|
+
const s = r > 0 ? et * Math.sin(r) / r : 0;
|
|
127
|
+
return result.set(x * s, y * s, z * s, et * Math.cos(r));
|
|
128
|
+
}
|
|
129
|
+
function quatLn(a, result = new Vec4()) {
|
|
130
|
+
const x = a.x, y = a.y, z = a.z, w = a.w;
|
|
131
|
+
const r = Math.sqrt(x * x + y * y + z * z);
|
|
132
|
+
const t = r > 0 ? Math.atan2(r, w) / r : 0;
|
|
133
|
+
return result.set(x * t, y * t, z * t, .5 * Math.log(x * x + y * y + z * z + w * w));
|
|
134
|
+
}
|
|
135
|
+
function quatPow(a, b, result = new Vec4()) {
|
|
136
|
+
quatExp(vec4MultiplyByScalar(quatLn(a), b), result);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
function eulerToQuat(euler, result = new Vec4()) {
|
|
140
|
+
const c1 = Math.cos(euler.x / 2);
|
|
141
|
+
const c2 = Math.cos(euler.y / 2);
|
|
142
|
+
const c3 = Math.cos(euler.z / 2);
|
|
143
|
+
const s1 = Math.sin(euler.x / 2);
|
|
144
|
+
const s2 = Math.sin(euler.y / 2);
|
|
145
|
+
const s3 = Math.sin(euler.z / 2);
|
|
146
|
+
return result.set(s1 * c2 * c3 + c1 * s2 * s3, c1 * s2 * c3 - s1 * c2 * s3, c1 * c2 * s3 + s1 * s2 * c3, c1 * c2 * c3 - s1 * s2 * s3);
|
|
147
|
+
}
|
|
148
|
+
function angleAxisToQuat(angle, axis, result = new Vec4()) {
|
|
149
|
+
const halfAngle = angle / 2;
|
|
150
|
+
const s = Math.sin(halfAngle);
|
|
151
|
+
return result.set(axis.x * s, axis.y * s, axis.z * s, Math.cos(halfAngle));
|
|
152
|
+
}
|
|
153
|
+
function quatToAngleAxis(q, result = new Vec3()) {
|
|
154
|
+
const rad = Math.acos(q.w) * 2;
|
|
155
|
+
const s = Math.sin(rad / 2);
|
|
156
|
+
if (s > EPSILON) {
|
|
157
|
+
result.x = q.x / s;
|
|
158
|
+
result.y = q.y / s;
|
|
159
|
+
result.z = q.z / s;
|
|
160
|
+
} else {
|
|
161
|
+
result.x = 1;
|
|
162
|
+
result.y = 0;
|
|
163
|
+
result.z = 0;
|
|
164
|
+
}
|
|
165
|
+
return [rad, result];
|
|
166
|
+
}
|
|
167
|
+
function mat4ToQuat(m, result = new Vec4()) {
|
|
168
|
+
return mat3ToQuat(mat4ToMat3(m), result);
|
|
169
|
+
}
|
|
170
|
+
function mat3ToQuat(m, result = new Vec4()) {
|
|
171
|
+
const te = m.elements, m11 = te[0], m12 = te[3], m13 = te[6], m21 = te[1], m22 = te[4], m23 = te[7], m31 = te[2], m32 = te[5], m33 = te[8], trace = m11 + m22 + m33;
|
|
172
|
+
if (trace > 0) {
|
|
173
|
+
const s$1 = .5 / Math.sqrt(trace + 1);
|
|
174
|
+
return result.set((m32 - m23) * s$1, (m13 - m31) * s$1, (m21 - m12) * s$1, .25 / s$1);
|
|
175
|
+
}
|
|
176
|
+
if (m11 > m22 && m11 > m33) {
|
|
177
|
+
const s$1 = 2 * Math.sqrt(1 + m11 - m22 - m33);
|
|
178
|
+
return result.set(.25 * s$1, (m12 + m21) / s$1, (m13 + m31) / s$1, (m32 - m23) / s$1);
|
|
179
|
+
}
|
|
180
|
+
if (m22 > m33) {
|
|
181
|
+
const s$1 = 2 * Math.sqrt(1 + m22 - m11 - m33);
|
|
182
|
+
return result.set((m12 + m21) / s$1, .25 * s$1, (m23 + m32) / s$1, (m13 - m31) / s$1);
|
|
183
|
+
}
|
|
184
|
+
const s = 2 * Math.sqrt(1 + m33 - m11 - m22);
|
|
185
|
+
return result.set((m13 + m31) / s, (m23 + m32) / s, .25 * s, (m21 - m12) / s);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
//#endregion
|
|
189
|
+
export { Vec4, angleAxisToQuat, eulerToQuat, mat3ToQuat, mat4ToQuat, quatConjugate, quatExp, quatLn, quatMultiply, quatPow, quatSlerp, quatToAngleAxis, vec4Add, vec4Dot, vec4Equals, vec4FromArray, vec4Length, vec4Mix, vec4MultiplyByScalar, vec4Negate, vec4Normalize, vec4Parse, vec4Subtract, vec4ToArray, vec4ToString };
|
|
190
|
+
//# sourceMappingURL=Vec4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec4.js","names":["s"],"sources":["../../../src/Values/Internal/Vec4.ts"],"sourcesContent":["import {\n EPSILON,\n equalsTolerance,\n parseSafeFloats,\n toSafeString\n} from '@kiberon-labs/behave-graph';\n\nimport type { Mat3 } from './Mat3.js';\nimport { mat4ToMat3 } from './Mat3.js';\nimport type { Mat4 } from './Mat4.js';\nimport { Vec3 } from './Vec3.js';\n\nexport type Vec4JSON = number[];\n\nexport class Vec4 {\n public x: number;\n public y: number;\n public z: number;\n public w: number;\n constructor(x: number = 0, y: number = 0, z: number = 0, w: number = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n clone(result = new Vec4()): Vec4 {\n return result.set(this.x, this.y, this.z, this.w);\n }\n set(x: number, y: number, z: number, w: number): this {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n }\n}\nexport function vec4Equals(\n a: Vec4,\n b: Vec4,\n tolerance: number = EPSILON\n): boolean {\n return (\n equalsTolerance(a.x, b.x, tolerance) &&\n equalsTolerance(a.y, b.y, tolerance) &&\n equalsTolerance(a.z, b.z, tolerance) &&\n equalsTolerance(a.w, b.w, tolerance)\n );\n}\nexport function vec4Add(a: Vec4, b: Vec4, result = new Vec4()): Vec4 {\n return result.set(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);\n}\nexport function vec4Subtract(a: Vec4, b: Vec4, result = new Vec4()): Vec4 {\n return result.set(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);\n}\nexport function vec4MultiplyByScalar(\n a: Vec4,\n b: number,\n result = new Vec4()\n): Vec4 {\n return result.set(a.x * b, a.y * b, a.z * b, a.w * b);\n}\nexport function vec4Negate(a: Vec4, result = new Vec4()): Vec4 {\n return result.set(-a.x, -a.y, -a.z, -a.w);\n}\nexport function vec4Length(a: Vec4): number {\n return Math.sqrt(vec4Dot(a, a));\n}\nexport function vec4Normalize(a: Vec4, result = new Vec4()): Vec4 {\n const invLength = 1 / vec4Length(a);\n return vec4MultiplyByScalar(a, invLength, result);\n}\nexport function vec4Dot(a: Vec4, b: Vec4): number {\n return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n}\nexport function vec4Mix(\n a: Vec4,\n b: Vec4,\n t: number,\n result = new Vec4()\n): Vec4 {\n const s = 1 - t;\n return result.set(\n a.x * s + b.x * t,\n a.y * s + b.y * t,\n a.z * s + b.z * t,\n a.w * s + b.w * t\n );\n}\nexport function vec4FromArray(\n array: Float32Array | number[],\n offset = 0,\n result = new Vec4()\n): Vec4 {\n return result.set(\n array[offset + 0]!,\n array[offset + 1]!,\n array[offset + 2]!,\n array[offset + 3]!\n );\n}\nexport function vec4ToArray(\n a: Vec4,\n array: Float32Array | number[],\n offset = 0\n): void {\n array[offset + 0] = a.x;\n array[offset + 1] = a.y;\n array[offset + 2] = a.z;\n array[offset + 3] = a.w;\n}\nexport function vec4ToString(a: Vec4): string {\n return toSafeString([a.x, a.y, a.z, a.w]);\n}\nexport function vec4Parse(text: string, result = new Vec4()): Vec4 {\n return vec4FromArray(parseSafeFloats(text), 0, result);\n}\nexport function quatConjugate(a: Vec4, result = new Vec4()): Vec4 {\n return result.set(-a.x, -a.y, -a.z, a.w);\n}\nexport function quatMultiply(a: Vec4, b: Vec4, result = new Vec4()): Vec4 {\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n const qax = a.x;\n const qay = a.y;\n const qaz = a.z;\n const qaw = a.w;\n const qbx = b.x;\n const qby = b.y;\n const qbz = b.z;\n const qbw = b.w;\n\n return result.set(\n qax * qbw + qaw * qbx + qay * qbz - qaz * qby,\n qay * qbw + qaw * qby + qaz * qbx - qax * qbz,\n qaz * qbw + qaw * qbz + qax * qby - qay * qbx,\n qaw * qbw - qax * qbx - qay * qby - qaz * qbz\n );\n}\n\nexport function quatSlerp(\n a: Vec4,\n b: Vec4,\n t: number,\n result = new Vec4()\n): Vec4 {\n if (t <= 0) return a.clone(result);\n if (t >= 1) return b.clone(result);\n\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n let cosHalfTheta = vec4Dot(a, b);\n\n if (cosHalfTheta < 0) {\n vec4Negate(b, result);\n\n cosHalfTheta = -cosHalfTheta;\n } else {\n b.clone(result);\n }\n\n if (cosHalfTheta >= 1) {\n return result;\n }\n\n const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta;\n\n if (sqrSinHalfTheta <= Number.EPSILON) {\n vec4Mix(a, result, t);\n vec4Normalize(result, result);\n\n return result;\n }\n\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta;\n const ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n\n result.w = a.w * ratioA + result.w * ratioB;\n result.x = a.x * ratioA + result.x * ratioB;\n result.y = a.y * ratioA + result.y * ratioB;\n result.z = a.z * ratioA + result.z * ratioB;\n\n return result;\n}\n\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\nexport function quatExp(a: Vec4, result = new Vec4()): Vec4 {\n const x = a.x,\n y = a.y,\n z = a.z,\n w = a.w;\n\n const r = Math.sqrt(x * x + y * y + z * z);\n const et = Math.exp(w);\n const s = r > 0 ? (et * Math.sin(r)) / r : 0;\n\n return result.set(x * s, y * s, z * s, et * Math.cos(r));\n}\n\n// from gl-matrix\nexport function quatLn(a: Vec4, result = new Vec4()): Vec4 {\n const x = a.x,\n y = a.y,\n z = a.z,\n w = a.w;\n\n const r = Math.sqrt(x * x + y * y + z * z);\n const t = r > 0 ? Math.atan2(r, w) / r : 0;\n\n return result.set(\n x * t,\n y * t,\n z * t,\n 0.5 * Math.log(x * x + y * y + z * z + w * w)\n );\n}\n\n// from gl-matrix\nexport function quatPow(a: Vec4, b: number, result = new Vec4()): Vec4 {\n const ln = quatLn(a);\n const lnScaled = vec4MultiplyByScalar(ln, b);\n quatExp(lnScaled, result);\n return result;\n}\n\nexport function eulerToQuat(euler: Vec3, result: Vec4 = new Vec4()): Vec4 {\n // eslint-disable-next-line max-len\n // http://www.mathworks.com/matlabcentral/fileexchange/20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/content/SpinCalc.m\n\n const c1 = Math.cos(euler.x / 2);\n const c2 = Math.cos(euler.y / 2);\n const c3 = Math.cos(euler.z / 2);\n\n const s1 = Math.sin(euler.x / 2);\n const s2 = Math.sin(euler.y / 2);\n const s3 = Math.sin(euler.z / 2);\n\n // XYZ order only\n return result.set(\n s1 * c2 * c3 + c1 * s2 * s3,\n c1 * s2 * c3 - s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3\n );\n}\n\nexport function angleAxisToQuat(\n angle: number,\n axis: Vec3,\n result = new Vec4()\n): Vec4 {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n // assumes axis is normalized\n\n const halfAngle = angle / 2;\n const s = Math.sin(halfAngle);\n\n return result.set(axis.x * s, axis.y * s, axis.z * s, Math.cos(halfAngle));\n}\n\n// from gl-matrix\nexport function quatToAngleAxis(\n q: Vec4,\n result = new Vec3()\n): [angle: number, axis: Vec3] {\n const rad = Math.acos(q.w) * 2;\n const s = Math.sin(rad / 2);\n if (s > EPSILON) {\n result.x = q.x / s;\n result.y = q.y / s;\n result.z = q.z / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n result.x = 1;\n result.y = 0;\n result.z = 0;\n }\n return [rad, result];\n}\n\nexport function mat4ToQuat(m: Mat4, result = new Vec4()): Vec4 {\n return mat3ToQuat(mat4ToMat3(m), result);\n}\n\nexport function mat3ToQuat(m: Mat3, result = new Vec4()): Vec4 {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n // TODO, allocate x, y, z, w and only set q.* at the end.\n\n const te = m.elements,\n m11 = te[0],\n m12 = te[3],\n m13 = te[6],\n m21 = te[1],\n m22 = te[4],\n m23 = te[7],\n m31 = te[2],\n m32 = te[5],\n m33 = te[8],\n trace = m11 + m22 + m33;\n\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n\n return result.set(\n (m32 - m23) * s,\n (m13 - m31) * s,\n (m21 - m12) * s,\n 0.25 / s\n );\n }\n if (m11 > m22 && m11 > m33) {\n const s = 2 * Math.sqrt(1 + m11 - m22 - m33);\n\n return result.set(\n 0.25 * s,\n (m12 + m21) / s,\n (m13 + m31) / s,\n (m32 - m23) / s\n );\n }\n if (m22 > m33) {\n const s = 2 * Math.sqrt(1 + m22 - m11 - m33);\n\n return result.set(\n (m12 + m21) / s,\n 0.25 * s,\n (m23 + m32) / s,\n (m13 - m31) / s\n );\n }\n\n const s = 2 * Math.sqrt(1 + m33 - m11 - m22);\n\n return result.set(\n (m13 + m31) / s,\n (m23 + m32) / s,\n 0.25 * s,\n (m21 - m12) / s\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mat3Value.d.ts","names":[],"sources":["../../src/Values/Mat3Value.ts"],"sourcesContent":[],"mappings":";;;cAUa,WAAW"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Mat3, mat3Equals, mat3Mix, mat3Parse } from "./Internal/Mat3.js";
|
|
2
|
+
|
|
3
|
+
//#region src/Values/Mat3Value.ts
|
|
4
|
+
const Mat3Value = {
|
|
5
|
+
name: "mat3",
|
|
6
|
+
creator: () => new Mat3(),
|
|
7
|
+
deserialize: (value) => typeof value === "string" ? mat3Parse(value) : new Mat3(value),
|
|
8
|
+
serialize: (value) => value.elements,
|
|
9
|
+
lerp: (start, end, t) => mat3Mix(start, end, t),
|
|
10
|
+
equals: (a, b) => mat3Equals(a, b),
|
|
11
|
+
clone: (value) => value.clone()
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Mat3Value };
|
|
16
|
+
//# sourceMappingURL=Mat3Value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mat3Value.js","names":["Mat3Value: ValueType"],"sources":["../../src/Values/Mat3Value.ts"],"sourcesContent":["import type { ValueType } from '@kiberon-labs/behave-graph';\n\nimport {\n Mat3,\n mat3Equals,\n type Mat3JSON,\n mat3Mix,\n mat3Parse\n} from './Internal/Mat3.js';\n\nexport const Mat3Value: ValueType = {\n name: 'mat3',\n creator: () => new Mat3(),\n deserialize: (value: string | Mat3JSON) =>\n typeof value === 'string' ? mat3Parse(value) : new Mat3(value),\n serialize: (value) => value.elements as Mat3JSON,\n lerp: (start: Mat3, end: Mat3, t: number) => mat3Mix(start, end, t),\n equals: (a: Mat3, b: Mat3) => mat3Equals(a, b),\n clone: (value: Mat3) => value.clone()\n};\n"],"mappings":";;;AAUA,MAAaA,YAAuB;CAClC,MAAM;CACN,eAAe,IAAI,MAAM;CACzB,cAAc,UACZ,OAAO,UAAU,WAAW,UAAU,MAAM,GAAG,IAAI,KAAK,MAAM;CAChE,YAAY,UAAU,MAAM;CAC5B,OAAO,OAAa,KAAW,MAAc,QAAQ,OAAO,KAAK,EAAE;CACnE,SAAS,GAAS,MAAY,WAAW,GAAG,EAAE;CAC9C,QAAQ,UAAgB,MAAM,OAAO;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mat4Value.d.ts","names":[],"sources":["../../src/Values/Mat4Value.ts"],"sourcesContent":[],"mappings":";;;cAUa,WAAW"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Mat4, mat4Equals, mat4Mix, mat4Parse } from "./Internal/Mat4.js";
|
|
2
|
+
|
|
3
|
+
//#region src/Values/Mat4Value.ts
|
|
4
|
+
const Mat4Value = {
|
|
5
|
+
name: "mat4",
|
|
6
|
+
creator: () => new Mat4(),
|
|
7
|
+
deserialize: (value) => typeof value === "string" ? mat4Parse(value) : new Mat4(value),
|
|
8
|
+
serialize: (value) => value.elements,
|
|
9
|
+
lerp: (start, end, t) => mat4Mix(start, end, t),
|
|
10
|
+
equals: (a, b) => mat4Equals(a, b),
|
|
11
|
+
clone: (value) => value.clone()
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Mat4Value };
|
|
16
|
+
//# sourceMappingURL=Mat4Value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mat4Value.js","names":["Mat4Value: ValueType"],"sources":["../../src/Values/Mat4Value.ts"],"sourcesContent":["import type { ValueType } from '@kiberon-labs/behave-graph';\n\nimport {\n Mat4,\n mat4Equals,\n type Mat4JSON,\n mat4Mix,\n mat4Parse\n} from './Internal/Mat4.js';\n\nexport const Mat4Value: ValueType = {\n name: 'mat4',\n creator: () => new Mat4(),\n deserialize: (value: string | Mat4JSON) =>\n typeof value === 'string' ? mat4Parse(value) : new Mat4(value),\n serialize: (value) => value.elements as Mat4JSON,\n lerp: (start: Mat4, end: Mat4, t: number) => mat4Mix(start, end, t),\n equals: (a: Mat4, b: Mat4) => mat4Equals(a, b),\n clone: (value: Mat4) => value.clone()\n};\n"],"mappings":";;;AAUA,MAAaA,YAAuB;CAClC,MAAM;CACN,eAAe,IAAI,MAAM;CACzB,cAAc,UACZ,OAAO,UAAU,WAAW,UAAU,MAAM,GAAG,IAAI,KAAK,MAAM;CAChE,YAAY,UAAU,MAAM;CAC5B,OAAO,OAAa,KAAW,MAAc,QAAQ,OAAO,KAAK,EAAE;CACnE,SAAS,GAAS,MAAY,WAAW,GAAG,EAAE;CAC9C,QAAQ,UAAgB,MAAM,OAAO;CACtC"}
|