@needle-tools/engine 5.1.0-alpha.3 → 5.1.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/SKILL.md +4 -1
  3. package/components.needle.json +1 -1
  4. package/dist/{needle-engine.bundle-DF01sSGQ.js → needle-engine.bundle-C-LG00ZZ.js} +10681 -10100
  5. package/dist/needle-engine.bundle-D7tzaiYE.min.js +1733 -0
  6. package/dist/{needle-engine.bundle-C-ixARur.umd.cjs → needle-engine.bundle-OPkPmdUM.umd.cjs} +161 -161
  7. package/dist/needle-engine.d.ts +1349 -317
  8. package/dist/needle-engine.js +556 -555
  9. package/dist/needle-engine.min.js +1 -1
  10. package/dist/needle-engine.umd.cjs +1 -1
  11. package/dist/three.js +1 -0
  12. package/dist/three.min.js +21 -21
  13. package/dist/three.umd.cjs +16 -16
  14. package/lib/engine/api.d.ts +5 -0
  15. package/lib/engine/api.js +4 -0
  16. package/lib/engine/api.js.map +1 -1
  17. package/lib/engine/codegen/register_types.js +10 -18
  18. package/lib/engine/codegen/register_types.js.map +1 -1
  19. package/lib/engine/engine_camera.fit.js +16 -4
  20. package/lib/engine/engine_camera.fit.js.map +1 -1
  21. package/lib/engine/engine_context.d.ts +20 -7
  22. package/lib/engine/engine_context.js +31 -15
  23. package/lib/engine/engine_context.js.map +1 -1
  24. package/lib/engine/engine_context_eventbus.d.ts +47 -0
  25. package/lib/engine/engine_context_eventbus.js +47 -0
  26. package/lib/engine/engine_context_eventbus.js.map +1 -0
  27. package/lib/engine/engine_disposable.d.ts +172 -0
  28. package/lib/engine/engine_disposable.js +136 -0
  29. package/lib/engine/engine_disposable.js.map +1 -0
  30. package/lib/engine/engine_gameobject.d.ts +1 -10
  31. package/lib/engine/engine_gameobject.js +20 -118
  32. package/lib/engine/engine_gameobject.js.map +1 -1
  33. package/lib/engine/engine_gltf_builtin_components.js +7 -69
  34. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  35. package/lib/engine/engine_input.d.ts +23 -4
  36. package/lib/engine/engine_input.js +2 -1
  37. package/lib/engine/engine_input.js.map +1 -1
  38. package/lib/engine/engine_instantiate_resolve.d.ts +42 -0
  39. package/lib/engine/engine_instantiate_resolve.js +372 -0
  40. package/lib/engine/engine_instantiate_resolve.js.map +1 -0
  41. package/lib/engine/engine_mainloop_utils.js +2 -2
  42. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  43. package/lib/engine/engine_networking.d.ts +51 -37
  44. package/lib/engine/engine_networking.js +132 -82
  45. package/lib/engine/engine_networking.js.map +1 -1
  46. package/lib/engine/engine_networking.transport.websocket.d.ts +15 -0
  47. package/lib/engine/engine_networking.transport.websocket.js +38 -0
  48. package/lib/engine/engine_networking.transport.websocket.js.map +1 -0
  49. package/lib/engine/engine_networking_instantiate.js +2 -2
  50. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  51. package/lib/engine/engine_networking_types.d.ts +39 -1
  52. package/lib/engine/engine_networking_types.js +7 -0
  53. package/lib/engine/engine_networking_types.js.map +1 -1
  54. package/lib/engine/engine_physics_rapier.d.ts +21 -3
  55. package/lib/engine/engine_physics_rapier.js +94 -25
  56. package/lib/engine/engine_physics_rapier.js.map +1 -1
  57. package/lib/engine/engine_serialization_builtin_serializer.js +1 -5
  58. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  59. package/lib/engine/engine_serialization_core.d.ts +1 -0
  60. package/lib/engine/engine_serialization_core.js +7 -0
  61. package/lib/engine/engine_serialization_core.js.map +1 -1
  62. package/lib/engine/engine_types.d.ts +29 -11
  63. package/lib/engine/engine_types.js +1 -1
  64. package/lib/engine/engine_types.js.map +1 -1
  65. package/lib/engine/engine_util_decorator.js +7 -2
  66. package/lib/engine/engine_util_decorator.js.map +1 -1
  67. package/lib/engine/engine_utils.d.ts +1 -1
  68. package/lib/engine/engine_utils.js +19 -5
  69. package/lib/engine/engine_utils.js.map +1 -1
  70. package/lib/engine-components/AnimationBuilder.d.ts +158 -0
  71. package/lib/engine-components/AnimationBuilder.js +305 -0
  72. package/lib/engine-components/AnimationBuilder.js.map +1 -0
  73. package/lib/engine-components/Animator.d.ts +6 -0
  74. package/lib/engine-components/Animator.js +23 -13
  75. package/lib/engine-components/Animator.js.map +1 -1
  76. package/lib/engine-components/AnimatorController.builder.d.ts +191 -0
  77. package/lib/engine-components/AnimatorController.builder.js +263 -0
  78. package/lib/engine-components/AnimatorController.builder.js.map +1 -0
  79. package/lib/engine-components/AnimatorController.d.ts +2 -119
  80. package/lib/engine-components/AnimatorController.js +33 -232
  81. package/lib/engine-components/AnimatorController.js.map +1 -1
  82. package/lib/engine-components/Collider.d.ts +18 -9
  83. package/lib/engine-components/Collider.js +61 -14
  84. package/lib/engine-components/Collider.js.map +1 -1
  85. package/lib/engine-components/Component.d.ts +72 -9
  86. package/lib/engine-components/Component.js +114 -10
  87. package/lib/engine-components/Component.js.map +1 -1
  88. package/lib/engine-components/ContactShadows.d.ts +1 -0
  89. package/lib/engine-components/ContactShadows.js +14 -1
  90. package/lib/engine-components/ContactShadows.js.map +1 -1
  91. package/lib/engine-components/DragControls.js +0 -7
  92. package/lib/engine-components/DragControls.js.map +1 -1
  93. package/lib/engine-components/DropListener.js +3 -0
  94. package/lib/engine-components/DropListener.js.map +1 -1
  95. package/lib/engine-components/EventList.d.ts +31 -9
  96. package/lib/engine-components/EventList.js +37 -76
  97. package/lib/engine-components/EventList.js.map +1 -1
  98. package/lib/engine-components/Joints.d.ts +4 -2
  99. package/lib/engine-components/Joints.js +19 -3
  100. package/lib/engine-components/Joints.js.map +1 -1
  101. package/lib/engine-components/Light.js +9 -1
  102. package/lib/engine-components/Light.js.map +1 -1
  103. package/lib/engine-components/OrbitControls.d.ts +0 -2
  104. package/lib/engine-components/OrbitControls.js +14 -1
  105. package/lib/engine-components/OrbitControls.js.map +1 -1
  106. package/lib/engine-components/RigidBody.d.ts +12 -4
  107. package/lib/engine-components/RigidBody.js +18 -4
  108. package/lib/engine-components/RigidBody.js.map +1 -1
  109. package/lib/engine-components/SceneSwitcher.js +3 -0
  110. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  111. package/lib/engine-components/api.d.ts +2 -1
  112. package/lib/engine-components/api.js +2 -1
  113. package/lib/engine-components/api.js.map +1 -1
  114. package/lib/engine-components/codegen/components.d.ts +7 -13
  115. package/lib/engine-components/codegen/components.js +7 -13
  116. package/lib/engine-components/codegen/components.js.map +1 -1
  117. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
  118. package/lib/engine-components/timeline/PlayableDirector.d.ts +21 -11
  119. package/lib/engine-components/timeline/PlayableDirector.js +75 -67
  120. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  121. package/lib/engine-components/timeline/SignalAsset.d.ts +3 -1
  122. package/lib/engine-components/timeline/SignalAsset.js +1 -0
  123. package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
  124. package/lib/engine-components/timeline/TimelineBuilder.d.ts +413 -0
  125. package/lib/engine-components/timeline/TimelineBuilder.js +506 -0
  126. package/lib/engine-components/timeline/TimelineBuilder.js.map +1 -0
  127. package/lib/engine-components/timeline/TimelineModels.d.ts +2 -1
  128. package/lib/engine-components/timeline/TimelineModels.js +3 -0
  129. package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
  130. package/lib/engine-components/timeline/TimelineTracks.d.ts +37 -6
  131. package/lib/engine-components/timeline/TimelineTracks.js +92 -26
  132. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  133. package/lib/engine-components/timeline/index.d.ts +2 -1
  134. package/lib/engine-components/timeline/index.js +2 -0
  135. package/lib/engine-components/timeline/index.js.map +1 -1
  136. package/lib/engine-components/web/CursorFollow.d.ts +0 -1
  137. package/lib/engine-components/web/CursorFollow.js +0 -1
  138. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  139. package/package.json +2 -83
  140. package/plugins/common/cloud.js +6 -1
  141. package/plugins/common/license.js +5 -2
  142. package/plugins/common/worker.js +9 -4
  143. package/plugins/vite/dependencies.js +1 -11
  144. package/plugins/vite/dependency-watcher.js +2 -2
  145. package/plugins/vite/editor-connection.js +3 -3
  146. package/plugins/vite/license.js +19 -1
  147. package/plugins/vite/reload.js +1 -1
  148. package/plugins/vite/server.js +2 -1
  149. package/src/engine/api.ts +7 -0
  150. package/src/engine/codegen/register_types.ts +10 -18
  151. package/src/engine/engine_camera.fit.ts +15 -4
  152. package/src/engine/engine_context.ts +32 -16
  153. package/src/engine/engine_context_eventbus.ts +73 -0
  154. package/src/engine/engine_disposable.ts +214 -0
  155. package/src/engine/engine_gameobject.ts +52 -157
  156. package/src/engine/engine_gltf_builtin_components.ts +7 -76
  157. package/src/engine/engine_input.ts +27 -6
  158. package/src/engine/engine_instantiate_resolve.ts +407 -0
  159. package/src/engine/engine_mainloop_utils.ts +2 -2
  160. package/src/engine/engine_networking.transport.websocket.ts +45 -0
  161. package/src/engine/engine_networking.ts +161 -137
  162. package/src/engine/engine_networking_instantiate.ts +2 -2
  163. package/src/engine/engine_networking_types.ts +41 -1
  164. package/src/engine/engine_physics_rapier.ts +102 -33
  165. package/src/engine/engine_serialization_builtin_serializer.ts +1 -6
  166. package/src/engine/engine_serialization_core.ts +9 -0
  167. package/src/engine/engine_types.ts +46 -27
  168. package/src/engine/engine_util_decorator.ts +7 -2
  169. package/src/engine/engine_utils.ts +16 -5
  170. package/src/engine-components/AnimationBuilder.ts +472 -0
  171. package/src/engine-components/Animator.ts +24 -12
  172. package/src/engine-components/AnimatorController.builder.ts +387 -0
  173. package/src/engine-components/AnimatorController.ts +20 -291
  174. package/src/engine-components/Collider.ts +66 -18
  175. package/src/engine-components/Component.ts +118 -20
  176. package/src/engine-components/ContactShadows.ts +15 -1
  177. package/src/engine-components/DragControls.ts +0 -9
  178. package/src/engine-components/DropListener.ts +3 -0
  179. package/src/engine-components/EventList.ts +45 -83
  180. package/src/engine-components/Joints.ts +20 -4
  181. package/src/engine-components/Light.ts +10 -2
  182. package/src/engine-components/OrbitControls.ts +16 -5
  183. package/src/engine-components/RigidBody.ts +18 -4
  184. package/src/engine-components/SceneSwitcher.ts +3 -0
  185. package/src/engine-components/api.ts +2 -1
  186. package/src/engine-components/codegen/components.ts +7 -13
  187. package/src/engine-components/timeline/PlayableDirector.ts +83 -81
  188. package/src/engine-components/timeline/SignalAsset.ts +4 -1
  189. package/src/engine-components/timeline/TimelineBuilder.ts +824 -0
  190. package/src/engine-components/timeline/TimelineModels.ts +5 -1
  191. package/src/engine-components/timeline/TimelineTracks.ts +96 -27
  192. package/src/engine-components/timeline/index.ts +2 -1
  193. package/src/engine-components/web/CursorFollow.ts +0 -1
  194. package/dist/needle-engine.bundle-CHmXdnE1.min.js +0 -1733
  195. package/lib/engine-components/AvatarLoader.d.ts +0 -80
  196. package/lib/engine-components/AvatarLoader.js +0 -232
  197. package/lib/engine-components/AvatarLoader.js.map +0 -1
  198. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +0 -11
  199. package/lib/engine-components/avatar/AvatarBlink_Simple.js +0 -77
  200. package/lib/engine-components/avatar/AvatarBlink_Simple.js.map +0 -1
  201. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +0 -14
  202. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +0 -69
  203. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js.map +0 -1
  204. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +0 -29
  205. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +0 -122
  206. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +0 -1
  207. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +0 -15
  208. package/lib/engine-components/avatar/Avatar_MouthShapes.js +0 -80
  209. package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +0 -1
  210. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +0 -9
  211. package/lib/engine-components/avatar/Avatar_MustacheShake.js +0 -30
  212. package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +0 -1
  213. package/src/engine-components/AvatarLoader.ts +0 -264
  214. package/src/engine-components/avatar/AvatarBlink_Simple.ts +0 -70
  215. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +0 -64
  216. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +0 -140
  217. package/src/engine-components/avatar/Avatar_MouthShapes.ts +0 -84
  218. package/src/engine-components/avatar/Avatar_MustacheShake.ts +0 -32
@@ -1,80 +0,0 @@
1
- import { Object3D } from "three";
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
- */
7
- export declare class AvatarModel {
8
- /** The root object of the avatar model */
9
- root: Object3D;
10
- /** The head object of the avatar model */
11
- head: Object3D;
12
- /** The left hand object of the avatar model, if available */
13
- leftHand: Object3D | null;
14
- /** The right hand object of the avatar model, if available */
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
- */
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
- */
29
- constructor(root: Object3D, head: Object3D, leftHand: Object3D | null, rigthHand: Object3D | null);
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
- */
38
- export declare class AvatarLoader {
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
- */
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
- */
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
- */
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
- */
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
- */
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
- */
79
- private handleCustomAvatarErrors;
80
- }
@@ -1,232 +0,0 @@
1
- import { Box3, Vector3 } from "three";
2
- import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
3
- import { InstantiateOptions } from "../engine/engine_gameobject.js";
4
- import { getLoader } from "../engine/engine_gltf.js";
5
- import * as loaders from "../engine/engine_loaders.gltf.js";
6
- import * as utils from "../engine/engine_utils.js";
7
- import { GameObject } from "./Component.js";
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
- */
13
- export class AvatarModel {
14
- /** The root object of the avatar model */
15
- root;
16
- /** The head object of the avatar model */
17
- head;
18
- /** The left hand object of the avatar model, if available */
19
- leftHand;
20
- /** The right hand object of the avatar model, if available */
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
- */
27
- get isValid() {
28
- return this.head !== null && this.head !== undefined;
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
- */
37
- constructor(root, head, leftHand, rigthHand) {
38
- this.root = root;
39
- this.head = head;
40
- this.leftHand = leftHand;
41
- this.rigthHand = rigthHand;
42
- this.root?.traverse(h => h.layers.set(2));
43
- // this.head?.traverse(h => h.layers.set(2));
44
- // this.leftHand?.traverse(h => h.layers.set(2));
45
- // this.rigthHand?.traverse(h => h.layers.set(2));
46
- }
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
- */
55
- export class AvatarLoader {
56
- avatarRegistryUrl = null;
57
- // private loader: GLTFLoader | null;
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
- */
65
- async getOrCreateNewAvatarInstance(context, avatarId) {
66
- if (!avatarId) {
67
- console.error("Can not create avatar: failed to provide id or root object");
68
- return null;
69
- }
70
- let root = null;
71
- if (typeof avatarId === "string") {
72
- root = await this.loadAvatar(context, avatarId);
73
- if (!root) {
74
- const opts = new InstantiateOptions();
75
- // opts.parent = context.scene.uuid;
76
- root = GameObject.instantiate(utils.tryFindObject(avatarId, context.scene), opts);
77
- }
78
- }
79
- else
80
- root = avatarId;
81
- if (!root) {
82
- return null;
83
- }
84
- const model = this.findAvatar(root);
85
- // model.assignRandomColors();
86
- // this.cacheModel(avatarId, model);
87
- if (model.isValid) {
88
- if (debug)
89
- console.log("[Custom Avatar] valid config", avatarId, debug ? model : "");
90
- return model;
91
- }
92
- else {
93
- console.warn("[Custom Avatar] config isn't valid", avatarId, debug ? model : "");
94
- return null;
95
- }
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
- */
103
- async loadAvatar(context, avatarId) {
104
- console.assert(avatarId !== undefined && avatarId !== null && typeof avatarId === "string", "Avatar id must not be null");
105
- if (avatarId.length <= 0)
106
- return null;
107
- if (!avatarId)
108
- return null;
109
- if (debug)
110
- console.log("[Custom Avatar] " + avatarId + ", loading...");
111
- // should probably be done by the server?!
112
- if (!avatarId.endsWith(".glb"))
113
- avatarId += ".glb";
114
- // for the demo we use the storage backend we uploaded the avatar to (by file drop)
115
- if (this.avatarRegistryUrl === null) {
116
- // try loading avatar from local file
117
- const download_res = await fetch("./" + avatarId);
118
- let bin = null;
119
- if (download_res.ok) {
120
- const blob = await download_res.blob();
121
- if (blob)
122
- bin = await blob.arrayBuffer();
123
- }
124
- if (!bin) {
125
- // bin = await BlobStorage.download(avatarId, avatarId, 0, "no url here go away", true);
126
- return null;
127
- }
128
- const gltf = await getLoader().parseSync(context, bin, null, 0);
129
- return gltf?.scene ?? null;
130
- }
131
- // if (this.avatarModelCache.has(avatarId)) {
132
- // console.log("[Custom Avatar] " + avatarId + ", found in cache");
133
- // return new Promise((res, _) => {
134
- // var model = this.avatarModelCache.get(avatarId)?.createNewInstance();
135
- // res(model);
136
- // });
137
- // }
138
- // return null;
139
- const loader = new GLTFLoader();
140
- loaders.addDracoAndKTX2Loaders(loader, context);
141
- // TODO: cache binary (fetch finary from model gallery and use binary method)
142
- return new Promise((resolve, _reject) => {
143
- const url = this.avatarRegistryUrl + "/" + avatarId;
144
- loader.load(url, async (gltf) => {
145
- await getLoader().createBuiltinComponents(context, url, gltf, null, undefined);
146
- resolve(gltf.scene);
147
- }, progress => {
148
- if (debug)
149
- console.log("[Custom Avatar] " + (progress.loaded / progress.total * 100) + '% loaded of ' + (progress.total / 1024) + "kB");
150
- }, error => {
151
- console.error("[Custom Avatar] " + "Error when loading: " + error);
152
- resolve(null);
153
- });
154
- });
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
- */
161
- cacheModel(_id, _model) {
162
- // this.avatarModelCache.set(id, model);
163
- }
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
- */
169
- findAvatar(obj) {
170
- const root = obj;
171
- let searchIn = root;
172
- // some GLTFs have a "scene" root it seems, others don't, we skip the root here if there's only one child
173
- if (searchIn.children.length == 1)
174
- searchIn = obj.children[0];
175
- let head = this.findAvatarPart(searchIn, ["head"]);
176
- const leftHand = this.findAvatarPart(searchIn, ["left", "hand"]);
177
- const rightHand = this.findAvatarPart(searchIn, ["right", "hand"]);
178
- if (!head) {
179
- // very last fallback, entire root is used as head
180
- head = root;
181
- // normalize size, if the object isn't properly setup the scale might be totally off
182
- const boundsSize = new Vector3();
183
- new Box3().setFromObject(head).getSize(boundsSize);
184
- const maxAxis = Math.max(boundsSize.x, boundsSize.y, boundsSize.z);
185
- console.warn("[Custom Avatar] " + "Normalizing head scale, it's too big: " + maxAxis + " meters! Should be < 0.3m");
186
- if (maxAxis > 0.3) {
187
- head.scale.multiplyScalar(1.0 / maxAxis * 0.3);
188
- }
189
- }
190
- const model = new AvatarModel(root, head, leftHand, rightHand);
191
- return model;
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
- */
199
- findAvatarPart(obj, searchString) {
200
- const name = obj.name.toLowerCase();
201
- let matchesAll = true;
202
- for (const str of searchString) {
203
- if (!matchesAll)
204
- break;
205
- if (name.indexOf(str) === -1)
206
- matchesAll = false;
207
- }
208
- if (matchesAll)
209
- return obj;
210
- if (obj.children) {
211
- for (const child of obj.children) {
212
- const found = this.findAvatarPart(child, searchString);
213
- if (found)
214
- return found;
215
- }
216
- }
217
- return null;
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
- */
225
- handleCustomAvatarErrors(response) {
226
- if (!response.ok) {
227
- throw Error(response.statusText);
228
- }
229
- return response;
230
- }
231
- }
232
- //# sourceMappingURL=AvatarLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AvatarLoader.js","sourceRoot":"","sources":["../../src/engine-components/AvatarLoader.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { Behaviour } from "../Component.js";
2
- /** @internal */
3
- export declare class AvatarBlink_Simple extends Behaviour {
4
- private eyes;
5
- private lastBlinkTime;
6
- private blinkLength;
7
- private eyesOpen;
8
- private state;
9
- awake(): void;
10
- update(): void;
11
- }
@@ -1,77 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { Object3D } from "three";
8
- import { serializable } from "../../engine/engine_serialization_decorator.js";
9
- import { Behaviour, GameObject } from "../Component.js";
10
- import { XRFlag } from "../webxr/XRFlag.js";
11
- /** @internal */
12
- export class AvatarBlink_Simple extends Behaviour {
13
- eyes = [];
14
- lastBlinkTime = 0;
15
- blinkLength = 0;
16
- eyesOpen = true;
17
- state = null;
18
- awake() {
19
- this.state = GameObject.getComponentInParent(this.gameObject, XRFlag);
20
- // console.log(this.state, this.activeAndEnabled, this.gameObject);
21
- }
22
- update() {
23
- if (!this.gameObject || !this.gameObject.visible)
24
- return;
25
- if (!this.eyes || !Array.isArray(this.eyes) || this.eyes.length === 0)
26
- return;
27
- const needsUpdate = this.context.time.time - this.lastBlinkTime > this.blinkLength;
28
- if (needsUpdate) {
29
- this.lastBlinkTime = this.context.time.time;
30
- // workaround until we propagate active state to all child components
31
- if (this.state && !this.state.isOn)
32
- return;
33
- if (!this.activeAndEnabled)
34
- return;
35
- // console.log(this.state?.isOn, this.activeAndEnabled);
36
- this.eyesOpen = !this.eyesOpen;
37
- this.blinkLength = Math.random();
38
- if (!this.eyesOpen) {
39
- this.blinkLength *= Math.random() * .2;
40
- this.blinkLength += .1;
41
- }
42
- else {
43
- // eyes are open
44
- this.blinkLength *= 3;
45
- this.blinkLength += .5;
46
- if (Math.random() < .1)
47
- this.blinkLength = .1 + Math.random() * .2;
48
- }
49
- if (Math.random() < .1)
50
- this.blinkLength *= 3;
51
- // if(time.time - this.lastMouthChangeTime < .5 && Math.random() > .5){
52
- // this.blinkLength *= 1-(100/this.lastMouthChangeFrequency);
53
- // }
54
- this.blinkLength = Math.max(.2, this.blinkLength);
55
- this.blinkLength = Math.min(3, this.blinkLength);
56
- if (this.eyes) {
57
- for (const eye of this.eyes) {
58
- if (eye)
59
- eye.visible = this.eyesOpen;
60
- }
61
- }
62
- }
63
- }
64
- }
65
- __decorate([
66
- serializable(Object3D)
67
- ], AvatarBlink_Simple.prototype, "eyes", void 0);
68
- __decorate([
69
- serializable()
70
- ], AvatarBlink_Simple.prototype, "lastBlinkTime", void 0);
71
- __decorate([
72
- serializable()
73
- ], AvatarBlink_Simple.prototype, "blinkLength", void 0);
74
- __decorate([
75
- serializable()
76
- ], AvatarBlink_Simple.prototype, "eyesOpen", void 0);
77
- //# sourceMappingURL=AvatarBlink_Simple.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AvatarBlink_Simple.js","sourceRoot":"","sources":["../../../src/engine-components/avatar/AvatarBlink_Simple.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { Object3D } from "three";
2
- import { Behaviour, GameObject } from "../Component.js";
3
- /** @internal */
4
- export declare class AvatarEyeLook_Rotation extends Behaviour {
5
- head: GameObject | null;
6
- eyes: GameObject[] | null;
7
- target: Object3D | null;
8
- private brain;
9
- awake(): void;
10
- private vec;
11
- private static forward;
12
- private currentTargetPoint;
13
- update(): void;
14
- }
@@ -1,69 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { Object3D, Vector3 } from "three";
8
- import { serializable } from "../../engine/engine_serialization_decorator.js";
9
- import * as utils from "../../engine/engine_three_utils.js";
10
- import { Behaviour, GameObject } from "../Component.js";
11
- import { Avatar_Brain_LookAt } from "./Avatar_Brain_LookAt.js";
12
- /** @internal */
13
- export class AvatarEyeLook_Rotation extends Behaviour {
14
- head = null;
15
- eyes = null;
16
- target = null;
17
- brain = null;
18
- awake() {
19
- if (!this.brain) {
20
- this.brain = GameObject.getComponentInParent(this.gameObject, Avatar_Brain_LookAt);
21
- }
22
- if (!this.brain) {
23
- this.brain = GameObject.addComponent(this.gameObject, Avatar_Brain_LookAt);
24
- }
25
- if (this.brain && this.target) {
26
- this.brain.controlledTarget = this.target;
27
- }
28
- }
29
- vec = new Vector3();
30
- static forward = new Vector3(0, 0, 1);
31
- currentTargetPoint = new Vector3();
32
- update() {
33
- // if(!this.activeAndEnabled) return;
34
- const target = this.target;
35
- // console.log(target);
36
- if (target && this.head) {
37
- const eyes = this.eyes;
38
- if (eyes) {
39
- const worldTarget = utils.getWorldPosition(target);
40
- this.currentTargetPoint.lerp(worldTarget, this.context.time.deltaTime / .1);
41
- const headPosition = utils.getWorldPosition(this.head);
42
- const direction = this.vec.copy(this.currentTargetPoint).sub(headPosition).normalize();
43
- if (direction.length() < .1)
44
- return;
45
- const forward = AvatarEyeLook_Rotation.forward;
46
- forward.set(0, 0, 1);
47
- forward.applyQuaternion(utils.getWorldQuaternion(this.head));
48
- const dot = forward.dot(direction);
49
- if (dot > .45) {
50
- // console.log(dot);
51
- for (let i = 0; i < eyes.length; i++) {
52
- const eye = eyes[i];
53
- eye.lookAt(this.currentTargetPoint);
54
- }
55
- }
56
- }
57
- }
58
- }
59
- }
60
- __decorate([
61
- serializable(Object3D)
62
- ], AvatarEyeLook_Rotation.prototype, "head", void 0);
63
- __decorate([
64
- serializable(Object3D)
65
- ], AvatarEyeLook_Rotation.prototype, "eyes", void 0);
66
- __decorate([
67
- serializable(Object3D)
68
- ], AvatarEyeLook_Rotation.prototype, "target", void 0);
69
- //# sourceMappingURL=AvatarEyeLook_Rotation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AvatarEyeLook_Rotation.js","sourceRoot":"","sources":["../../../src/engine-components/avatar/AvatarEyeLook_Rotation.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import { Object3D } from "three";
2
- import { Context } from "../../engine/engine_setup.js";
3
- import { Behaviour } from "../Component.js";
4
- import { AvatarMarker } from "../webxr/WebXRAvatar.js";
5
- /** @internal */
6
- export declare class Avatar_POI {
7
- static Pois: {
8
- obj: Object3D;
9
- avatar: AvatarMarker | null;
10
- }[];
11
- static LastChangeTime: number;
12
- static Add(context: Context, obj: Object3D, ignoredBy?: AvatarMarker | null): void;
13
- static Remove(context: Context | null, obj: Object3D | null): void;
14
- }
15
- /** @internal */
16
- export declare class Avatar_Brain_LookAt extends Behaviour {
17
- set controlledTarget(target: Object3D);
18
- private target;
19
- private avatar;
20
- private _model;
21
- private _targetModel;
22
- private _currentTargetObject;
23
- private _lastUpdateTime;
24
- private _lookDuration;
25
- private _lastPoiChangedTime;
26
- awake(): void;
27
- update(): void;
28
- private selectTarget;
29
- }
@@ -1,122 +0,0 @@
1
- import { Vector3 } from "three";
2
- import { OwnershipModel } from "../../engine/engine_networking.js";
3
- import { Context } from "../../engine/engine_setup.js";
4
- import * as utils from "../../engine/engine_three_utils.js";
5
- import { TypeStore } from "../../engine/engine_typestore.js";
6
- import { Behaviour, GameObject } from "../Component.js";
7
- import { AvatarMarker } from "../webxr/WebXRAvatar.js";
8
- /** @internal */
9
- export class Avatar_POI {
10
- static Pois = [];
11
- static LastChangeTime = 0;
12
- static Add(context, obj, ignoredBy = null) {
13
- if (!obj)
14
- return;
15
- for (const e of this.Pois) {
16
- if (e.obj === obj)
17
- return;
18
- }
19
- this.Pois.push({ obj: obj, avatar: ignoredBy });
20
- this.LastChangeTime = context.time.time;
21
- // console.log("Added", obj?.name);
22
- }
23
- static Remove(context, obj) {
24
- if (!obj)
25
- return;
26
- for (const e of this.Pois) {
27
- if (e.obj === obj) {
28
- this.Pois.splice(this.Pois.indexOf(e), 1);
29
- this.LastChangeTime = context?.time.time ?? Context.Current?.time.time;
30
- // console.log("Removed", obj?.name);
31
- return;
32
- }
33
- }
34
- }
35
- }
36
- var NetworkEvents;
37
- (function (NetworkEvents) {
38
- NetworkEvents["TargetChanged"] = "avatar-look-target-changed";
39
- })(NetworkEvents || (NetworkEvents = {}));
40
- class TargetModel {
41
- guid;
42
- position = new Vector3();
43
- }
44
- /** @internal */
45
- export class Avatar_Brain_LookAt extends Behaviour {
46
- set controlledTarget(target) {
47
- this.target = target;
48
- // HACK
49
- const r = TypeStore.get("MoveRandom");
50
- if (r && this.target) {
51
- const rm = GameObject.getComponent(this.target, r);
52
- if (rm) {
53
- rm.destroy();
54
- }
55
- }
56
- // this.target.add(new AxesHelper(.1));
57
- }
58
- // that target to copy positions into
59
- target = null;
60
- avatar = null;
61
- _model = null;
62
- _targetModel = new TargetModel();
63
- _currentTargetObject = null;
64
- _lastUpdateTime = 0;
65
- _lookDuration = 0;
66
- _lastPoiChangedTime = 0;
67
- awake() {
68
- this.avatar = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
69
- if (this.avatar) {
70
- const marker = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
71
- this._model = new OwnershipModel(this.context.connection, this.guid);
72
- if (marker?.isLocalAvatar) {
73
- this._model.requestOwnership();
74
- }
75
- }
76
- this.context.connection.beginListen(NetworkEvents.TargetChanged, (cb) => {
77
- if (this.target && cb && cb.guid === this.avatar?.guid) {
78
- utils.setWorldPosition(this.target, cb.position);
79
- }
80
- });
81
- // console.log(this);
82
- }
83
- update() {
84
- const connected = this.context.connection.isConnected;
85
- if (!connected || this._model?.hasOwnership) {
86
- if (Avatar_POI.LastChangeTime !== this._lastPoiChangedTime) {
87
- this._lastPoiChangedTime = Avatar_POI.LastChangeTime;
88
- this._lookDuration = 0;
89
- }
90
- this.selectTarget();
91
- // send target info
92
- if (this._currentTargetObject && this.context.time.frameCount % 10 === 0 && this.target) {
93
- const wp = utils.getWorldPosition(this._currentTargetObject);
94
- utils.setWorldPosition(this.target, wp);
95
- if (this.context.connection.isConnected && this.avatar) {
96
- this.context.connection.send(NetworkEvents.TargetChanged, this._targetModel);
97
- this._targetModel.guid = this.avatar.guid;
98
- this._targetModel.position.copy(wp);
99
- }
100
- }
101
- }
102
- }
103
- selectTarget() {
104
- // select random target
105
- const td = this.context.time.time - this._lastUpdateTime;
106
- if (td > this._lookDuration) {
107
- this._lastUpdateTime = this.context.time.time;
108
- this._lookDuration = Math.random() * .5 + .2;
109
- const pois = Avatar_POI.Pois;
110
- if (pois.length > 0) {
111
- const poi = pois[Math.floor(Math.random() * pois.length)];
112
- if (poi && poi.obj) {
113
- if (poi.avatar && poi.avatar === this.avatar)
114
- return;
115
- this._currentTargetObject = poi.obj;
116
- // console.log(this._currentTargetObject);
117
- }
118
- }
119
- }
120
- }
121
- }
122
- //# sourceMappingURL=Avatar_Brain_LookAt.js.map