@needle-tools/engine 2.56.2-pre → 2.57.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 (48) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/needle-engine.d.ts +66 -158
  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 +0 -6
  12. package/lib/engine/codegen/register_types.js.map +1 -1
  13. package/lib/engine/engine.d.ts +1 -28
  14. package/lib/engine/engine.js.map +1 -1
  15. package/lib/engine/engine_scenetools.d.ts +1 -0
  16. package/lib/engine/engine_scenetools.js +8 -6
  17. package/lib/engine/engine_scenetools.js.map +1 -1
  18. package/lib/engine/engine_setup.d.ts +4 -2
  19. package/lib/engine/engine_setup.js +25 -14
  20. package/lib/engine/engine_setup.js.map +1 -1
  21. package/lib/engine/engine_three_utils.js.map +1 -1
  22. package/lib/engine/engine_utils_screenshot.d.ts +5 -0
  23. package/lib/engine/engine_utils_screenshot.js +32 -0
  24. package/lib/engine/engine_utils_screenshot.js.map +1 -0
  25. package/lib/engine-components/Skybox.js +3 -1
  26. package/lib/engine-components/Skybox.js.map +1 -1
  27. package/lib/engine-components/WebXR.js +2 -2
  28. package/lib/engine-components/WebXR.js.map +1 -1
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +1 -2
  31. package/src/engine/api.ts +3 -2
  32. package/src/engine/codegen/register_types.js +2 -8
  33. package/src/engine/engine.ts +1 -1
  34. package/src/engine/engine_scenetools.ts +9 -6
  35. package/src/engine/engine_setup.ts +27 -16
  36. package/src/engine/engine_three_utils.ts +4 -4
  37. package/src/engine/engine_utils_screenshot.ts +41 -0
  38. package/src/engine-components/Skybox.ts +3 -1
  39. package/src/engine-components/TestRunner.ts +1 -1
  40. package/src/engine-components/WebXR.ts +2 -2
  41. package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +0 -18
  42. package/lib/engine-components-experimental/annotation/LineDrawer.js +0 -175
  43. package/lib/engine-components-experimental/annotation/LineDrawer.js.map +0 -1
  44. package/lib/engine-components-experimental/annotation/LinesManager.d.ts +0 -54
  45. package/lib/engine-components-experimental/annotation/LinesManager.js +0 -155
  46. package/lib/engine-components-experimental/annotation/LinesManager.js.map +0 -1
  47. package/src/engine-components-experimental/annotation/LineDrawer.ts +0 -194
  48. package/src/engine-components-experimental/annotation/LinesManager.ts +0 -218
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "2.56.2-pre",
3
+ "version": "2.57.0-pre",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development, and can be deployed anywhere. It is flexible, extensible, and collaboration and XR come naturally.",
5
5
  "main": "dist/needle-engine.js",
6
6
  "module": "src/needle-engine.ts",
@@ -49,7 +49,6 @@
49
49
  "stats.js": "^0.17.0",
50
50
  "three": "npm:@needle-tools/three@^0.146.2",
51
51
  "three-mesh-ui": "^6.4.5",
52
- "three.meshline": "^1.4.0",
53
52
  "three.quarks": "^0.7.3",
54
53
  "uuid": "^9.0.0",
55
54
  "websocket-ts": "^1.1.1"
package/src/engine/api.ts CHANGED
@@ -3,7 +3,8 @@ export { InstancingUtil } from "./engine_instancing";
3
3
  export * from "./engine_gameobject";
4
4
  export * from "./engine_components"
5
5
  export { AssetReference } from "./engine_addressables";
6
- export { FrameEvent } from "./engine_setup";
6
+ export { Context, FrameEvent } from "./engine_setup";
7
7
  export * from "./debug/debug";
8
8
  export { validate } from "./engine_util_decorator"
9
- export { Gizmos } from "./engine_gizmos"
9
+ export { Gizmos } from "./engine_gizmos"
10
+ export * from "./engine_scenetools";
@@ -1,5 +1,5 @@
1
1
  import { TypeStore } from "./../engine_typestore"
2
-
2
+
3
3
  // Import types
4
4
  import { __Ignore } from "../../engine-components/codegen/components.ts";
5
5
  import { AlignmentConstraint } from "../../engine-components/AlignmentConstraint.ts";
@@ -73,9 +73,6 @@ import { Keyboard } from "../../engine-components/ui/Keyboard.ts";
73
73
  import { LayoutGroup } from "../../engine-components/ui/Layout.ts";
74
74
  import { Light } from "../../engine-components/Light.ts";
75
75
  import { LimitVelocityOverLifetimeModule } from "../../engine-components/ParticleSystemModules.ts";
76
- import { LineInstanceHandler } from "../../engine-components-experimental/annotation/LinesManager.ts";
77
- import { LinesDrawer } from "../../engine-components-experimental/annotation/LineDrawer.ts";
78
- import { LinesManager } from "../../engine-components-experimental/annotation/LinesManager.ts";
79
76
  import { LODGroup } from "../../engine-components/LODGroup.ts";
80
77
  import { LODModel } from "../../engine-components/LODGroup.ts";
81
78
  import { LogStats } from "../../engine-components/debug/LogStats.ts";
@@ -172,7 +169,7 @@ import { XRGrabModel } from "../../engine-components/WebXRGrabRendering.ts";
172
169
  import { XRGrabRendering } from "../../engine-components/WebXRGrabRendering.ts";
173
170
  import { XRRig } from "../../engine-components/WebXRRig.ts";
174
171
  import { XRState } from "../../engine-components/XRFlag.ts";
175
-
172
+
176
173
  // Register types
177
174
  TypeStore.add("__Ignore", __Ignore);
178
175
  TypeStore.add("AlignmentConstraint", AlignmentConstraint);
@@ -246,9 +243,6 @@ TypeStore.add("Keyboard", Keyboard);
246
243
  TypeStore.add("LayoutGroup", LayoutGroup);
247
244
  TypeStore.add("Light", Light);
248
245
  TypeStore.add("LimitVelocityOverLifetimeModule", LimitVelocityOverLifetimeModule);
249
- TypeStore.add("LineInstanceHandler", LineInstanceHandler);
250
- TypeStore.add("LinesDrawer", LinesDrawer);
251
- TypeStore.add("LinesManager", LinesManager);
252
246
  TypeStore.add("LODGroup", LODGroup);
253
247
  TypeStore.add("LODModel", LODModel);
254
248
  TypeStore.add("LogStats", LogStats);
@@ -7,7 +7,7 @@ import "./tests/test_utils";
7
7
  import { RGBAColor } from "../engine-components/js-extensions/RGBAColor";
8
8
 
9
9
 
10
- const engine = {
10
+ const engine : any = {
11
11
  ...engine_setup,
12
12
  ...engine_scenetools,
13
13
  RGBAColor,
@@ -95,13 +95,18 @@ async function handleLoadedGltf(context: Context, gltfId: string, gltf, seed: nu
95
95
  // findAnimationsLate(context, gltf, context.new_scripts_pre_setup_callbacks, false);
96
96
  }
97
97
 
98
+ export function createGLTFLoader(url: string, context: Context) {
99
+ const loader = new GLTFLoader();
100
+ const sourceId: SourceIdentifier = url;
101
+ registerExtensions(loader, context, sourceId);
102
+ return loader;
103
+ }
104
+
98
105
  export function parseSync(context: Context, data, path: string, seed: number | UIDProvider | null): Promise<GLTF | undefined> {
99
106
  if (typeof path !== "string") {
100
107
  console.warn("Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file", path, typeof path);
101
108
  }
102
- const loader = new GLTFLoader();
103
- const sourceId: SourceIdentifier = path;
104
- registerExtensions(loader, context, sourceId);
109
+ const loader = createGLTFLoader(path, context);
105
110
  const componentsExtension = registerComponentExtension(loader);
106
111
  return new Promise((resolve, reject) => {
107
112
  try {
@@ -131,9 +136,7 @@ export function loadSync(context: Context, url: string, seed: number | UIDProvid
131
136
  // but due to the async nature and potentially triggering multiple loads at the same time
132
137
  // we need to make sure the extensions dont override each other
133
138
  // creating new loaders should not be expensive as well
134
- const loader = new GLTFLoader();
135
- const sourceId: SourceIdentifier = url;
136
- registerExtensions(loader, context, sourceId);
139
+ const loader = createGLTFLoader(url, context);
137
140
  const componentsExtension = registerComponentExtension(loader);
138
141
  return new Promise((resolve, reject) => {
139
142
  try {
@@ -1,4 +1,4 @@
1
- import { DepthTexture, PerspectiveCamera, WebGLRenderer, WebGLRenderTarget } from 'three'
1
+ import { Camera, DepthTexture, PerspectiveCamera, WebGLRenderer, WebGLRenderTarget } from 'three'
2
2
  import * as THREE from 'three'
3
3
  import { Input } from './engine_input';
4
4
  import { Physics } from './engine_physics';
@@ -300,7 +300,7 @@ export class Context {
300
300
 
301
301
  // private _requestSizeUpdate : boolean = false;
302
302
 
303
- private updateSize() {
303
+ updateSize() {
304
304
  if (!this.isManagedExternally && !this.renderer.xr.isPresenting) {
305
305
  this._sizeChanged = false;
306
306
  const scaleFactor = this.resolutionScaleFactor;
@@ -322,10 +322,12 @@ export class Context {
322
322
  }
323
323
  }
324
324
 
325
- updateAspect(camera: THREE.PerspectiveCamera) {
325
+ updateAspect(camera: THREE.PerspectiveCamera, width?: number, height?: number) {
326
326
  if (!camera) return;
327
- const width = this.domWidth;
328
- const height = this.domHeight;
327
+ if (width === undefined)
328
+ width = this.domWidth;
329
+ if (height === undefined)
330
+ height = this.domHeight;
329
331
  const pa = camera.aspect;
330
332
  camera.aspect = width / height;
331
333
  if (pa !== camera.aspect)
@@ -697,21 +699,13 @@ export class Context {
697
699
  }
698
700
  }
699
701
 
700
- this._currentFrameEvent = -10;
701
702
 
702
- this._isRendering = true;
703
- this.renderRequiredTextures();
704
703
  if (!this.isManagedExternally) {
705
- if (this.composer && !this.isInXR) {
706
- this.composer.render();
707
- }
708
- else if (this.mainCamera) {
709
- this.renderer.render(this.scene, this.mainCamera);
710
- }
704
+ this._currentFrameEvent = -10;
705
+ this.renderNow();
706
+ this._currentFrameEvent = FrameEvent.OnAfterRender;
711
707
  }
712
- this._isRendering = false;
713
708
 
714
- this._currentFrameEvent = FrameEvent.OnAfterRender;
715
709
 
716
710
  for (let i = 0; i < this.scripts_onAfterRender.length; i++) {
717
711
  const script = this.scripts_onAfterRender[i];
@@ -738,6 +732,23 @@ export class Context {
738
732
  this._stats?.end();
739
733
  }
740
734
 
735
+ renderNow(camera?: Camera) {
736
+ if (!camera) {
737
+ camera = this.mainCamera as Camera;
738
+ if (!camera) return false;
739
+ }
740
+ this._isRendering = true;
741
+ this.renderRequiredTextures();
742
+ if (this.composer && !this.isInXR) {
743
+ this.composer.render();
744
+ }
745
+ else if (this.mainCamera) {
746
+ this.renderer.render(this.scene, camera);
747
+ }
748
+ this._isRendering = false;
749
+ return true;
750
+ }
751
+
741
752
  /** returns true if we should return out of the frame loop */
742
753
  private _wasPaused: boolean = false;
743
754
  private onHandlePaused(): boolean {
@@ -1,6 +1,6 @@
1
1
  import * as THREE from "three";
2
2
  import { Mathf } from "./engine_math"
3
- import { WebGLRenderTarget, WebGLRenderer, Vector3, Quaternion, Uniform, Texture, Material, ShaderMaterial, CanvasTexture, AnimationAction } from "three";
3
+ import { WebGLRenderer, Vector3, Quaternion, Uniform, Texture, Material, ShaderMaterial, CanvasTexture, AnimationAction, Camera, PerspectiveCamera } from "three";
4
4
  import { CircularBuffer } from "./engine_utils";
5
5
 
6
6
 
@@ -183,8 +183,8 @@ export function logHierarchy(root: THREE.Object3D | null | undefined, collapsibl
183
183
  }
184
184
 
185
185
 
186
- export function isAnimationAction(obj:object){
187
- if(obj){
186
+ export function isAnimationAction(obj: object) {
187
+ if (obj) {
188
188
  // this doesnt work :(
189
189
  // return obj instanceof AnimationAction;
190
190
  // instead we do this:
@@ -308,4 +308,4 @@ function isImageBitmap(image) {
308
308
  (typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement) ||
309
309
  (typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas) ||
310
310
  (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap);
311
- }
311
+ }
@@ -0,0 +1,41 @@
1
+ import { Context } from "./engine_setup";
2
+ import { PerspectiveCamera, Camera } from "three";
3
+
4
+ declare type ImageMimeType = "image/webp" | "image/png";
5
+
6
+ export function screenshot(context: Context, width: number, height: number, mimeType: ImageMimeType = "image/webp", camera?: Camera | null) {
7
+
8
+ if (!camera) {
9
+ camera = context.mainCamera;
10
+ if (!camera) {
11
+ console.error("No camera found");
12
+ return null;
13
+ }
14
+ }
15
+ const prevWidth = context.renderer.domElement.width;
16
+ const prevHeight = context.renderer.domElement.height;
17
+
18
+ try {
19
+ const canvas = context.renderer.domElement;
20
+
21
+ // set the desired output size
22
+ context.renderer.setSize(width, height);
23
+ // update the camera apsect and matrix
24
+ if (camera instanceof PerspectiveCamera)
25
+ context.updateAspect(camera, width, height);
26
+
27
+ // render now
28
+ context.renderNow();
29
+
30
+ // const webPMimeType = "image/webp";
31
+ // const pngMimeType = "image/png";
32
+ const dataUrl = canvas.toDataURL(mimeType);
33
+ return dataUrl;
34
+ }
35
+ finally {
36
+ context.renderer.setSize(prevWidth, prevHeight);
37
+ context.updateSize();
38
+ }
39
+
40
+ return null;
41
+ }
@@ -51,7 +51,8 @@ export class RemoteSkybox extends Behaviour {
51
51
  console.warn("Potentially invalid skybox url", this.url, "on", this.name);
52
52
  }
53
53
 
54
- if (!this._loader) {
54
+ // if (!this._loader)
55
+ {
55
56
  const isEXR = url.endsWith(".exr");
56
57
  const isHdr = url.endsWith(".hdr");
57
58
  if (isEXR) {
@@ -64,6 +65,7 @@ export class RemoteSkybox extends Behaviour {
64
65
  this._loader = new TextureLoader();
65
66
  }
66
67
  }
68
+ console.log("Loading skybox: " + url);
67
69
  const envMap = await this._loader.loadAsync(url);
68
70
  if (!envMap) return;
69
71
  if (!this.enabled) return;
@@ -3,7 +3,7 @@ import * as tests from "../engine/tests/test_utils";
3
3
  import { createTransformModel, SyncedTransform, SyncedTransformIdentifier } from "./SyncedTransform";
4
4
  import * as flatbuffers from 'flatbuffers';
5
5
  import { SyncedTransformModel } from "../engine-schemes/synced-transform-model";
6
- import { Rigidbody } from "./Rigidbody";
6
+ import { Rigidbody } from "./RigidBody";
7
7
  import { Vector3 } from "three";
8
8
  import { IModel } from "../engine/engine_networking_types";
9
9
 
@@ -221,14 +221,14 @@ export class WebXR extends Behaviour {
221
221
  this.context.domElement.append(buttonsContainer);
222
222
 
223
223
  // AR support
224
- if (this.enableAR && this.createARButton) {
224
+ if (this.enableAR && this.createARButton && arSupported) {
225
225
  arButton = WebXR.createARButton(this);
226
226
  this._arButton = arButton;
227
227
  buttonsContainer.appendChild(arButton);
228
228
  }
229
229
 
230
230
  // VR support
231
- if (this.createVRButton && this.enableVR) {
231
+ if (this.createVRButton && this.enableVR && vrSupported) {
232
232
  vrButton = WebXR.createVRButton(this);
233
233
  this._vrButton = vrButton;
234
234
  buttonsContainer.appendChild(vrButton);
@@ -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 {};