@needle-tools/engine 4.3.0-alpha → 4.3.0-alpha.1
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/CHANGELOG.md +3 -0
- package/dist/needle-engine.bundle.js +1467 -222
- package/dist/needle-engine.bundle.light.js +1467 -222
- package/dist/needle-engine.bundle.light.min.js +32 -32
- package/dist/needle-engine.bundle.light.umd.cjs +3 -3
- package/dist/needle-engine.bundle.min.js +3 -3
- package/dist/needle-engine.bundle.umd.cjs +3 -3
- package/dist/needle-engine.light.d.ts +9 -9
- package/lib/engine/engine_types.d.ts +162 -17
- package/lib/engine-components/Animator.d.ts +129 -21
- package/lib/engine-components/Animator.js +115 -21
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.d.ts +161 -32
- package/lib/engine-components/AnimatorController.js +176 -29
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/AudioListener.d.ts +16 -5
- package/lib/engine-components/AudioListener.js +16 -5
- package/lib/engine-components/AudioListener.js.map +1 -1
- package/lib/engine-components/AudioSource.d.ts +120 -28
- package/lib/engine-components/AudioSource.js +120 -37
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/AvatarLoader.d.ts +61 -0
- package/lib/engine-components/AvatarLoader.js +61 -1
- package/lib/engine-components/AvatarLoader.js.map +1 -1
- package/lib/engine-components/AxesHelper.d.ts +19 -1
- package/lib/engine-components/AxesHelper.js +19 -1
- package/lib/engine-components/AxesHelper.js.map +1 -1
- package/lib/engine-components/BoxHelperComponent.d.ts +26 -0
- package/lib/engine-components/BoxHelperComponent.js +26 -0
- package/lib/engine-components/BoxHelperComponent.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +126 -37
- package/lib/engine-components/Camera.js +139 -37
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CameraUtils.js +20 -0
- package/lib/engine-components/CameraUtils.js.map +1 -1
- package/lib/engine-components/Collider.d.ts +95 -21
- package/lib/engine-components/Collider.js +100 -23
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +554 -106
- package/lib/engine-components/Component.js +352 -81
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/DragControls.d.ts +95 -21
- package/lib/engine-components/DragControls.js +126 -32
- package/lib/engine-components/DragControls.js.map +1 -1
- package/lib/engine-components/DropListener.d.ts +99 -16
- package/lib/engine-components/DropListener.js +119 -14
- package/lib/engine-components/DropListener.js.map +1 -1
- package/lib/engine-components/Light.d.ts +102 -5
- package/lib/engine-components/Light.js +102 -44
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/NeedleMenu.d.ts +28 -11
- package/lib/engine-components/NeedleMenu.js +28 -11
- package/lib/engine-components/NeedleMenu.js.map +1 -1
- package/lib/engine-components/Networking.d.ts +37 -5
- package/lib/engine-components/Networking.js +37 -5
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/SceneSwitcher.js +44 -0
- package/lib/engine-components/SceneSwitcher.js.map +1 -1
- package/lib/engine-components/SpatialTrigger.d.ts +66 -1
- package/lib/engine-components/SpatialTrigger.js +74 -2
- package/lib/engine-components/SpatialTrigger.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.d.ts +66 -4
- package/lib/engine-components/SpectatorCamera.js +132 -6
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SyncedTransform.d.ts +45 -6
- package/lib/engine-components/SyncedTransform.js +45 -6
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TransformGizmo.d.ts +49 -3
- package/lib/engine-components/TransformGizmo.js +49 -3
- package/lib/engine-components/TransformGizmo.js.map +1 -1
- package/lib/engine-components/webxr/WebXR.d.ts +131 -22
- package/lib/engine-components/webxr/WebXR.js +132 -23
- package/lib/engine-components/webxr/WebXR.js.map +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +82 -9
- package/lib/engine-components-experimental/networking/PlayerSync.js +76 -11
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
- package/package.json +1 -1
- package/src/engine/engine_types.ts +179 -18
- package/src/engine-components/Animator.ts +142 -22
- package/src/engine-components/AnimatorController.ts +184 -34
- package/src/engine-components/AudioListener.ts +16 -5
- package/src/engine-components/AudioSource.ts +126 -37
- package/src/engine-components/AvatarLoader.ts +61 -2
- package/src/engine-components/AxesHelper.ts +21 -1
- package/src/engine-components/BoxHelperComponent.ts +26 -0
- package/src/engine-components/Camera.ts +147 -41
- package/src/engine-components/CameraUtils.ts +20 -0
- package/src/engine-components/Collider.ts +102 -27
- package/src/engine-components/Component.ts +605 -129
- package/src/engine-components/DragControls.ts +134 -38
- package/src/engine-components/DropListener.ts +143 -23
- package/src/engine-components/Light.ts +105 -44
- package/src/engine-components/NeedleMenu.ts +29 -11
- package/src/engine-components/Networking.ts +37 -6
- package/src/engine-components/SceneSwitcher.ts +48 -1
- package/src/engine-components/SpatialTrigger.ts +80 -3
- package/src/engine-components/SpectatorCamera.ts +136 -18
- package/src/engine-components/SyncedTransform.ts +50 -7
- package/src/engine-components/TransformGizmo.ts +49 -4
- package/src/engine-components/webxr/WebXR.ts +144 -27
- package/src/engine-components-experimental/networking/PlayerSync.ts +85 -13
|
@@ -1,19 +1,80 @@
|
|
|
1
1
|
import { Object3D } from "three";
|
|
2
2
|
import { Context } from "../engine/engine_setup.js";
|
|
3
|
+
/**
|
|
4
|
+
* Represents an avatar model with head and hands references.
|
|
5
|
+
* Used for representing characters in 3D space.
|
|
6
|
+
*/
|
|
3
7
|
export declare class AvatarModel {
|
|
8
|
+
/** The root object of the avatar model */
|
|
4
9
|
root: Object3D;
|
|
10
|
+
/** The head object of the avatar model */
|
|
5
11
|
head: Object3D;
|
|
12
|
+
/** The left hand object of the avatar model, if available */
|
|
6
13
|
leftHand: Object3D | null;
|
|
14
|
+
/** The right hand object of the avatar model, if available */
|
|
7
15
|
rigthHand: Object3D | null;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if the avatar model has a valid configuration.
|
|
18
|
+
* An avatar is considered valid if it has a head.
|
|
19
|
+
* @returns Whether the avatar has a valid setup
|
|
20
|
+
*/
|
|
8
21
|
get isValid(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new avatar model.
|
|
24
|
+
* @param root The root object of the avatar
|
|
25
|
+
* @param head The head object of the avatar
|
|
26
|
+
* @param leftHand The left hand object of the avatar
|
|
27
|
+
* @param rigthHand The right hand object of the avatar
|
|
28
|
+
*/
|
|
9
29
|
constructor(root: Object3D, head: Object3D, leftHand: Object3D | null, rigthHand: Object3D | null);
|
|
10
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Handles loading and instantiating avatar models from various sources.
|
|
33
|
+
* Provides functionality to find and extract important parts of an avatar (head, hands).
|
|
34
|
+
*
|
|
35
|
+
* Debug mode can be enabled with the URL parameter `?debugavatar`,
|
|
36
|
+
* which will log detailed information about avatar loading and configuration.
|
|
37
|
+
*/
|
|
11
38
|
export declare class AvatarLoader {
|
|
12
39
|
private readonly avatarRegistryUrl;
|
|
40
|
+
/**
|
|
41
|
+
* Retrieves or creates a new avatar instance from an ID or existing Object3D.
|
|
42
|
+
* @param context The application context
|
|
43
|
+
* @param avatarId Either a string ID to load an avatar or an existing Object3D to use as avatar
|
|
44
|
+
* @returns Promise resolving to an AvatarModel if successful, or null if failed
|
|
45
|
+
*/
|
|
13
46
|
getOrCreateNewAvatarInstance(context: Context, avatarId: string | Object3D): Promise<AvatarModel | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Loads an avatar model from a file or registry using the provided ID.
|
|
49
|
+
* @param context The engine context
|
|
50
|
+
* @param avatarId The ID of the avatar to load
|
|
51
|
+
* @returns Promise resolving to the loaded avatar's Object3D, or null if failed
|
|
52
|
+
*/
|
|
14
53
|
private loadAvatar;
|
|
54
|
+
/**
|
|
55
|
+
* Caches an avatar model for reuse.
|
|
56
|
+
* @param _id The ID to associate with the model
|
|
57
|
+
* @param _model The avatar model to cache
|
|
58
|
+
*/
|
|
15
59
|
private cacheModel;
|
|
60
|
+
/**
|
|
61
|
+
* Analyzes an Object3D to find avatar parts (head, hands) based on naming conventions.
|
|
62
|
+
* @param obj The Object3D to search for avatar parts
|
|
63
|
+
* @returns A structured AvatarModel with references to found parts
|
|
64
|
+
*/
|
|
16
65
|
private findAvatar;
|
|
66
|
+
/**
|
|
67
|
+
* Recursively searches for an avatar part by name within an Object3D hierarchy.
|
|
68
|
+
* @param obj The Object3D to search within
|
|
69
|
+
* @param searchString Array of strings that should all be present in the object name
|
|
70
|
+
* @returns The found Object3D part or null if not found
|
|
71
|
+
*/
|
|
17
72
|
private findAvatarPart;
|
|
73
|
+
/**
|
|
74
|
+
* Handles HTTP response errors from avatar loading operations.
|
|
75
|
+
* @param response The fetch API response to check
|
|
76
|
+
* @returns The response if it was ok
|
|
77
|
+
* @throws Error with status text if response was not ok
|
|
78
|
+
*/
|
|
18
79
|
private handleCustomAvatarErrors;
|
|
19
80
|
}
|
|
@@ -6,14 +6,34 @@ import * as loaders from "../engine/engine_loaders.js";
|
|
|
6
6
|
import * as utils from "../engine/engine_utils.js";
|
|
7
7
|
import { GameObject } from "./Component.js";
|
|
8
8
|
const debug = utils.getParam("debugavatar");
|
|
9
|
+
/**
|
|
10
|
+
* Represents an avatar model with head and hands references.
|
|
11
|
+
* Used for representing characters in 3D space.
|
|
12
|
+
*/
|
|
9
13
|
export class AvatarModel {
|
|
14
|
+
/** The root object of the avatar model */
|
|
10
15
|
root;
|
|
16
|
+
/** The head object of the avatar model */
|
|
11
17
|
head;
|
|
18
|
+
/** The left hand object of the avatar model, if available */
|
|
12
19
|
leftHand;
|
|
20
|
+
/** The right hand object of the avatar model, if available */
|
|
13
21
|
rigthHand;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the avatar model has a valid configuration.
|
|
24
|
+
* An avatar is considered valid if it has a head.
|
|
25
|
+
* @returns Whether the avatar has a valid setup
|
|
26
|
+
*/
|
|
14
27
|
get isValid() {
|
|
15
28
|
return this.head !== null && this.head !== undefined;
|
|
16
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new avatar model.
|
|
32
|
+
* @param root The root object of the avatar
|
|
33
|
+
* @param head The head object of the avatar
|
|
34
|
+
* @param leftHand The left hand object of the avatar
|
|
35
|
+
* @param rigthHand The right hand object of the avatar
|
|
36
|
+
*/
|
|
17
37
|
constructor(root, head, leftHand, rigthHand) {
|
|
18
38
|
this.root = root;
|
|
19
39
|
this.head = head;
|
|
@@ -25,10 +45,23 @@ export class AvatarModel {
|
|
|
25
45
|
// this.rigthHand?.traverse(h => h.layers.set(2));
|
|
26
46
|
}
|
|
27
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Handles loading and instantiating avatar models from various sources.
|
|
50
|
+
* Provides functionality to find and extract important parts of an avatar (head, hands).
|
|
51
|
+
*
|
|
52
|
+
* Debug mode can be enabled with the URL parameter `?debugavatar`,
|
|
53
|
+
* which will log detailed information about avatar loading and configuration.
|
|
54
|
+
*/
|
|
28
55
|
export class AvatarLoader {
|
|
29
56
|
avatarRegistryUrl = null;
|
|
30
57
|
// private loader: GLTFLoader | null;
|
|
31
58
|
// private avatarModelCache: Map<string, AvatarModel | null> = new Map<string, AvatarModel | null>();
|
|
59
|
+
/**
|
|
60
|
+
* Retrieves or creates a new avatar instance from an ID or existing Object3D.
|
|
61
|
+
* @param context The application context
|
|
62
|
+
* @param avatarId Either a string ID to load an avatar or an existing Object3D to use as avatar
|
|
63
|
+
* @returns Promise resolving to an AvatarModel if successful, or null if failed
|
|
64
|
+
*/
|
|
32
65
|
async getOrCreateNewAvatarInstance(context, avatarId) {
|
|
33
66
|
if (!avatarId) {
|
|
34
67
|
console.error("Can not create avatar: failed to provide id or root object");
|
|
@@ -61,6 +94,12 @@ export class AvatarLoader {
|
|
|
61
94
|
return null;
|
|
62
95
|
}
|
|
63
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Loads an avatar model from a file or registry using the provided ID.
|
|
99
|
+
* @param context The engine context
|
|
100
|
+
* @param avatarId The ID of the avatar to load
|
|
101
|
+
* @returns Promise resolving to the loaded avatar's Object3D, or null if failed
|
|
102
|
+
*/
|
|
64
103
|
async loadAvatar(context, avatarId) {
|
|
65
104
|
console.assert(avatarId !== undefined && avatarId !== null && typeof avatarId === "string", "Avatar id must not be null");
|
|
66
105
|
if (avatarId.length <= 0)
|
|
@@ -114,10 +153,19 @@ export class AvatarLoader {
|
|
|
114
153
|
});
|
|
115
154
|
});
|
|
116
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Caches an avatar model for reuse.
|
|
158
|
+
* @param _id The ID to associate with the model
|
|
159
|
+
* @param _model The avatar model to cache
|
|
160
|
+
*/
|
|
117
161
|
cacheModel(_id, _model) {
|
|
118
162
|
// this.avatarModelCache.set(id, model);
|
|
119
163
|
}
|
|
120
|
-
|
|
164
|
+
/**
|
|
165
|
+
* Analyzes an Object3D to find avatar parts (head, hands) based on naming conventions.
|
|
166
|
+
* @param obj The Object3D to search for avatar parts
|
|
167
|
+
* @returns A structured AvatarModel with references to found parts
|
|
168
|
+
*/
|
|
121
169
|
findAvatar(obj) {
|
|
122
170
|
const root = obj;
|
|
123
171
|
let searchIn = root;
|
|
@@ -142,6 +190,12 @@ export class AvatarLoader {
|
|
|
142
190
|
const model = new AvatarModel(root, head, leftHand, rightHand);
|
|
143
191
|
return model;
|
|
144
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Recursively searches for an avatar part by name within an Object3D hierarchy.
|
|
195
|
+
* @param obj The Object3D to search within
|
|
196
|
+
* @param searchString Array of strings that should all be present in the object name
|
|
197
|
+
* @returns The found Object3D part or null if not found
|
|
198
|
+
*/
|
|
145
199
|
findAvatarPart(obj, searchString) {
|
|
146
200
|
const name = obj.name.toLowerCase();
|
|
147
201
|
let matchesAll = true;
|
|
@@ -162,6 +216,12 @@ export class AvatarLoader {
|
|
|
162
216
|
}
|
|
163
217
|
return null;
|
|
164
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Handles HTTP response errors from avatar loading operations.
|
|
221
|
+
* @param response The fetch API response to check
|
|
222
|
+
* @returns The response if it was ok
|
|
223
|
+
* @throws Error with status text if response was not ok
|
|
224
|
+
*/
|
|
165
225
|
handleCustomAvatarErrors(response) {
|
|
166
226
|
if (!response.ok) {
|
|
167
227
|
throw Error(response.statusText);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarLoader.js","sourceRoot":"","sources":["../../src/engine-components/AvatarLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAA;AAEtD,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE5C,MAAM,OAAO,WAAW;IACpB,IAAI,CAAW;IACf,IAAI,CAAW;IACf,QAAQ,CAAkB;IAC1B,SAAS,CAAkB;IAG3B,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACzD,CAAC;IAED,YAAY,IAAc,EAAE,IAAc,EAAE,QAAyB,EAAE,SAA0B;QAC7F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,6CAA6C;QAC7C,iDAAiD;QACjD,kDAAkD;IACtD,CAAC;CACJ;AAED,MAAM,OAAO,YAAY;IAEJ,iBAAiB,GAAkB,IAAI,CAAC;IACzD,qCAAqC;IACrC,qGAAqG;
|
|
1
|
+
{"version":3,"file":"AvatarLoader.js","sourceRoot":"","sources":["../../src/engine-components/AvatarLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAA;AAEtD,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,WAAW;IACpB,0CAA0C;IAC1C,IAAI,CAAW;IACf,0CAA0C;IAC1C,IAAI,CAAW;IACf,6DAA6D;IAC7D,QAAQ,CAAkB;IAC1B,8DAA8D;IAC9D,SAAS,CAAkB;IAG3B;;;;OAIG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACH,YAAY,IAAc,EAAE,IAAc,EAAE,QAAyB,EAAE,SAA0B;QAC7F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,6CAA6C;QAC7C,iDAAiD;QACjD,kDAAkD;IACtD,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAEJ,iBAAiB,GAAkB,IAAI,CAAC;IACzD,qCAAqC;IACrC,qGAAqG;IAErG;;;;;OAKG;IACI,KAAK,CAAC,4BAA4B,CAAC,OAAgB,EAAE,QAA2B;QAEnF,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;gBACtC,oCAAoC;gBACpC,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAa,EAAE,IAAI,CAAC,CAAC;aACjG;SACJ;;YACI,IAAI,GAAG,QAAQ,CAAC;QAErB,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,8BAA8B;QAC9B,oCAAoC;QAEpC,IAAI,KAAK,CAAC,OAAO,EAAE;YACf,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,OAAO,KAAK,CAAC;SAChB;aACI;YACD,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAGD;;;;;OAKG;IACK,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,QAAgB;QAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QAC1H,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,IAAI,KAAK;YACL,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAAC,CAAC;QAChE,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,QAAQ,IAAI,MAAM,CAAC;QAGvB,mFAAmF;QACnF,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;YACjC,qCAAqC;YACrC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;YAClD,IAAI,GAAG,GAAuB,IAAI,CAAC;YACnC,IAAI,YAAY,CAAC,EAAE,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,IAAI;oBAAE,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;aAC5C;YACD,IAAI,CAAC,GAAG,EAAE;gBACN,wFAAwF;gBACxF,OAAO,IAAI,CAAC;aACf;YAED,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,IAAK,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;SAC9B;QAGD,6CAA6C;QAC7C,uEAAuE;QACvE,uCAAuC;QACvC,gFAAgF;QAChF,sBAAsB;QACtB,UAAU;QACV,IAAI;QACJ,eAAe;QAEf,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhD,6EAA6E;QAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,GAAG,QAAQ,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,GAAG,EACX,KAAK,EAAC,IAAI,EAAC,EAAE;gBACT,MAAM,SAAS,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,EACD,QAAQ,CAAC,EAAE;gBACP,IAAI,KAAK;oBACL,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACrI,CAAC,EACD,KAAK,CAAC,EAAE;gBACJ,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,sBAAsB,GAAG,KAAK,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,GAAW,EAAE,MAAmB;QAC/C,wCAAwC;IAC5C,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,GAAa;QAE5B,MAAM,IAAI,GAAa,GAAG,CAAC;QAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,yGAAyG;QACzG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;YAC7B,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,EAAE;YACP,kDAAkD;YAClD,IAAI,GAAG,IAAI,CAAC;YAEZ,oFAAoF;YACpF,MAAM,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,wCAAwC,GAAG,OAAO,GAAG,2BAA2B,CAAC,CAAC;YACpH,IAAI,OAAO,GAAG,GAAG,EAAE;gBACf,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;aAClD;SACJ;QAED,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,GAAa,EAAE,YAAsB;QAExD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;YAC5B,IAAI,CAAC,UAAU;gBAAE,MAAM;YACvB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,UAAU,GAAG,KAAK,CAAC;SAC1B;QACD,IAAI,UAAU;YAAE,OAAO,GAAG,CAAC;QAE3B,IAAI,GAAG,CAAC,QAAQ,EAAE;YACd,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACvD,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;aAC3B;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,wBAAwB,CAAC,QAAQ;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACd,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACpC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"}
|
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
import { Behaviour } from "./Component.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Component that visualizes the axes of an object in the scene.
|
|
4
|
+
* Renders colored lines representing the X (red), Y (green) and Z (blue) axes.
|
|
4
5
|
* @category Helpers
|
|
5
6
|
* @group Components
|
|
6
7
|
*/
|
|
7
8
|
export declare class AxesHelper extends Behaviour {
|
|
9
|
+
/**
|
|
10
|
+
* The length of each axis line in scene units.
|
|
11
|
+
*/
|
|
8
12
|
length: number;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the axes should be occluded by objects in the scene.
|
|
15
|
+
* When set to false, axes will always appear on top regardless of their depth.
|
|
16
|
+
*/
|
|
9
17
|
depthTest: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* When true, this helper will only be visible if the debug flag `?gizmos` is enabled.
|
|
20
|
+
*/
|
|
10
21
|
isGizmo: boolean;
|
|
11
22
|
private _axes;
|
|
23
|
+
/**
|
|
24
|
+
* Creates and adds the axes visualization to the scene when the component is enabled.
|
|
25
|
+
* If marked as a gizmo, it will only be shown when gizmos are enabled in the global parameters.
|
|
26
|
+
*/
|
|
12
27
|
onEnable(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Removes the axes visualization from the scene when the component is disabled.
|
|
30
|
+
*/
|
|
13
31
|
onDisable(): void;
|
|
14
32
|
}
|
|
@@ -9,15 +9,30 @@ import * as params from "../engine/engine_default_parameters.js";
|
|
|
9
9
|
import { serializable } from "../engine/engine_serialization_decorator.js";
|
|
10
10
|
import { Behaviour } from "./Component.js";
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Component that visualizes the axes of an object in the scene.
|
|
13
|
+
* Renders colored lines representing the X (red), Y (green) and Z (blue) axes.
|
|
13
14
|
* @category Helpers
|
|
14
15
|
* @group Components
|
|
15
16
|
*/
|
|
16
17
|
export class AxesHelper extends Behaviour {
|
|
18
|
+
/**
|
|
19
|
+
* The length of each axis line in scene units.
|
|
20
|
+
*/
|
|
17
21
|
length = 1;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the axes should be occluded by objects in the scene.
|
|
24
|
+
* When set to false, axes will always appear on top regardless of their depth.
|
|
25
|
+
*/
|
|
18
26
|
depthTest = true;
|
|
27
|
+
/**
|
|
28
|
+
* When true, this helper will only be visible if the debug flag `?gizmos` is enabled.
|
|
29
|
+
*/
|
|
19
30
|
isGizmo = false;
|
|
20
31
|
_axes = null;
|
|
32
|
+
/**
|
|
33
|
+
* Creates and adds the axes visualization to the scene when the component is enabled.
|
|
34
|
+
* If marked as a gizmo, it will only be shown when gizmos are enabled in the global parameters.
|
|
35
|
+
*/
|
|
21
36
|
onEnable() {
|
|
22
37
|
if (this.isGizmo && !params.showGizmos)
|
|
23
38
|
return;
|
|
@@ -32,6 +47,9 @@ export class AxesHelper extends Behaviour {
|
|
|
32
47
|
mat.depthTest = this.depthTest;
|
|
33
48
|
}
|
|
34
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Removes the axes visualization from the scene when the component is disabled.
|
|
52
|
+
*/
|
|
35
53
|
onDisable() {
|
|
36
54
|
if (!this._axes)
|
|
37
55
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxesHelper.js","sourceRoot":"","sources":["../../src/engine-components/AxesHelper.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,MAAM,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"AxesHelper.js","sourceRoot":"","sources":["../../src/engine-components/AxesHelper.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,MAAM,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAS;IACrC;;OAEG;IAEI,MAAM,GAAW,CAAC,CAAC;IAE1B;;;OAGG;IAEI,SAAS,GAAY,IAAI,CAAC;IAEjC;;OAEG;IAEI,OAAO,GAAY,KAAK,CAAC;IAExB,KAAK,GAAuB,IAAI,CAAC;IAEzC;;;OAGG;IACH,QAAQ;QACJ,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK;YACX,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,GAAG,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,IAAI,GAAG,EAAE;YACL,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;gBAC3B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SACtC;IACL,CAAC;IAED;;OAEG;IACH,SAAS;QACL,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;CACJ;AA1CG;IADC,YAAY,EAAE;0CACW;AAO1B;IADC,YAAY,EAAE;6CACkB;AAMjC;IADC,YAAY,EAAE;2CACiB"}
|
|
@@ -1,21 +1,47 @@
|
|
|
1
1
|
import { Box3, type ColorRepresentation, Object3D } from "three";
|
|
2
2
|
import { Behaviour } from "./Component.js";
|
|
3
3
|
/**
|
|
4
|
+
* A component that creates a bounding box around an object and provides intersection testing functionality.
|
|
5
|
+
*
|
|
6
|
+
* Debug mode can be enabled with the URL parameter `?debugboxhelper`, which will visualize intersection tests.
|
|
7
|
+
* Helper visualization can be enabled with the URL parameter `?gizmos`.
|
|
8
|
+
*
|
|
4
9
|
* @category Helpers
|
|
5
10
|
* @group Components
|
|
6
11
|
*/
|
|
7
12
|
export declare class BoxHelperComponent extends Behaviour {
|
|
13
|
+
/** The bounding box for this component */
|
|
8
14
|
private box;
|
|
9
15
|
private static testBox;
|
|
10
16
|
private _lastMatrixUpdateFrame;
|
|
11
17
|
private static _position;
|
|
12
18
|
private static _size;
|
|
13
19
|
private static _emptyObjectSize;
|
|
20
|
+
/**
|
|
21
|
+
* Tests if an object intersects with this helper's bounding box
|
|
22
|
+
* @param obj The object to test for intersection
|
|
23
|
+
* @returns True if objects intersect, false if not, undefined if the provided object is invalid
|
|
24
|
+
*/
|
|
14
25
|
isInBox(obj: Object3D): boolean | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Tests if this helper's bounding box intersects with another box
|
|
28
|
+
* @param box The {@link Box3} to test for intersection
|
|
29
|
+
* @returns True if boxes intersect, false otherwise
|
|
30
|
+
*/
|
|
15
31
|
intersects(box: Box3): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Updates the helper's bounding box based on the gameObject's position and scale
|
|
34
|
+
* @param force Whether to force an update regardless of frame count
|
|
35
|
+
* @returns The updated {@link Box3}
|
|
36
|
+
*/
|
|
16
37
|
updateBox(force?: boolean): Box3;
|
|
17
38
|
private _helper;
|
|
18
39
|
private _color;
|
|
19
40
|
awake(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Creates and displays a visual wireframe representation of this box helper
|
|
43
|
+
* @param col Optional color for the wireframe. If not provided, uses default color
|
|
44
|
+
* @param force If true, shows the helper even if gizmos are disabled
|
|
45
|
+
*/
|
|
20
46
|
showHelper(col?: ColorRepresentation | null, force?: boolean): void;
|
|
21
47
|
}
|
|
@@ -6,16 +6,27 @@ import { Behaviour } from "./Component.js";
|
|
|
6
6
|
const gizmos = getParam("gizmos");
|
|
7
7
|
const debug = getParam("debugboxhelper");
|
|
8
8
|
/**
|
|
9
|
+
* A component that creates a bounding box around an object and provides intersection testing functionality.
|
|
10
|
+
*
|
|
11
|
+
* Debug mode can be enabled with the URL parameter `?debugboxhelper`, which will visualize intersection tests.
|
|
12
|
+
* Helper visualization can be enabled with the URL parameter `?gizmos`.
|
|
13
|
+
*
|
|
9
14
|
* @category Helpers
|
|
10
15
|
* @group Components
|
|
11
16
|
*/
|
|
12
17
|
export class BoxHelperComponent extends Behaviour {
|
|
18
|
+
/** The bounding box for this component */
|
|
13
19
|
box = null;
|
|
14
20
|
static testBox = new Box3();
|
|
15
21
|
_lastMatrixUpdateFrame = -1;
|
|
16
22
|
static _position = new Vector3();
|
|
17
23
|
static _size = new Vector3(.01, .01, .01);
|
|
18
24
|
static _emptyObjectSize = new Vector3(.01, .01, .01);
|
|
25
|
+
/**
|
|
26
|
+
* Tests if an object intersects with this helper's bounding box
|
|
27
|
+
* @param obj The object to test for intersection
|
|
28
|
+
* @returns True if objects intersect, false if not, undefined if the provided object is invalid
|
|
29
|
+
*/
|
|
19
30
|
isInBox(obj) {
|
|
20
31
|
if (!obj)
|
|
21
32
|
return undefined;
|
|
@@ -35,11 +46,21 @@ export class BoxHelperComponent extends Behaviour {
|
|
|
35
46
|
}
|
|
36
47
|
return intersects;
|
|
37
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Tests if this helper's bounding box intersects with another box
|
|
51
|
+
* @param box The {@link Box3} to test for intersection
|
|
52
|
+
* @returns True if boxes intersect, false otherwise
|
|
53
|
+
*/
|
|
38
54
|
intersects(box) {
|
|
39
55
|
if (!box)
|
|
40
56
|
return false;
|
|
41
57
|
return this.updateBox(false).intersectsBox(box);
|
|
42
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Updates the helper's bounding box based on the gameObject's position and scale
|
|
61
|
+
* @param force Whether to force an update regardless of frame count
|
|
62
|
+
* @returns The updated {@link Box3}
|
|
63
|
+
*/
|
|
43
64
|
updateBox(force = false) {
|
|
44
65
|
if (!this.box) {
|
|
45
66
|
this.box = new Box3();
|
|
@@ -61,6 +82,11 @@ export class BoxHelperComponent extends Behaviour {
|
|
|
61
82
|
this._color = null;
|
|
62
83
|
this.box = null;
|
|
63
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Creates and displays a visual wireframe representation of this box helper
|
|
87
|
+
* @param col Optional color for the wireframe. If not provided, uses default color
|
|
88
|
+
* @param force If true, shows the helper even if gizmos are disabled
|
|
89
|
+
*/
|
|
64
90
|
showHelper(col = null, force = false) {
|
|
65
91
|
if (!gizmos && !force)
|
|
66
92
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxHelperComponent.js","sourceRoot":"","sources":["../../src/engine-components/BoxHelperComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA2D,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/F,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"BoxHelperComponent.js","sourceRoot":"","sources":["../../src/engine-components/BoxHelperComponent.ts"],"names":[],"mappings":"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"}
|