@needle-tools/engine 2.56.2-pre → 2.58.0-pre

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 (73) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/needle-engine.d.ts +99 -160
  3. package/dist/needle-engine.js +279 -3420
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +18 -18
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/dist/needle-engine.tsbuildinfo +1 -1
  8. package/lib/engine/api.d.ts +2 -1
  9. package/lib/engine/api.js +2 -1
  10. package/lib/engine/api.js.map +1 -1
  11. package/lib/engine/codegen/register_types.js +2 -6
  12. package/lib/engine/codegen/register_types.js.map +1 -1
  13. package/lib/engine/engine.d.ts +2 -28
  14. package/lib/engine/engine.js +1 -0
  15. package/lib/engine/engine.js.map +1 -1
  16. package/lib/engine/engine_hot_reload.d.ts +3 -0
  17. package/lib/engine/engine_hot_reload.js +168 -0
  18. package/lib/engine/engine_hot_reload.js.map +1 -0
  19. package/lib/engine/engine_input.js +1 -1
  20. package/lib/engine/engine_scenetools.d.ts +1 -0
  21. package/lib/engine/engine_scenetools.js +8 -6
  22. package/lib/engine/engine_scenetools.js.map +1 -1
  23. package/lib/engine/engine_setup.d.ts +4 -2
  24. package/lib/engine/engine_setup.js +66 -50
  25. package/lib/engine/engine_setup.js.map +1 -1
  26. package/lib/engine/engine_three_utils.js.map +1 -1
  27. package/lib/engine/engine_utils_screenshot.d.ts +5 -0
  28. package/lib/engine/engine_utils_screenshot.js +32 -0
  29. package/lib/engine/engine_utils_screenshot.js.map +1 -0
  30. package/lib/engine-components/Fog.d.ts +20 -0
  31. package/lib/engine-components/Fog.js +61 -0
  32. package/lib/engine-components/Fog.js.map +1 -0
  33. package/lib/engine-components/Skybox.js +3 -1
  34. package/lib/engine-components/Skybox.js.map +1 -1
  35. package/lib/engine-components/WebXR.js +2 -2
  36. package/lib/engine-components/WebXR.js.map +1 -1
  37. package/lib/engine-components/codegen/components.d.ts +1 -0
  38. package/lib/engine-components/codegen/components.js +1 -0
  39. package/lib/engine-components/codegen/components.js.map +1 -1
  40. package/lib/engine-components/ui/EventSystem.d.ts +1 -1
  41. package/lib/engine-components/ui/EventSystem.js +25 -10
  42. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  43. package/lib/engine-components/ui/PointerEvents.d.ts +3 -1
  44. package/lib/engine-components/ui/PointerEvents.js +1 -0
  45. package/lib/engine-components/ui/PointerEvents.js.map +1 -1
  46. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  47. package/lib/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +1 -2
  49. package/src/engine/api.ts +3 -2
  50. package/src/engine/codegen/register_types.js +4 -8
  51. package/src/engine/engine.ts +3 -1
  52. package/src/engine/engine_hot_reload.ts +186 -0
  53. package/src/engine/engine_input.ts +1 -1
  54. package/src/engine/engine_scenetools.ts +9 -6
  55. package/src/engine/engine_setup.ts +66 -52
  56. package/src/engine/engine_three_utils.ts +4 -4
  57. package/src/engine/engine_utils_screenshot.ts +41 -0
  58. package/src/engine-components/Fog.ts +60 -0
  59. package/src/engine-components/Skybox.ts +3 -1
  60. package/src/engine-components/TestRunner.ts +1 -1
  61. package/src/engine-components/WebXR.ts +2 -2
  62. package/src/engine-components/codegen/components.ts +1 -0
  63. package/src/engine-components/ui/EventSystem.ts +30 -15
  64. package/src/engine-components/ui/PointerEvents.ts +7 -4
  65. package/src/engine-components/ui/Raycaster.ts +6 -3
  66. package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +0 -18
  67. package/lib/engine-components-experimental/annotation/LineDrawer.js +0 -175
  68. package/lib/engine-components-experimental/annotation/LineDrawer.js.map +0 -1
  69. package/lib/engine-components-experimental/annotation/LinesManager.d.ts +0 -54
  70. package/lib/engine-components-experimental/annotation/LinesManager.js +0 -155
  71. package/lib/engine-components-experimental/annotation/LinesManager.js.map +0 -1
  72. package/src/engine-components-experimental/annotation/LineDrawer.ts +0 -194
  73. package/src/engine-components-experimental/annotation/LinesManager.ts +0 -218
@@ -36,13 +36,12 @@ export class EventSystem extends Behaviour {
36
36
  GameObject.addNewComponent(go, EventSystem);
37
37
  context.scene.add(go);
38
38
  }
39
-
40
- static get systems(): EventSystem[]
41
- {
39
+
40
+ static get systems(): EventSystem[] {
42
41
  const context = Context.Current;
43
42
  if (!this._eventSystemMap.has(context)) {
44
43
  this._eventSystemMap.set(context, []);
45
- }
44
+ }
46
45
  return this._eventSystemMap.get(context)!;
47
46
  }
48
47
 
@@ -91,6 +90,7 @@ export class EventSystem extends Behaviour {
91
90
  private _selectStartFn?: any;
92
91
  private _selectEndFn?: any;
93
92
  private _selectUpdateFn?: any;
93
+ private _onBeforeUpdateFn?: any;
94
94
 
95
95
  onEnable(): void {
96
96
 
@@ -118,7 +118,7 @@ export class EventSystem extends Behaviour {
118
118
  opts.isPressed = ctrl.selectionPressed;
119
119
  opts.isClicked = ctrl.selectionClick;
120
120
  this.handleEvents(args.grab, opts);
121
-
121
+
122
122
  const prevGrabbed = grabbed.get(ctrl);
123
123
  grabbed.set(ctrl, null);
124
124
  if (prevGrabbed) {
@@ -149,20 +149,22 @@ export class EventSystem extends Behaviour {
149
149
  WebXRController.addEventListener(ControllerEvents.SelectEnd, this._selectEndFn);
150
150
  WebXRController.addEventListener(ControllerEvents.Update, this._selectUpdateFn);
151
151
 
152
- this.context.pre_update_callbacks.push(this.onBeforeUpdate.bind(this));
153
- this.context.input.addEventListener(InputEvents.PointerDown, this.onPointerDown.bind(this));
152
+ // TODO: unregister
153
+ this._onBeforeUpdateFn ??= this.onBeforeUpdate.bind(this);
154
+ this.context.pre_update_callbacks.push(this._onBeforeUpdateFn);
155
+ this.context.input.addEventListener(InputEvents.PointerDown, this._onBeforeUpdateFn);
154
156
  }
155
157
 
156
158
  onDisable(): void {
157
159
  WebXRController.removeEventListener(ControllerEvents.SelectStart, this._selectStartFn);
158
160
  WebXRController.removeEventListener(ControllerEvents.SelectEnd, this._selectEndFn);
159
161
  WebXRController.removeEventListener(ControllerEvents.Update, this._selectUpdateFn);
160
- }
161
162
 
162
- onPointerDown() {
163
- this.onBeforeUpdate();
163
+ this.context.pre_update_callbacks.splice(this.context.pre_update_callbacks.indexOf(this._onBeforeUpdateFn), 1);
164
+ this.context.input.removeEventListener(InputEvents.PointerDown, this._onBeforeUpdateFn);
164
165
  }
165
166
 
167
+
166
168
  // doesnt work in dist
167
169
  // onBeforeRender() {
168
170
  // MeshUIHelper.update(this.context);
@@ -195,12 +197,25 @@ export class EventSystem extends Behaviour {
195
197
  }
196
198
 
197
199
  const hits = this.performRaycast(null);
198
- const args: PointerEventData = new PointerEventData(this.context.input.getPointerEvent(0));
200
+ let pointerId = 0;
201
+ for (const i of this.context.input.foreachPointerId()) {
202
+ const isDown = this.context.input.getPointerDown(i);
203
+ const isUp = this.context.input.getPointerUp(i);
204
+ if (isDown || isUp) {
205
+ pointerId = i;
206
+ break;
207
+ }
208
+ }
209
+ const ptr = this.context.input.getPointerEvent(pointerId);
210
+ // console.log(ptr);
211
+ const args: PointerEventData = new PointerEventData(ptr);
199
212
  args.inputSource = this.context.input;
200
- args.isClicked = this.context.input.mouseClick;
201
- args.isDown = this.context.input.mouseDown;
202
- args.isUp = this.context.input.mouseUp;
203
- args.isPressed = this.context.input.mousePressed;
213
+ args.pointerId = pointerId;
214
+ args.isClicked = this.context.input.getPointerClicked(pointerId)
215
+ args.isDown = this.context.input.getPointerDown(pointerId);
216
+ args.isUp = this.context.input.getPointerUp(pointerId);
217
+ args.isPressed = this.context.input.getPointerPressed(pointerId);
218
+ // if(args.isClicked || args.isUp) console.log("clicked", args);
204
219
  this.lastPointerEvent = args;
205
220
  if (!hits) return;
206
221
 
@@ -1,3 +1,5 @@
1
+ import { Input } from "../../engine/engine_input";
2
+
1
3
  export interface IInputEventArgs {
2
4
  get used(): boolean;
3
5
  Use(): void;
@@ -5,7 +7,7 @@ export interface IInputEventArgs {
5
7
  }
6
8
 
7
9
  export class PointerEventData implements IInputEventArgs {
8
- used: boolean = false;
10
+ used: boolean = false;
9
11
 
10
12
  Use() {
11
13
  this.used = true;
@@ -15,17 +17,18 @@ export class PointerEventData implements IInputEventArgs {
15
17
  this.event?.stopImmediatePropagation();
16
18
  }
17
19
 
18
- inputSource: any;
20
+ inputSource: Input | any;
19
21
  object!: THREE.Object3D;
20
22
 
23
+ pointerId: number | undefined;
21
24
  isDown: boolean | undefined;
22
25
  isUp: boolean | undefined;
23
26
  isPressed: boolean | undefined;
24
27
  isClicked: boolean | undefined;
25
28
 
26
- private event?:Event;
29
+ private event?: Event;
27
30
 
28
- constructor(events?:Event){
31
+ constructor(events?: Event) {
29
32
  this.event = events;
30
33
  }
31
34
  }
@@ -1,8 +1,8 @@
1
- import { Camera } from "three";
2
1
  import { RaycastOptions } from "../../engine/engine_physics";
3
- import { Behaviour } from "../Component";
2
+ import { Behaviour, Component } from "../Component";
4
3
  import { EventSystem } from "./EventSystem";
5
4
 
5
+
6
6
  export class Raycaster extends Behaviour {
7
7
  awake(): void {
8
8
  EventSystem.createIfNoneExists(this.context);
@@ -21,6 +21,7 @@ export class Raycaster extends Behaviour {
21
21
  }
22
22
  }
23
23
 
24
+
24
25
  export class ObjectRaycaster extends Raycaster {
25
26
  private targets: THREE.Object3D[] | null = null;
26
27
  private raycastHits: THREE.Intersection[] = [];
@@ -44,4 +45,6 @@ export class GraphicRaycaster extends ObjectRaycaster {
44
45
  // eventCamera: Camera | null = null;
45
46
  // ignoreReversedGraphics: boolean = false;
46
47
  // rootRaycaster: GraphicRaycaster | null = null;
47
- }
48
+ }
49
+
50
+
@@ -1,18 +0,0 @@
1
- import { Behaviour } from "../../engine-components/Component";
2
- import * as THREE from 'three';
3
- import { LinesManager } from "./LinesManager";
4
- export declare class LinesDrawer extends Behaviour {
5
- lines: LinesManager;
6
- colliders?: THREE.Object3D[];
7
- alignToSurface: boolean;
8
- addToPaintedObject: boolean;
9
- private orbit?;
10
- start(): void;
11
- private _states;
12
- update(): void;
13
- private updateLine;
14
- private _raycastOptions;
15
- private static _raycaster;
16
- private getHit;
17
- private createRandomMaterial;
18
- }
@@ -1,175 +0,0 @@
1
- import { Behaviour, GameObject } from "../../engine-components/Component";
2
- import { OrbitControls } from "../../engine-components/OrbitControls";
3
- import * as THREE from 'three';
4
- import { Raycaster, Vector3 } from "three";
5
- import { RaycastOptions } from "../../engine/engine_physics";
6
- import { LinesManager } from "./LinesManager";
7
- import { Mathf } from "../../engine/engine_math";
8
- import { getWorldPosition } from "../../engine/engine_three_utils";
9
- import { MeshLineMaterial } from 'three.meshline';
10
- import { KeyCode } from "../../engine/engine_input";
11
- import { PlayerColor } from "../../engine-components/PlayerColor";
12
- import { ControllerEvents, WebXRController } from "../../engine-components/WebXRController";
13
- class LineState {
14
- isDrawing;
15
- lastHit;
16
- currentHandle;
17
- maxDistance;
18
- prevDistance;
19
- lastParent;
20
- constructor() {
21
- this.isDrawing = false;
22
- this.lastHit = new Vector3();
23
- this.currentHandle = null;
24
- this.maxDistance = 0;
25
- this.prevDistance = 0;
26
- this.lastParent = null;
27
- }
28
- }
29
- export class LinesDrawer extends Behaviour {
30
- lines;
31
- colliders;
32
- alignToSurface = true;
33
- addToPaintedObject = true;
34
- orbit;
35
- start() {
36
- if (!this.lines) {
37
- this.lines = GameObject.getComponent(this.gameObject, LinesManager);
38
- if (!this.lines)
39
- this.lines = GameObject.addNewComponent(this.gameObject, LinesManager);
40
- }
41
- this.orbit = GameObject.findObjectOfType(OrbitControls, this.context) ?? undefined;
42
- this._states["mouse"] = new LineState();
43
- const xrControllerSelected = {};
44
- WebXRController.addEventListener(ControllerEvents.SelectStart, (ctrl, _) => {
45
- xrControllerSelected[ctrl.controller.uuid] = true;
46
- });
47
- WebXRController.addEventListener(ControllerEvents.Update, (ctrl, _) => {
48
- if (xrControllerSelected[ctrl.controller.uuid] === true) {
49
- const ray = ctrl.getRay();
50
- this.updateLine(ctrl.controller.uuid, ray, true, false, false);
51
- }
52
- });
53
- WebXRController.addEventListener(ControllerEvents.SelectEnd, (ctrl, _) => {
54
- xrControllerSelected[ctrl.controller.uuid] = false;
55
- const ray = ctrl.getRay();
56
- this.updateLine(ctrl.controller.uuid, ray, true, true, false);
57
- });
58
- }
59
- _states = {};
60
- update() {
61
- if (this.orbit && this._states["mouse"]) {
62
- if (this.orbit)
63
- this.orbit.enabled = !this._states["mouse"].isDrawing;
64
- }
65
- if (!this.context.mainCamera)
66
- return;
67
- const multi = this.context.input.getPointerPressedCount() > 1;
68
- const sp = this.context.input.getPointerPositionRC(0);
69
- if (!sp)
70
- return;
71
- LinesDrawer._raycaster.setFromCamera(sp, this.context.mainCamera);
72
- const ray = LinesDrawer._raycaster.ray;
73
- this.updateLine("mouse", ray, this.context.input.getPointerPressed(0), this.context.input.getPointerUp(0), multi || this.context.input.isKeyPressed(KeyCode.ALT));
74
- }
75
- updateLine(id, ray, active, finish, cancel = false) {
76
- let state = this._states[id];
77
- if (!state) {
78
- this._states[id] = new LineState();
79
- state = this._states[id];
80
- }
81
- if (finish) {
82
- state.isDrawing = false;
83
- if (state.currentHandle) {
84
- // this.sendLineUpdate();
85
- this.lines.endLine(state.currentHandle);
86
- state.currentHandle = null;
87
- }
88
- }
89
- else if (active) {
90
- if (cancel) {
91
- return state;
92
- }
93
- const hit = this.getHit(ray);
94
- let pt = null;
95
- let prev = state.prevDistance;
96
- if (hit) {
97
- if (!state.currentHandle) {
98
- state.maxDistance = hit.distance;
99
- }
100
- pt = hit.point;
101
- if (hit.face)
102
- pt.add(hit.face.normal.multiplyScalar(0.01));
103
- state.prevDistance = hit.distance;
104
- }
105
- else if (state.maxDistance > 0) {
106
- let dist = state.maxDistance;
107
- // if we start drawing in thin air:
108
- if (!state.currentHandle && state.lastHit) {
109
- const wp = getWorldPosition(this.context.mainCamera);
110
- dist = state.lastHit.distanceTo(wp);
111
- }
112
- pt = ray.origin.add(ray.direction.multiplyScalar(state.maxDistance));
113
- state.prevDistance = state.maxDistance;
114
- }
115
- if (pt) {
116
- if (!state.currentHandle) {
117
- let parent = state.lastParent ?? this.gameObject;
118
- if (this.addToPaintedObject && hit)
119
- parent = hit.object;
120
- state.lastParent = parent;
121
- state.currentHandle = this.lines.startLine(parent, { material: this.createRandomMaterial() });
122
- }
123
- if (this.alignToSurface) {
124
- if (state.prevDistance > state.maxDistance || Math.abs(prev - state.prevDistance) > 0.2) {
125
- const newDistance = state.maxDistance;
126
- // if (state.maxDistance === 0) state.maxDistance = newDistance;
127
- // const camPos = getWorldPosition(this.context.mainCamera);
128
- pt = ray.origin.add(ray.direction.multiplyScalar(newDistance));
129
- // pt = camPos.add(dir.multiplyScalar(newDistance));
130
- state.prevDistance = newDistance;
131
- }
132
- }
133
- if (state.lastHit && state.lastHit.distanceTo(pt) < state.prevDistance * .01) {
134
- return state;
135
- }
136
- this.lines.updateLine(state.currentHandle, { point: pt });
137
- state.lastHit.copy(pt);
138
- }
139
- state.isDrawing = state.currentHandle !== null;
140
- }
141
- return state;
142
- }
143
- _raycastOptions = new RaycastOptions();
144
- static _raycaster = new Raycaster();
145
- getHit(ray) {
146
- if (!this.colliders || this.colliders.length === 0) {
147
- this.colliders = [this.gameObject];
148
- }
149
- this._raycastOptions.targets = this.colliders;
150
- this._raycastOptions.ray = ray;
151
- const hits = this.context.physics.raycast(this._raycastOptions);
152
- if (hits.length > 0) {
153
- for (const hit of hits) {
154
- if (!GameObject.isActiveInHierarchy(hit.object)) {
155
- continue;
156
- }
157
- return hit;
158
- }
159
- }
160
- return null;
161
- }
162
- createRandomMaterial() {
163
- let col;
164
- if (this.context.connection.connectionId)
165
- col = PlayerColor.colorFromHashCode(PlayerColor.hashCode(this.context.connection.connectionId));
166
- else
167
- col = new THREE.Color("hsl(" + (Math.random() * 100).toFixed(0) + ", 80%, 30%)");
168
- // const col = new THREE.Color("hsl(0, 100%, 50%)");
169
- return new MeshLineMaterial({
170
- color: col,
171
- lineWidth: Mathf.lerp(0.005, 0.01, Math.random()),
172
- });
173
- }
174
- }
175
- //# sourceMappingURL=LineDrawer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LineDrawer.js","sourceRoot":"","sources":["../../../../engine-components-experimental/annotation/LineDrawer.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import { Behaviour } from "../../engine-components/Component";
2
- import * as THREE from 'three';
3
- import { Color, Material } from "three";
4
- import { MeshLine, MeshLineMaterial } from 'three.meshline';
5
- export declare type LineOptions = {
6
- material?: Material;
7
- options?: LineMaterialOptions;
8
- };
9
- export declare type LineMaterialOptions = {
10
- map?: THREE.Texture;
11
- useMap?: number;
12
- alphaMap?: THREE.Texture;
13
- color?: Color;
14
- opacity?: number;
15
- lineWidth?: number;
16
- };
17
- export declare class LineInstanceHandler {
18
- id: number;
19
- points: Array<any>;
20
- line: MeshLine;
21
- material?: MeshLineMaterial;
22
- mesh?: THREE.Mesh;
23
- constructor(owner: THREE.Object3D, options?: LineOptions);
24
- private static wp;
25
- appendPoint(vec: Vec3): Vec3;
26
- private defaultLineMaterial;
27
- }
28
- declare type Vec3 = {
29
- x: number;
30
- y: number;
31
- z: number;
32
- };
33
- export declare type LineHandle = {
34
- id: number;
35
- };
36
- declare type UpdateLineArgs = {
37
- point: Vec3;
38
- };
39
- export declare class LinesManager extends Behaviour {
40
- startLine(parent?: THREE.Object3D, options?: LineOptions): LineHandle;
41
- updateLine(handle: LineHandle, args: UpdateLineArgs): void;
42
- endLine(handle: LineHandle, send?: boolean): LineInstanceHandler | undefined;
43
- getLine(handle: LineHandle): LineInstanceHandler | undefined;
44
- private finished;
45
- private inFlight;
46
- private buffer;
47
- private freeBuffer;
48
- awake(): void;
49
- private onEnsureLine;
50
- private internalStartLine;
51
- private sendLineStart;
52
- private sendLineUpdate;
53
- }
54
- export {};
@@ -1,155 +0,0 @@
1
- import { Behaviour, GameObject } from "../../engine-components/Component";
2
- import * as THREE from 'three';
3
- import { MeshLine, MeshLineMaterial } from 'three.meshline';
4
- export class LineInstanceHandler {
5
- id = 0;
6
- points = [];
7
- line = new MeshLine();
8
- material;
9
- mesh;
10
- constructor(owner, options) {
11
- if (options) {
12
- this.material = options.material;
13
- }
14
- if (!this.material)
15
- this.material = this.defaultLineMaterial;
16
- if (options) {
17
- const opts = options.options;
18
- if (opts) {
19
- Object.assign(this.material, opts);
20
- }
21
- }
22
- this.mesh = new THREE.Mesh(this.line, this.material);
23
- owner.add(this.mesh);
24
- }
25
- static wp = new THREE.Vector3();
26
- appendPoint(vec) {
27
- let localPoint = LineInstanceHandler.wp;
28
- localPoint.set(vec.x, vec.y, vec.z);
29
- const parent = this.mesh?.parent;
30
- if (parent) {
31
- localPoint = parent.worldToLocal(localPoint);
32
- vec.x = localPoint.x;
33
- vec.y = localPoint.y;
34
- vec.z = localPoint.z;
35
- }
36
- this.points.push(vec.x, vec.y, vec.z);
37
- this.line.setPoints(this.points);
38
- return vec;
39
- }
40
- defaultLineMaterial = new MeshLineMaterial({ color: 0x999999, lineWidth: 0.01 });
41
- }
42
- export class LinesManager extends Behaviour {
43
- startLine(parent, options) {
44
- const id = Math.random() * Number.MAX_SAFE_INTEGER;
45
- return this.internalStartLine(parent, id, true, options);
46
- }
47
- updateLine(handle, args) {
48
- const line = this.inFlight[handle.id];
49
- if (!line)
50
- return;
51
- if (args.point) {
52
- args.point = line.appendPoint(args.point);
53
- }
54
- const buf = this.buffer[handle.id];
55
- if (buf) {
56
- if (args.point)
57
- buf.push(args.point.x, args.point.y, args.point.z);
58
- if (buf.length > 5) {
59
- this.sendLineUpdate(line, false, undefined, buf);
60
- buf.length = 0;
61
- }
62
- }
63
- }
64
- endLine(handle, send = true) {
65
- const line = this.inFlight[handle.id];
66
- if (!line)
67
- return undefined;
68
- this.finished.push(line);
69
- delete this.inFlight[handle.id];
70
- if (send)
71
- this.sendLineUpdate(line, true, 0);
72
- const buf = this.buffer[handle.id];
73
- if (buf) {
74
- delete this.buffer[handle.id];
75
- const arr = buf;
76
- arr.length = 0;
77
- this.freeBuffer.push(arr);
78
- }
79
- return line;
80
- }
81
- getLine(handle) {
82
- return this.inFlight[handle.id];
83
- }
84
- finished = [];
85
- inFlight = [];
86
- buffer = {};
87
- freeBuffer = new Array();
88
- awake() {
89
- this.context.connection.beginListen("line-start", (i) => {
90
- this.onEnsureLine(i.id, i.parentGuid);
91
- });
92
- this.context.connection.beginListen("line-update", (evt) => {
93
- let line = this.onEnsureLine(evt.guid, evt.parentGuid);
94
- if (line && evt.points) {
95
- if (evt.startIndex <= 0) {
96
- line.points = evt.points;
97
- }
98
- else {
99
- if (evt.startIndex >= line.points.length) {
100
- line.points.push(...evt.points);
101
- }
102
- }
103
- line.line.setPoints(line.points);
104
- line.material.lineWidth = evt.width;
105
- line.material.color.fromArray(evt.color);
106
- if (evt.finished === true) {
107
- this.endLine({ id: line.id }, false);
108
- }
109
- }
110
- });
111
- }
112
- onEnsureLine(lineId, parentGuid) {
113
- if (this.inFlight[lineId])
114
- return this.inFlight[lineId];
115
- let obj = GameObject.findByGuid(parentGuid, this.context.scene);
116
- if (!obj) {
117
- return null;
118
- }
119
- this.internalStartLine(obj, lineId, false);
120
- return this.inFlight[lineId];
121
- }
122
- internalStartLine(parent, id, send = true, options) {
123
- const line = new LineInstanceHandler(parent ?? this.context.scene, options);
124
- line.id = id;
125
- this.inFlight[id] = line;
126
- if (send)
127
- this.sendLineStart(line);
128
- let buf;
129
- if (this.freeBuffer.length <= 0)
130
- buf = new Array();
131
- else
132
- buf = this.freeBuffer.pop();
133
- this.buffer[id] = buf;
134
- return { id: id };
135
- }
136
- sendLineStart(instance) {
137
- const parent = instance.mesh.parent;
138
- this.context.connection.send("line-start", { id: instance.id, parentGuid: parent ? parent["guid"] : undefined });
139
- }
140
- sendLineUpdate(instance, finished, startIndex, points) {
141
- if (instance) {
142
- const model = {
143
- parentGuid: instance.mesh.parent["guid"],
144
- guid: instance.id,
145
- points: points ? [...points] : instance.points,
146
- width: instance.material.lineWidth,
147
- color: instance.material.color.toArray(),
148
- startIndex: startIndex !== undefined ? startIndex : instance.points.length,
149
- finished: finished,
150
- };
151
- this.context.connection.send("line-update", model);
152
- }
153
- }
154
- }
155
- //# sourceMappingURL=LinesManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LinesManager.js","sourceRoot":"","sources":["../../../../engine-components-experimental/annotation/LinesManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkB5D,MAAM,OAAO,mBAAmB;IAC5B,EAAE,GAAW,CAAC,CAAC;IACf,MAAM,GAAe,EAAE,CAAC;IACxB,IAAI,GAAa,IAAI,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAoB;IAC5B,IAAI,CAAc;IAElB,YAAY,KAAqB,EAAE,OAAqB;QACpD,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;SACpC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC7C,IAAI,OAAO,EAAE;YACT,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,IAAI,IAAI,EAAE;gBACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACtC;SACJ;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,EAAE,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IAEvD,WAAW,CAAC,GAAS;QACjB,IAAI,UAAU,GAAG,mBAAmB,CAAC,EAAE,CAAC;QACxC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACjC,IAAI,MAAM,EAAE;YACR,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC7C,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACrB,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACrB,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;SACxB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,mBAAmB,GAAG,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;AAiC7F,MAAM,OAAO,YAAa,SAAQ,SAAS;IAEhC,SAAS,CAAC,MAAuB,EAAE,OAAqB;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAEM,UAAU,CAAC,MAAkB,EAAE,IAAoB;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7C;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,EAAE;YACL,IAAI,IAAI,CAAC,KAAK;gBACV,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBACjD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;aAClB;SACJ;IACL,CAAC;IAEM,OAAO,CAAC,MAAkB,EAAE,OAAgB,IAAI;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,IAAI;YACJ,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,EAAE;YACL,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC;YAChB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,MAAkB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEO,QAAQ,GAA+B,EAAE,CAAC;IAC1C,QAAQ,GAA2C,EAAE,CAAC;IACtD,MAAM,GAA6B,EAAE,CAAC;IACtC,UAAU,GAAG,IAAI,KAAK,EAAU,CAAC;IAEzC,KAAK;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAiB,EAAE,EAAE;YACpE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,GAAc,EAAE,EAAE;YAClE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;gBACpB,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE;oBACrB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;iBAC5B;qBACI;oBACD,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;wBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;qBACnC;iBACJ;gBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAS,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;iBACxC;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,UAAkB;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAqB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACO,iBAAiB,CAAC,MAAyC,EAAE,EAAU,EAAE,OAAgB,IAAI,EAAE,OAAqB;QACxH,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI;YACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,GAAG,CAAC;QACR,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;YAAE,GAAG,GAAG,IAAI,KAAK,EAAQ,CAAC;;YACpD,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;IAEO,aAAa,CAAC,QAA6B;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAK,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;IACpH,CAAC;IAEO,cAAc,CAAC,QAA6B,EAAE,QAAiB,EAAE,UAAmB,EAAE,MAAmB;QAC7G,IAAI,QAAQ,EAAE;YACV,MAAM,KAAK,GAAc;gBACrB,UAAU,EAAE,QAAQ,CAAC,IAAK,CAAC,MAAO,CAAC,MAAM,CAAC;gBAC1C,IAAI,EAAE,QAAQ,CAAC,EAAE;gBACjB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;gBAC9C,KAAK,EAAE,QAAQ,CAAC,QAAS,CAAC,SAAS;gBACnC,KAAK,EAAE,QAAQ,CAAC,QAAS,CAAC,KAAK,CAAC,OAAO,EAAE;gBACzC,UAAU,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;gBAC1E,QAAQ,EAAE,QAAQ;aACrB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SACrD;IACL,CAAC;CACJ"}