@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,140 +0,0 @@
1
- import { Object3D, Vector3 } from "three";
2
-
3
- import { OwnershipModel } from "../../engine/engine_networking.js";
4
- import type { IModel } from "../../engine/engine_networking_types.js";
5
- import { Context } from "../../engine/engine_setup.js";
6
- import * as utils from "../../engine/engine_three_utils.js";
7
- import { TypeStore } from "../../engine/engine_typestore.js";
8
- import { Behaviour, GameObject } from "../Component.js";
9
- import { AvatarMarker } from "../webxr/WebXRAvatar.js";
10
-
11
- /** @internal */
12
- export class Avatar_POI {
13
-
14
- public static Pois: { obj: Object3D, avatar: AvatarMarker | null }[] = [];
15
- public static LastChangeTime: number = 0;
16
-
17
- public static Add(context: Context, obj: Object3D, ignoredBy: AvatarMarker | null = null) {
18
- if (!obj) return;
19
- for (const e of this.Pois) {
20
- if (e.obj === obj) return;
21
- }
22
- this.Pois.push({ obj: obj, avatar: ignoredBy });
23
- this.LastChangeTime = context.time.time;
24
- // console.log("Added", obj?.name);
25
- }
26
-
27
- public static Remove(context: Context | null, obj: Object3D | null) {
28
-
29
- if (!obj) return;
30
- for (const e of this.Pois) {
31
- if (e.obj === obj) {
32
- this.Pois.splice(this.Pois.indexOf(e), 1);
33
- this.LastChangeTime = context?.time.time ?? Context.Current?.time.time;
34
- // console.log("Removed", obj?.name);
35
- return;
36
- }
37
- }
38
- }
39
- }
40
-
41
- enum NetworkEvents {
42
- TargetChanged = "avatar-look-target-changed"
43
- }
44
-
45
- class TargetModel implements IModel {
46
- public guid!: string;
47
- public position: Vector3 = new Vector3();
48
- }
49
-
50
- /** @internal */
51
- export class Avatar_Brain_LookAt extends Behaviour {
52
-
53
- public set controlledTarget(target: Object3D) {
54
- this.target = target;
55
- // HACK
56
- const r = TypeStore.get("MoveRandom");
57
- if (r && this.target) {
58
- const rm = GameObject.getComponent(this.target, r) as Behaviour;
59
- if (rm) {
60
- rm.destroy();
61
- }
62
- }
63
-
64
- // this.target.add(new AxesHelper(.1));
65
- }
66
-
67
- // that target to copy positions into
68
- private target: Object3D | null = null;
69
-
70
- private avatar: AvatarMarker | null = null;
71
- private _model: OwnershipModel | null = null;
72
- private _targetModel: TargetModel = new TargetModel();
73
- private _currentTargetObject: Object3D | null = null;
74
- private _lastUpdateTime: number = 0;
75
- private _lookDuration: number = 0;
76
- private _lastPoiChangedTime: number = 0;
77
-
78
- awake(): void {
79
- this.avatar = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
80
-
81
- if (this.avatar) {
82
- const marker = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
83
- this._model = new OwnershipModel(this.context.connection, this.guid);
84
- if (marker?.isLocalAvatar) {
85
- this._model.requestOwnership();
86
- }
87
- }
88
-
89
- this.context.connection.beginListen(NetworkEvents.TargetChanged, (cb: TargetModel) => {
90
- if (this.target && cb && cb.guid === this.avatar?.guid) {
91
- utils.setWorldPosition(this.target, cb.position);
92
- }
93
- });
94
-
95
- // console.log(this);
96
- }
97
-
98
- update(): void {
99
- const connected = this.context.connection.isConnected;
100
- if (!connected || this._model?.hasOwnership) {
101
-
102
- if (Avatar_POI.LastChangeTime !== this._lastPoiChangedTime) {
103
- this._lastPoiChangedTime = Avatar_POI.LastChangeTime;
104
- this._lookDuration = 0;
105
- }
106
-
107
- this.selectTarget();
108
-
109
- // send target info
110
- if (this._currentTargetObject && this.context.time.frameCount % 10 === 0 && this.target) {
111
- const wp = utils.getWorldPosition(this._currentTargetObject);
112
- utils.setWorldPosition(this.target, wp);
113
-
114
- if (this.context.connection.isConnected && this.avatar) {
115
- this.context.connection.send(NetworkEvents.TargetChanged, this._targetModel);
116
- this._targetModel.guid = this.avatar.guid;
117
- this._targetModel.position.copy(wp);
118
- }
119
- }
120
- }
121
- }
122
-
123
- private selectTarget() {
124
- // select random target
125
- const td = this.context.time.time - this._lastUpdateTime;
126
- if (td > this._lookDuration) {
127
- this._lastUpdateTime = this.context.time.time;
128
- this._lookDuration = Math.random() * .5 + .2;
129
- const pois = Avatar_POI.Pois;
130
- if (pois.length > 0) {
131
- const poi = pois[Math.floor(Math.random() * pois.length)];
132
- if (poi && poi.obj) {
133
- if (poi.avatar && poi.avatar === this.avatar) return;
134
- this._currentTargetObject = poi.obj;
135
- // console.log(this._currentTargetObject);
136
- }
137
- }
138
- }
139
- }
140
- }
@@ -1,84 +0,0 @@
1
- import { Object3D } from "three";
2
-
3
- import { serializable } from "../../engine/engine_serialization_decorator.js";
4
- import * as utils from "../../engine/engine_utils.js";
5
- import { Behaviour, GameObject } from "../Component.js";
6
- import { Voip } from "../Voip.js";
7
- import { AvatarMarker } from "../webxr/WebXRAvatar.js";
8
-
9
- const debug = utils.getParam("debugmouth");
10
-
11
- /** @internal */
12
- export class Avatar_MouthShapes extends Behaviour {
13
- @serializable(Object3D)
14
- public idle: Object3D[] = [];
15
- @serializable(Object3D)
16
- public talking: Object3D[] = [];
17
-
18
- private marker: AvatarMarker | null = null;
19
- private voip: Voip | null = null;
20
- private lastMouthChangeTime = 0;
21
- private mouthChangeLength = 0;
22
-
23
- awake(): void {
24
- setTimeout(()=>{
25
- this.voip = GameObject.findObjectOfType(Voip, this.context);
26
- if (!this.marker) this.marker = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
27
- }, 3000)
28
- }
29
-
30
- update(): void {
31
- if (!this.voip) return;
32
- if (this.context.time.frameCount % 10 !== 0) return;
33
- let id = this.marker?.connectionId ?? null;
34
- if (!id) {
35
- if (debug) id = null;
36
- return;
37
- }
38
- const freq = this.voip.getFrequency(id) ?? 0;
39
- this.updateLips(freq);
40
- }
41
-
42
- private updateLips(frequency: number) {
43
- if (this.context.time.time - this.lastMouthChangeTime > this.mouthChangeLength) {
44
- this.mouthChangeLength = .05 + Math.random() * .1;
45
- if (this.talking && this.talking.length > 0 && frequency > 30) {
46
- this.lastMouthChangeTime = this.context.time.time;
47
- const index = Math.floor(Math.random() * this.talking.length);
48
- this.setMouthShapeActive(this.talking, index);
49
- }
50
- else if (this.idle.length > 0 && this.context.time.time - this.lastMouthChangeTime > .5) {
51
- this.lastMouthChangeTime = this.context.time.time;
52
- const index = Math.floor(Math.random() * this.idle.length);
53
- this.setMouthShapeActive(this.idle, index);
54
- }
55
- }
56
- }
57
-
58
- private setMouthShapeActive(arr: Object3D[], index: number) {
59
- if (!arr) return;
60
-
61
- // hide other
62
- if (arr != this.idle) this.idle.map(i => i.visible = false);
63
- else this.talking.map(i => i.visible = false);
64
-
65
- for (let i = 0; i < arr.length; i++) {
66
- const shape = arr[i];
67
- if (shape) {
68
- shape.visible = i === index;
69
- }
70
- }
71
- }
72
-
73
- // private tryFindMouthShapes() {
74
- // if (this.mouthShapes) return;
75
- // this.mouthShapes = [];
76
- // this.head?.traverse(o => {
77
- // if (o && o.type === "Mesh") {
78
- // if (o.name.lastIndexOf("mouth") > 0) {
79
- // this.mouthShapes.push(o as Mesh);
80
- // }
81
- // }
82
- // });
83
- // }
84
- }
@@ -1,32 +0,0 @@
1
- import { Vector3 } from "three";
2
-
3
- import { Behaviour, GameObject } from "../Component.js";
4
- import { Voip } from "../Voip.js";
5
- import { AvatarMarker } from "../webxr/WebXRAvatar.js";
6
-
7
- /** @internal */
8
- export class Avatar_MustacheShake extends Behaviour {
9
- private voip: Voip | null = null;
10
- private marker: AvatarMarker | null = null;
11
-
12
- private _startPosition : Vector3 | null = null;
13
-
14
- awake() {
15
- this.voip = GameObject.findObjectOfType(Voip, this.context);
16
- this.marker = GameObject.getComponentInParent(this.gameObject, AvatarMarker);
17
- // console.log(this);
18
- }
19
-
20
- update() {
21
- if (!this.voip || !this.marker) return;
22
- if(this.context.time.frameCount % 10 !== 0) return;
23
- const id = this.marker.connectionId;
24
- const freq = this.voip.getFrequency(id);
25
- if(freq == null) return;
26
- if(!this._startPosition) {
27
- this._startPosition = this.gameObject.position.clone();
28
- }
29
- const t = freq / 100;
30
- this.gameObject.position.y = this._startPosition.y + t * 0.07;
31
- }
32
- }