locar 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/locar.es.js CHANGED
@@ -1,20 +1,20 @@
1
- var W = (a) => {
2
- throw TypeError(a);
1
+ var q = (r) => {
2
+ throw TypeError(r);
3
3
  };
4
- var S = (a, t, e) => t.has(a) || W("Cannot " + e);
5
- var n = (a, t, e) => (S(a, t, "read from private field"), e ? e.call(a) : t.get(a)), m = (a, t, e) => t.has(a) ? W("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(a) : t.set(a, e), u = (a, t, e, i) => (S(a, t, "write to private field"), i ? i.call(a, e) : t.set(a, e), e), p = (a, t, e) => (S(a, t, "access private method"), e);
6
- var q = (a, t, e, i) => ({
7
- set _(r) {
8
- u(a, t, r, e);
4
+ var S = (r, t, i) => t.has(r) || q("Cannot " + i);
5
+ var n = (r, t, i) => (S(r, t, "read from private field"), i ? i.call(r) : t.get(r)), m = (r, t, i) => t.has(r) ? q("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(r) : t.set(r, i), l = (r, t, i, e) => (S(r, t, "write to private field"), e ? e.call(r, i) : t.set(r, i), i), p = (r, t, i) => (S(r, t, "access private method"), i);
6
+ var k = (r, t, i, e) => ({
7
+ set _(c) {
8
+ l(r, t, c, i);
9
9
  },
10
10
  get _() {
11
- return n(a, t, i);
11
+ return n(r, t, e);
12
12
  }
13
13
  });
14
14
  import * as b from "three";
15
- import { Vector3 as Z, Euler as N, Quaternion as _, EventDispatcher as B, MathUtils as C } from "three";
16
- var E, U, G, X, Q;
17
- class K {
15
+ import { Vector3 as B, Euler as U, Quaternion as F, EventDispatcher as K, MathUtils as C } from "three";
16
+ var E, G, X, Q, V;
17
+ class $ {
18
18
  /**
19
19
  * Create a SphMercProjection.
20
20
  */
@@ -28,8 +28,8 @@ class K {
28
28
  * @param {number} lat - the latitude.
29
29
  * @return {Array} Two-member array containing easting and northing.
30
30
  */
31
- project(t, e) {
32
- return [p(this, E, U).call(this, t), p(this, E, G).call(this, e)];
31
+ project(t, i) {
32
+ return [p(this, E, G).call(this, t), p(this, E, X).call(this, i)];
33
33
  }
34
34
  /**
35
35
  * Unproject a Spherical Mercator easting and northing.
@@ -37,7 +37,7 @@ class K {
37
37
  * @return {Array} Two-member array containing longitude and latitude
38
38
  */
39
39
  unproject(t) {
40
- return [p(this, E, X).call(this, t[0]), p(this, E, Q).call(this, t[1])];
40
+ return [p(this, E, Q).call(this, t[0]), p(this, E, V).call(this, t[1])];
41
41
  }
42
42
  /**
43
43
  * Return the projection's ID.
@@ -47,19 +47,19 @@ class K {
47
47
  return "epsg:3857";
48
48
  }
49
49
  }
50
- E = new WeakSet(), U = function(t) {
50
+ E = new WeakSet(), G = function(t) {
51
51
  return t / 180 * this.HALF_EARTH;
52
- }, G = function(t) {
53
- var e = Math.log(Math.tan((90 + t) * Math.PI / 360)) / (Math.PI / 180);
54
- return e * this.HALF_EARTH / 180;
55
52
  }, X = function(t) {
56
- return t / this.HALF_EARTH * 180;
53
+ var i = Math.log(Math.tan((90 + t) * Math.PI / 360)) / (Math.PI / 180);
54
+ return i * this.HALF_EARTH / 180;
57
55
  }, Q = function(t) {
58
- var e = t / this.HALF_EARTH * 180;
59
- return e = 180 / Math.PI * (2 * Math.atan(Math.exp(e * Math.PI / 180)) - Math.PI / 2), e;
56
+ return t / this.HALF_EARTH * 180;
57
+ }, V = function(t) {
58
+ var i = t / this.HALF_EARTH * 180;
59
+ return i = 180 / Math.PI * (2 * Math.atan(Math.exp(i * Math.PI / 180)) - Math.PI / 2), i;
60
60
  };
61
- var I, O, P, x, H, A, y, D, T, M, f, F, V, j, Y;
62
- class st {
61
+ var x, O, P, H, L, A, y, D, T, M, f, j, Y, W, Z;
62
+ class ot {
63
63
  /**
64
64
  * @param {THREE.Scene} scene - The Three.js scene to use.
65
65
  * @param {THREE.Camera} camera - The Three.js camera to use. Should usually
@@ -68,19 +68,19 @@ class st {
68
68
  * setGpsOptions() below.
69
69
  * @param {Object} serverLogger - an object which can optionally log GPS position to a server for debugging. null by default, so no logging will be done. This object should implement a sendData() method to send data (2nd arg) to a given endpoint (1st arg). Please see source code for details. Ensure you comply with privacy laws (GDPR or equivalent) if implementing this.
70
70
  */
71
- constructor(t, e, i = {}, r = null) {
71
+ constructor(t, i, e = {}, c = null) {
72
72
  m(this, f);
73
- m(this, I);
73
+ m(this, x);
74
74
  m(this, O);
75
75
  m(this, P);
76
- m(this, x);
77
76
  m(this, H);
77
+ m(this, L);
78
78
  m(this, A);
79
79
  m(this, y);
80
80
  m(this, D);
81
81
  m(this, T);
82
82
  m(this, M);
83
- this.scene = t, this.camera = e, u(this, I, new K()), u(this, O, {}), u(this, P, null), u(this, x, 0), u(this, H, 100), u(this, A, null), this.setGpsOptions(i), u(this, y, null), u(this, D, 0), u(this, T, 0), u(this, M, r);
83
+ this.scene = t, this.camera = i, l(this, x, new $()), l(this, O, {}), l(this, P, null), l(this, H, 0), l(this, L, 100), l(this, A, null), this.setGpsOptions(e), l(this, y, null), l(this, D, 0), l(this, T, 0), l(this, M, c);
84
84
  }
85
85
  /**
86
86
  * Set the projection to use.
@@ -89,7 +89,7 @@ class st {
89
89
  * containing easting and northing.
90
90
  */
91
91
  setProjection(t) {
92
- u(this, I, t);
92
+ l(this, x, t);
93
93
  }
94
94
  /**
95
95
  * Set the GPS options.
@@ -99,7 +99,7 @@ class st {
99
99
  * minimum accuracy, in metres, for a GPS reading to be counted.
100
100
  */
101
101
  setGpsOptions(t = {}) {
102
- t.gpsMinDistance !== void 0 && u(this, x, t.gpsMinDistance), t.gpsMinAccuracy !== void 0 && u(this, H, t.gpsMinAccuracy);
102
+ t.gpsMinDistance !== void 0 && l(this, H, t.gpsMinDistance), t.gpsMinAccuracy !== void 0 && l(this, L, t.gpsMinAccuracy);
103
103
  }
104
104
  /**
105
105
  * Start the GPS on a real device
@@ -108,15 +108,15 @@ class st {
108
108
  */
109
109
  async startGps() {
110
110
  if (n(this, M)) {
111
- const e = await (await n(this, M).sendData("/gps/start", {
112
- gpsMinDistance: n(this, x),
113
- gpsMinAccuracy: n(this, H)
111
+ const i = await (await n(this, M).sendData("/gps/start", {
112
+ gpsMinDistance: n(this, H),
113
+ gpsMinAccuracy: n(this, L)
114
114
  })).json();
115
- u(this, T, e.session);
115
+ l(this, T, i.session);
116
116
  }
117
- return n(this, A) === null ? (u(this, A, navigator.geolocation.watchPosition(
117
+ return n(this, A) === null ? (l(this, A, navigator.geolocation.watchPosition(
118
118
  (t) => {
119
- p(this, f, j).call(this, t);
119
+ p(this, f, W).call(this, t);
120
120
  },
121
121
  (t) => {
122
122
  n(this, O).gpserror ? n(this, O).gpserror(t.code) : alert(`GPS error: code ${t.code}`);
@@ -132,7 +132,7 @@ class st {
132
132
  * stopped (i.e. it was never started).
133
133
  */
134
134
  stopGps() {
135
- return n(this, A) !== null ? (navigator.geolocation.clearWatch(n(this, A)), u(this, A, null), !0) : !1;
135
+ return n(this, A) !== null ? (navigator.geolocation.clearWatch(n(this, A)), l(this, A, null), !0) : !1;
136
136
  }
137
137
  /**
138
138
  * Send a fake GPS signal. Useful for testing on a desktop or laptop.
@@ -143,12 +143,12 @@ class st {
143
143
  * @param {number} acc - The accuracy of the GPS reading in metres. May be
144
144
  * ignored if lower than the specified minimum accuracy.
145
145
  */
146
- fakeGps(t, e, i = null, r = 0) {
147
- i !== null && this.setElevation(i), p(this, f, j).call(this, {
146
+ fakeGps(t, i, e = null, c = 0) {
147
+ e !== null && this.setElevation(e), p(this, f, W).call(this, {
148
148
  coords: {
149
149
  longitude: t,
150
- latitude: e,
151
- accuracy: r
150
+ latitude: i,
151
+ accuracy: c
152
152
  }
153
153
  });
154
154
  }
@@ -162,13 +162,13 @@ class st {
162
162
  * @param {number} lat - The latitude.
163
163
  * @return {Array} a two member array containing the WebGL x and z coordinates
164
164
  */
165
- lonLatToWorldCoords(t, e) {
166
- const i = n(this, I).project(t, e);
165
+ lonLatToWorldCoords(t, i) {
166
+ const e = n(this, x).project(t, i);
167
167
  if (n(this, y))
168
- i[0] -= n(this, y)[0], i[1] -= n(this, y)[1];
168
+ e[0] -= n(this, y)[0], e[1] -= n(this, y)[1];
169
169
  else
170
170
  throw "No initial position determined";
171
- return [i[0], -i[1]];
171
+ return [e[0], -e[1]];
172
172
  }
173
173
  /**
174
174
  * Add a new AR object at a given latitude, longitude and elevation.
@@ -180,14 +180,14 @@ class st {
180
180
  * @param {Object} properties - properties describing the object (for example,
181
181
  * the contents of the GeoJSON properties field).
182
182
  */
183
- add(t, e, i, r, h = {}) {
183
+ add(t, i, e, c, d = {}) {
184
184
  var g;
185
- t.properties = h, p(this, f, F).call(this, t, e, i, r), this.scene.add(t), (g = n(this, M)) == null || g.sendData("/object/new", {
185
+ t.properties = d, p(this, f, j).call(this, t, i, e, c), this.scene.add(t), (g = n(this, M)) == null || g.sendData("/object/new", {
186
186
  position: t.position,
187
187
  x: t.position.x,
188
188
  z: t.position.z,
189
189
  session: n(this, T),
190
- properties: h
190
+ properties: d
191
191
  });
192
192
  }
193
193
  /**
@@ -210,50 +210,50 @@ class st {
210
210
  * @listens LocationBased#gpsupdate
211
211
  * @listens LocationBased#gpserror
212
212
  */
213
- on(t, e) {
214
- n(this, O)[t] = e;
213
+ on(t, i) {
214
+ n(this, O)[t] = i;
215
215
  }
216
216
  }
217
- I = new WeakMap(), O = new WeakMap(), P = new WeakMap(), x = new WeakMap(), H = new WeakMap(), A = new WeakMap(), y = new WeakMap(), D = new WeakMap(), T = new WeakMap(), M = new WeakMap(), f = new WeakSet(), F = function(t, e, i, r) {
218
- const h = this.lonLatToWorldCoords(e, i);
219
- r !== void 0 && (t.position.y = r), [t.position.x, t.position.z] = h;
220
- }, V = function(t, e) {
221
- u(this, y, n(this, I).project(t, e));
222
- }, j = function(t) {
223
- var i, r, h;
224
- let e = Number.MAX_VALUE;
225
- q(this, D)._++, (i = n(this, M)) == null || i.sendData("/gps/new", {
217
+ x = new WeakMap(), O = new WeakMap(), P = new WeakMap(), H = new WeakMap(), L = new WeakMap(), A = new WeakMap(), y = new WeakMap(), D = new WeakMap(), T = new WeakMap(), M = new WeakMap(), f = new WeakSet(), j = function(t, i, e, c) {
218
+ const d = this.lonLatToWorldCoords(i, e);
219
+ c !== void 0 && (t.position.y = c), [t.position.x, t.position.z] = d;
220
+ }, Y = function(t, i) {
221
+ l(this, y, n(this, x).project(t, i));
222
+ }, W = function(t) {
223
+ var e, c, d;
224
+ let i = Number.MAX_VALUE;
225
+ k(this, D)._++, (e = n(this, M)) == null || e.sendData("/gps/new", {
226
226
  gpsCount: n(this, D),
227
227
  lat: t.coords.latitude,
228
228
  lon: t.coords.longitude,
229
229
  acc: t.coords.accuracy,
230
230
  session: n(this, T)
231
- }), t.coords.accuracy <= n(this, H) && (n(this, P) === null ? u(this, P, {
231
+ }), t.coords.accuracy <= n(this, L) && (n(this, P) === null ? l(this, P, {
232
232
  latitude: t.coords.latitude,
233
233
  longitude: t.coords.longitude
234
- }) : e = p(this, f, Y).call(this, n(this, P), t.coords), e >= n(this, x) && (n(this, P).longitude = t.coords.longitude, n(this, P).latitude = t.coords.latitude, n(this, y) || (p(this, f, V).call(this, t.coords.longitude, t.coords.latitude), (r = n(this, M)) == null || r.sendData("/worldorigin/new", {
234
+ }) : i = p(this, f, Z).call(this, n(this, P), t.coords), i >= n(this, H) && (n(this, P).longitude = t.coords.longitude, n(this, P).latitude = t.coords.latitude, n(this, y) || (p(this, f, Y).call(this, t.coords.longitude, t.coords.latitude), (c = n(this, M)) == null || c.sendData("/worldorigin/new", {
235
235
  gpsCount: n(this, D),
236
236
  lat: t.coords.latitude,
237
237
  lon: t.coords.longitude,
238
238
  session: n(this, T),
239
239
  initialPosition: n(this, y)
240
- })), p(this, f, F).call(this, this.camera, t.coords.longitude, t.coords.latitude), (h = n(this, M)) == null || h.sendData("/gps/accepted", {
240
+ })), p(this, f, j).call(this, this.camera, t.coords.longitude, t.coords.latitude), (d = n(this, M)) == null || d.sendData("/gps/accepted", {
241
241
  gpsCount: n(this, D),
242
242
  cameraX: this.camera.position.x,
243
243
  cameraZ: this.camera.position.z,
244
244
  session: n(this, T),
245
- distMoved: e
246
- }), n(this, O).gpsupdate && n(this, O).gpsupdate(t, e)));
245
+ distMoved: i
246
+ }), n(this, O).gpsupdate && n(this, O).gpsupdate(t, i)));
247
247
  }, /**
248
248
  * Calculate haversine distance between two lat/lon pairs.
249
249
  *
250
250
  * Taken from original A-Frame AR.js location-based components
251
251
  */
252
- Y = function(t, e) {
253
- const i = b.MathUtils.degToRad(e.longitude - t.longitude), r = b.MathUtils.degToRad(e.latitude - t.latitude), h = Math.sin(r / 2) * Math.sin(r / 2) + Math.cos(b.MathUtils.degToRad(t.latitude)) * Math.cos(b.MathUtils.degToRad(e.latitude)) * (Math.sin(i / 2) * Math.sin(i / 2));
254
- return 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h)) * 6371e3;
252
+ Z = function(t, i) {
253
+ const e = b.MathUtils.degToRad(i.longitude - t.longitude), c = b.MathUtils.degToRad(i.latitude - t.latitude), d = Math.sin(c / 2) * Math.sin(c / 2) + Math.cos(b.MathUtils.degToRad(t.latitude)) * Math.cos(b.MathUtils.degToRad(i.latitude)) * (Math.sin(e / 2) * Math.sin(e / 2));
254
+ return 2 * Math.atan2(Math.sqrt(d), Math.sqrt(1 - d)) * 6371e3;
255
255
  };
256
- class ot {
256
+ class at {
257
257
  /**
258
258
  * Create a Webcam.
259
259
  * @param options {Object} - options to use for initialising the camera.
@@ -266,28 +266,28 @@ class ot {
266
266
  * element to render the webcam feed. If a falsy value (e.g. null or
267
267
  * undefined), a video element will be created.
268
268
  */
269
- constructor(t = {}, e) {
269
+ constructor(t = {}, i) {
270
270
  this.sceneWebcam = new b.Scene();
271
- let i;
272
- if (e ? i = document.querySelector(e) : (i = document.createElement("video"), i.setAttribute("autoplay", !0), i.setAttribute("playsinline", !0), i.style.display = "none", document.body.appendChild(i)), this.texture = new b.VideoTexture(i), navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
273
- const r = {
271
+ let e;
272
+ if (i ? e = document.querySelector(i) : (e = document.createElement("video"), e.setAttribute("autoplay", !0), e.setAttribute("playsinline", !0), e.style.display = "none", document.body.appendChild(e)), this.texture = new b.VideoTexture(e), navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
273
+ const c = {
274
274
  video: {
275
275
  width: { ideal: t.idealWidth || 1280 },
276
276
  height: { ideal: t.idealHeight || 720 },
277
277
  facingMode: "environment"
278
278
  }
279
279
  };
280
- navigator.mediaDevices.getUserMedia(r).then((h) => {
281
- i.addEventListener("loadedmetadata", () => {
280
+ navigator.mediaDevices.getUserMedia(c).then((d) => {
281
+ e.addEventListener("loadedmetadata", () => {
282
282
  var g;
283
- i.setAttribute("width", i.videoWidth), i.setAttribute("height", i.videoHeight), i.play(), (g = t.onVideoStarted) == null || g.call(this, this.texture);
284
- }), i.srcObject = h;
285
- }).catch((h) => {
283
+ e.setAttribute("width", e.videoWidth), e.setAttribute("height", e.videoHeight), e.play(), (g = t.onVideoStarted) == null || g.call(this, this.texture);
284
+ }), e.srcObject = d;
285
+ }).catch((d) => {
286
286
  setTimeout(() => {
287
287
  alert(
288
288
  `Webcam Error
289
- Name: ` + h.name + `
290
- Message: ` + h.message
289
+ Name: ` + d.name + `
290
+ Message: ` + d.message
291
291
  );
292
292
  }, 1e3);
293
293
  });
@@ -304,48 +304,49 @@ Message: ` + h.message
304
304
  this.texture.dispose();
305
305
  }
306
306
  }
307
- const k = navigator.userAgent.match(/iPhone|iPad|iPod/i) || /Macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints != null && navigator.maxTouchPoints > 1, $ = new Z(0, 0, 1), z = new N(), J = new _(), tt = new _(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)), et = { type: "change" };
308
- class at extends B {
307
+ const z = navigator.userAgent.match(/iPhone|iPad|iPod/i) || /Macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints != null && navigator.maxTouchPoints > 1, J = new B(0, 0, 1), N = new U(), tt = new F(), et = new F(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)), it = { type: "change" };
308
+ class rt extends K {
309
309
  /**
310
310
  * Create an instance of DeviceOrientationControls.
311
311
  * @param {Object} object - the object to attach the controls to
312
312
  * (usually your Three.js camera)
313
+ * @param {Object} options - options for DeviceOrientationControls: currently accepts smoothingFactor
313
314
  */
314
- constructor(t) {
315
+ constructor(t, i = {}) {
315
316
  super(), window.isSecureContext === !1 && console.error(
316
317
  "THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)"
317
318
  );
318
- const e = this, i = 1e-6, r = new _();
319
- this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = null, this.screenOrientation = 0, this.alphaOffset = 0, this.initialOffset = null, this.TWO_PI = 2 * Math.PI, this.HALF_PI = 0.5 * Math.PI, this.orientationChangeEventName = "ondeviceorientationabsolute" in window ? "deviceorientationabsolute" : "deviceorientation", this.smoothingFactor = 1;
320
- const h = function({
319
+ const e = this, c = 1e-6, d = new F();
320
+ this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = null, this.screenOrientation = 0, this.alphaOffset = 0, this.initialOffset = null, this.TWO_PI = 2 * Math.PI, this.HALF_PI = 0.5 * Math.PI, this.orientationChangeEventName = "ondeviceorientationabsolute" in window ? "deviceorientationabsolute" : "deviceorientation", this.smoothingFactor = i.smoothingFactor || 1;
321
+ const g = function({
321
322
  alpha: s,
322
- beta: c,
323
- gamma: d,
324
- webkitCompassHeading: o
323
+ beta: o,
324
+ gamma: a,
325
+ webkitCompassHeading: u
325
326
  }) {
326
- if (k) {
327
- const l = 360 - o;
328
- e.alphaOffset = C.degToRad(l - s), e.deviceOrientation = { alpha: s, beta: c, gamma: d, webkitCompassHeading: o };
327
+ if (z) {
328
+ const h = 360 - u;
329
+ e.alphaOffset = C.degToRad(h - s), e.deviceOrientation = { alpha: s, beta: o, gamma: a, webkitCompassHeading: u };
329
330
  } else
330
- s < 0 && (s += 360), e.deviceOrientation = { alpha: s, beta: c, gamma: d };
331
+ s < 0 && (s += 360), e.deviceOrientation = { alpha: s, beta: o, gamma: a };
331
332
  window.dispatchEvent(
332
333
  new CustomEvent("camera-rotation-change", {
333
334
  detail: { cameraRotation: t.rotation }
334
335
  })
335
336
  );
336
- }, g = function() {
337
+ }, I = function() {
337
338
  e.screenOrientation = window.orientation || 0;
338
- }, L = function(s, c, d, o, l) {
339
- z.set(d, c, -o, "YXZ"), s.setFromEuler(z), s.multiply(tt), s.multiply(J.setFromAxisAngle($, -l));
339
+ }, R = function(s, o, a, u, h) {
340
+ N.set(a, o, -u, "YXZ"), s.setFromEuler(N), s.multiply(et), s.multiply(tt.setFromAxisAngle(J, -h));
340
341
  };
341
342
  this.connect = function() {
342
- g(), window.DeviceOrientationEvent !== void 0 && typeof window.DeviceOrientationEvent.requestPermission == "function" ? window.DeviceOrientationEvent.requestPermission().then((s) => {
343
+ I(), window.DeviceOrientationEvent !== void 0 && typeof window.DeviceOrientationEvent.requestPermission == "function" ? window.DeviceOrientationEvent.requestPermission().then((s) => {
343
344
  s === "granted" && (window.addEventListener(
344
345
  "orientationchange",
345
- g
346
+ I
346
347
  ), window.addEventListener(
347
348
  e.orientationChangeEventName,
348
- h
349
+ g
349
350
  ));
350
351
  }).catch(function(s) {
351
352
  console.error(
@@ -354,78 +355,78 @@ class at extends B {
354
355
  );
355
356
  }) : (window.addEventListener(
356
357
  "orientationchange",
357
- g
358
+ I
358
359
  ), window.addEventListener(
359
360
  e.orientationChangeEventName,
360
- h
361
+ g
361
362
  )), e.enabled = !0;
362
363
  }, this.disconnect = function() {
363
364
  window.removeEventListener(
364
365
  "orientationchange",
365
- g
366
+ I
366
367
  ), window.removeEventListener(
367
368
  e.orientationChangeEventName,
368
- h
369
+ g
369
370
  ), e.enabled = !1, e.initialOffset = !1, e.deviceOrientation = null;
370
371
  }, this.update = function({ theta: s = 0 } = { theta: 0 }) {
371
372
  if (e.enabled === !1) return;
372
- const c = e.deviceOrientation;
373
- if (c) {
374
- let d = c.alpha ? C.degToRad(c.alpha) + e.alphaOffset : 0, o = c.beta ? C.degToRad(c.beta) : 0, l = c.gamma ? C.degToRad(c.gamma) : 0;
375
- const R = e.screenOrientation ? C.degToRad(e.screenOrientation) : 0;
376
- if (k) {
377
- const v = new _();
378
- L(v, d, o, l, R);
379
- const w = new N().setFromQuaternion(
373
+ const o = e.deviceOrientation;
374
+ if (o) {
375
+ let a = o.alpha ? C.degToRad(o.alpha) + e.alphaOffset : 0, u = o.beta ? C.degToRad(o.beta) : 0, h = o.gamma ? C.degToRad(o.gamma) : 0;
376
+ const _ = e.screenOrientation ? C.degToRad(e.screenOrientation) : 0;
377
+ if (z) {
378
+ const v = new F();
379
+ R(v, a, u, h, _);
380
+ const w = new U().setFromQuaternion(
380
381
  v,
381
382
  "YXZ"
382
383
  );
383
384
  console.log(w.x, w.y, w.z), w.y = C.degToRad(
384
- 360 - c.webkitCompassHeading
385
+ 360 - o.webkitCompassHeading
385
386
  ), v.setFromEuler(w), e.object.quaternion.copy(v);
386
387
  } else {
387
388
  if (this.smoothingFactor < 1) {
388
389
  if (this.lastOrientation) {
389
390
  const v = this.smoothingFactor;
390
- d = this._getSmoothedAngle(
391
- d,
391
+ a = this._getSmoothedAngle(
392
+ a,
392
393
  this.lastOrientation.alpha,
393
394
  v
394
- ), o = this._getSmoothedAngle(
395
- o + Math.PI,
395
+ ), u = this._getSmoothedAngle(
396
+ u + Math.PI,
396
397
  this.lastOrientation.beta,
397
398
  v
398
- ), l = this._getSmoothedAngle(
399
- l + this.HALF_PI,
399
+ ), h = this._getSmoothedAngle(
400
+ h + this.HALF_PI,
400
401
  this.lastOrientation.gamma,
401
402
  v,
402
403
  Math.PI
403
404
  );
404
405
  } else
405
- o += Math.PI, l += this.HALF_PI;
406
+ u += Math.PI, h += this.HALF_PI;
406
407
  this.lastOrientation = {
407
- alpha: d,
408
- beta: o,
409
- gamma: l
408
+ alpha: a,
409
+ beta: u,
410
+ gamma: h
410
411
  };
411
412
  }
412
- L(
413
+ R(
413
414
  e.object.quaternion,
414
- d + s,
415
- this.smoothingFactor < 1 ? o - Math.PI : o,
416
- this.smoothingFactor < 1 ? l - this.HALF_PI : l,
417
- R
415
+ a + s,
416
+ this.smoothingFactor < 1 ? u - Math.PI : u,
417
+ this.smoothingFactor < 1 ? h - this.HALF_PI : h,
418
+ _
418
419
  );
419
420
  }
420
- 8 * (1 - r.dot(e.object.quaternion)) > i && (r.copy(e.object.quaternion), e.dispatchEvent(et));
421
+ 8 * (1 - d.dot(e.object.quaternion)) > c && (d.copy(e.object.quaternion), e.dispatchEvent(it));
421
422
  }
422
- }, this._orderAngle = function(s, c, d = this.TWO_PI) {
423
- return c > s && Math.abs(c - s) < d / 2 || s > c && Math.abs(c - s) > d / 2 ? { left: s, right: c } : { left: c, right: s };
424
- }, this._getSmoothedAngle = function(s, c, d, o = this.TWO_PI) {
425
- const l = this._orderAngle(s, c, o), R = l.left, v = l.right;
426
- l.left = 0, l.right -= R, l.right < 0 && (l.right += o);
427
- let w = v == c ? (1 - d) * l.right + d * l.left : d * l.right + (1 - d) * l.left;
428
- return w += R, w >= o && (w -= o), w;
423
+ }, this._orderAngle = function(s, o, a = this.TWO_PI) {
424
+ return o > s && Math.abs(o - s) < a / 2 || s > o && Math.abs(o - s) > a / 2 ? { left: s, right: o } : { left: o, right: s };
425
+ }, this._getSmoothedAngle = function(s, o, a, u = this.TWO_PI) {
426
+ const h = this._orderAngle(s, o, u), _ = h.left, v = h.right;
427
+ h.left = 0, h.right -= _, h.right < 0 && (h.right += u);
428
+ let w = v == o ? (1 - a) * h.right + a * h.left : a * h.right + (1 - a) * h.left;
429
+ return w += _, w >= u && (w -= u), w;
429
430
  }, this.updateAlphaOffset = function() {
430
431
  e.initialOffset = !1;
431
432
  }, this.dispose = function() {
@@ -442,9 +443,9 @@ class at extends B {
442
443
  // From PR #659 on the main AR.js repo
443
444
  // Thanks to @ma2yama
444
445
  initPermissionDialog() {
445
- const t = document.createElement("div"), e = document.createElement("div"), i = document.createElement("div"), r = document.createElement("div");
446
+ const t = document.createElement("div"), i = document.createElement("div"), e = document.createElement("div"), c = document.createElement("div");
446
447
  document.body.appendChild(t);
447
- const h = {
448
+ const d = {
448
449
  display: "flex",
449
450
  position: "fixed",
450
451
  top: 0,
@@ -461,45 +462,45 @@ class at extends B {
461
462
  borderRadius: "3px",
462
463
  width: "36rem",
463
464
  height: "24rem"
464
- }, L = {
465
+ }, I = {
465
466
  width: "100%",
466
467
  height: "70%",
467
468
  display: "flex",
468
469
  justifyContent: "center",
469
470
  alignItems: "center"
470
- }, s = {
471
+ }, R = {
471
472
  display: "inline-flex",
472
473
  width: "100%",
473
474
  height: "30%",
474
475
  justifyContent: "center",
475
476
  alignItems: "center"
476
477
  };
477
- for (let o in h)
478
- t.style[o] = h[o];
479
- for (let o in g)
480
- e.style[o] = g[o];
481
- for (let o in L)
482
- i.style[o] = L[o];
483
- for (let o in s)
484
- r.style[o] = s[o];
485
- t.appendChild(e), e.appendChild(i), e.appendChild(r), i.innerHTML = '<div style="font-size: 24pt; margin: 1rem;">This immersive website requires access to your device motion sensors.</div>';
486
- const c = () => {
478
+ for (let a in d)
479
+ t.style[a] = d[a];
480
+ for (let a in g)
481
+ i.style[a] = g[a];
482
+ for (let a in I)
483
+ e.style[a] = I[a];
484
+ for (let a in R)
485
+ c.style[a] = R[a];
486
+ t.appendChild(i), i.appendChild(e), i.appendChild(c), e.innerHTML = '<div style="font-size: 24pt; margin: 1rem;">This immersive website requires access to your device motion sensors.</div>';
487
+ const s = () => {
487
488
  this.connect(), t.style.display = "none";
488
- }, d = document.createElement("button");
489
- d.addEventListener("click", c), d.style.width = "50%", d.style.height = "80%", d.style.fontSize = "20pt", d.appendChild(document.createTextNode("OK")), r.appendChild(d), document.body.appendChild(t);
489
+ }, o = document.createElement("button");
490
+ o.addEventListener("click", s), o.style.width = "50%", o.style.height = "80%", o.style.fontSize = "20pt", o.appendChild(document.createTextNode("OK")), c.appendChild(o), document.body.appendChild(t);
490
491
  }
491
492
  }
492
- class rt {
493
+ class ct {
493
494
  /**
494
495
  * Create a ClickHandler.
495
496
  * @param {THREE.WebGLRenderer} - The Three.js renderer on which the click
496
497
  * events will be handled.
497
498
  */
498
499
  constructor(t) {
499
- this.raycaster = new b.Raycaster(), this.normalisedMousePosition = new b.Vector2(null, null), t.domElement.addEventListener("click", (e) => {
500
+ this.raycaster = new b.Raycaster(), this.normalisedMousePosition = new b.Vector2(null, null), t.domElement.addEventListener("click", (i) => {
500
501
  this.normalisedMousePosition.set(
501
- e.clientX / t.domElement.clientWidth * 2 - 1,
502
- -(e.clientY / t.domElement.clientHeight * 2) + 1
502
+ i.clientX / t.domElement.clientWidth * 2 - 1,
503
+ -(i.clientY / t.domElement.clientHeight * 2) + 1
503
504
  );
504
505
  });
505
506
  }
@@ -511,21 +512,21 @@ class rt {
511
512
  * cast into.
512
513
  * @return {Array} - array of all intersected objects.
513
514
  */
514
- raycast(t, e) {
515
+ raycast(t, i) {
515
516
  if (this.normalisedMousePosition.x !== null && this.normalisedMousePosition.y !== null) {
516
517
  this.raycaster.setFromCamera(this.normalisedMousePosition, t);
517
- const i = this.raycaster.intersectObjects(e.children, !1);
518
- return this.normalisedMousePosition.set(null, null), i;
518
+ const e = this.raycaster.intersectObjects(i.children, !1);
519
+ return this.normalisedMousePosition.set(null, null), e;
519
520
  }
520
521
  return [];
521
522
  }
522
523
  }
523
- const ct = "0.0.10-noaframe-1";
524
+ const ht = "0.0.10-noaframe-1";
524
525
  export {
525
- rt as ClickHandler,
526
- at as DeviceOrientationControls,
527
- st as LocationBased,
528
- K as SphMercProjection,
529
- ot as Webcam,
530
- ct as version
526
+ ct as ClickHandler,
527
+ rt as DeviceOrientationControls,
528
+ ot as LocationBased,
529
+ $ as SphMercProjection,
530
+ at as Webcam,
531
+ ht as version
531
532
  };
package/dist/locar.umd.js CHANGED
@@ -1,3 +1,3 @@
1
- (function(a,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],n):(a=typeof globalThis<"u"?globalThis:a||self,n(a.locar={},a.THREE))})(this,function(a,n){"use strict";var z=a=>{throw TypeError(a)};var W=(a,n,f)=>n.has(a)||z("Cannot "+f);var s=(a,n,f)=>(W(a,n,"read from private field"),f?f.call(a):n.get(a)),v=(a,n,f)=>n.has(a)?z("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,f),g=(a,n,f,p)=>(W(a,n,"write to private field"),p?p.call(a,f):n.set(a,f),f),y=(a,n,f)=>(W(a,n,"access private method"),f);var N=(a,n,f,p)=>({set _(U){g(a,n,U,f)},get _(){return s(a,n,p)}});var w,Q,G,X,V,E,D,I,S,j,L,O,_,T,P,M,q,Y,H,Z;function f(b){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(b){for(const e in b)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(b,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:()=>b[e]})}}return t.default=b,Object.freeze(t)}const p=f(n);class U{constructor(){v(this,w);this.EARTH=4007501668e-2,this.HALF_EARTH=2003750834e-2}project(t,e){return[y(this,w,Q).call(this,t),y(this,w,G).call(this,e)]}unproject(t){return[y(this,w,X).call(this,t[0]),y(this,w,V).call(this,t[1])]}getID(){return"epsg:3857"}}w=new WeakSet,Q=function(t){return t/180*this.HALF_EARTH},G=function(t){var e=Math.log(Math.tan((90+t)*Math.PI/360))/(Math.PI/180);return e*this.HALF_EARTH/180},X=function(t){return t/this.HALF_EARTH*180},V=function(t){var e=t/this.HALF_EARTH*180;return e=180/Math.PI*(2*Math.atan(Math.exp(e*Math.PI/180))-Math.PI/2),e};class B{constructor(t,e,i={},d=null){v(this,M);v(this,E);v(this,D);v(this,I);v(this,S);v(this,j);v(this,L);v(this,O);v(this,_);v(this,T);v(this,P);this.scene=t,this.camera=e,g(this,E,new U),g(this,D,{}),g(this,I,null),g(this,S,0),g(this,j,100),g(this,L,null),this.setGpsOptions(i),g(this,O,null),g(this,_,0),g(this,T,0),g(this,P,d)}setProjection(t){g(this,E,t)}setGpsOptions(t={}){t.gpsMinDistance!==void 0&&g(this,S,t.gpsMinDistance),t.gpsMinAccuracy!==void 0&&g(this,j,t.gpsMinAccuracy)}async startGps(){if(s(this,P)){const e=await(await s(this,P).sendData("/gps/start",{gpsMinDistance:s(this,S),gpsMinAccuracy:s(this,j)})).json();g(this,T,e.session)}return s(this,L)===null?(g(this,L,navigator.geolocation.watchPosition(t=>{y(this,M,H).call(this,t)},t=>{s(this,D).gpserror?s(this,D).gpserror(t.code):alert(`GPS error: code ${t.code}`)},{enableHighAccuracy:!0})),!0):!1}stopGps(){return s(this,L)!==null?(navigator.geolocation.clearWatch(s(this,L)),g(this,L,null),!0):!1}fakeGps(t,e,i=null,d=0){i!==null&&this.setElevation(i),y(this,M,H).call(this,{coords:{longitude:t,latitude:e,accuracy:d}})}lonLatToWorldCoords(t,e){const i=s(this,E).project(t,e);if(s(this,O))i[0]-=s(this,O)[0],i[1]-=s(this,O)[1];else throw"No initial position determined";return[i[0],-i[1]]}add(t,e,i,d,h={}){var m;t.properties=h,y(this,M,q).call(this,t,e,i,d),this.scene.add(t),(m=s(this,P))==null||m.sendData("/object/new",{position:t.position,x:t.position.x,z:t.position.z,session:s(this,T),properties:h})}setElevation(t){this.camera.position.y=t}on(t,e){s(this,D)[t]=e}}E=new WeakMap,D=new WeakMap,I=new WeakMap,S=new WeakMap,j=new WeakMap,L=new WeakMap,O=new WeakMap,_=new WeakMap,T=new WeakMap,P=new WeakMap,M=new WeakSet,q=function(t,e,i,d){const h=this.lonLatToWorldCoords(e,i);d!==void 0&&(t.position.y=d),[t.position.x,t.position.z]=h},Y=function(t,e){g(this,O,s(this,E).project(t,e))},H=function(t){var i,d,h;let e=Number.MAX_VALUE;N(this,_)._++,(i=s(this,P))==null||i.sendData("/gps/new",{gpsCount:s(this,_),lat:t.coords.latitude,lon:t.coords.longitude,acc:t.coords.accuracy,session:s(this,T)}),t.coords.accuracy<=s(this,j)&&(s(this,I)===null?g(this,I,{latitude:t.coords.latitude,longitude:t.coords.longitude}):e=y(this,M,Z).call(this,s(this,I),t.coords),e>=s(this,S)&&(s(this,I).longitude=t.coords.longitude,s(this,I).latitude=t.coords.latitude,s(this,O)||(y(this,M,Y).call(this,t.coords.longitude,t.coords.latitude),(d=s(this,P))==null||d.sendData("/worldorigin/new",{gpsCount:s(this,_),lat:t.coords.latitude,lon:t.coords.longitude,session:s(this,T),initialPosition:s(this,O)})),y(this,M,q).call(this,this.camera,t.coords.longitude,t.coords.latitude),(h=s(this,P))==null||h.sendData("/gps/accepted",{gpsCount:s(this,_),cameraX:this.camera.position.x,cameraZ:this.camera.position.z,session:s(this,T),distMoved:e}),s(this,D).gpsupdate&&s(this,D).gpsupdate(t,e)))},Z=function(t,e){const i=p.MathUtils.degToRad(e.longitude-t.longitude),d=p.MathUtils.degToRad(e.latitude-t.latitude),h=Math.sin(d/2)*Math.sin(d/2)+Math.cos(p.MathUtils.degToRad(t.latitude))*Math.cos(p.MathUtils.degToRad(e.latitude))*(Math.sin(i/2)*Math.sin(i/2));return 2*Math.atan2(Math.sqrt(h),Math.sqrt(1-h))*6371e3};class K{constructor(t={},e){this.sceneWebcam=new p.Scene;let i;if(e?i=document.querySelector(e):(i=document.createElement("video"),i.setAttribute("autoplay",!0),i.setAttribute("playsinline",!0),i.style.display="none",document.body.appendChild(i)),this.texture=new p.VideoTexture(i),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const d={video:{width:{ideal:t.idealWidth||1280},height:{ideal:t.idealHeight||720},facingMode:"environment"}};navigator.mediaDevices.getUserMedia(d).then(h=>{i.addEventListener("loadedmetadata",()=>{var m;i.setAttribute("width",i.videoWidth),i.setAttribute("height",i.videoHeight),i.play(),(m=t.onVideoStarted)==null||m.call(this,this.texture)}),i.srcObject=h}).catch(h=>{setTimeout(()=>{alert(`Webcam Error
1
+ (function(a,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],n):(a=typeof globalThis<"u"?globalThis:a||self,n(a.locar={},a.THREE))})(this,function(a,n){"use strict";var N=a=>{throw TypeError(a)};var q=(a,n,f)=>n.has(a)||N("Cannot "+f);var s=(a,n,f)=>(q(a,n,"read from private field"),f?f.call(a):n.get(a)),v=(a,n,f)=>n.has(a)?N("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,f),u=(a,n,f,m)=>(q(a,n,"write to private field"),m?m.call(a,f):n.set(a,f),f),y=(a,n,f)=>(q(a,n,"access private method"),f);var Q=(a,n,f,m)=>({set _(W){u(a,n,W,f)},get _(){return s(a,n,m)}});var w,G,X,V,Y,E,D,I,S,j,L,O,_,T,P,M,H,Z,k,B;function f(b){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(b){for(const i in b)if(i!=="default"){const e=Object.getOwnPropertyDescriptor(b,i);Object.defineProperty(t,i,e.get?e:{enumerable:!0,get:()=>b[i]})}}return t.default=b,Object.freeze(t)}const m=f(n);class W{constructor(){v(this,w);this.EARTH=4007501668e-2,this.HALF_EARTH=2003750834e-2}project(t,i){return[y(this,w,G).call(this,t),y(this,w,X).call(this,i)]}unproject(t){return[y(this,w,V).call(this,t[0]),y(this,w,Y).call(this,t[1])]}getID(){return"epsg:3857"}}w=new WeakSet,G=function(t){return t/180*this.HALF_EARTH},X=function(t){var i=Math.log(Math.tan((90+t)*Math.PI/360))/(Math.PI/180);return i*this.HALF_EARTH/180},V=function(t){return t/this.HALF_EARTH*180},Y=function(t){var i=t/this.HALF_EARTH*180;return i=180/Math.PI*(2*Math.atan(Math.exp(i*Math.PI/180))-Math.PI/2),i};class K{constructor(t,i,e={},l=null){v(this,M);v(this,E);v(this,D);v(this,I);v(this,S);v(this,j);v(this,L);v(this,O);v(this,_);v(this,T);v(this,P);this.scene=t,this.camera=i,u(this,E,new W),u(this,D,{}),u(this,I,null),u(this,S,0),u(this,j,100),u(this,L,null),this.setGpsOptions(e),u(this,O,null),u(this,_,0),u(this,T,0),u(this,P,l)}setProjection(t){u(this,E,t)}setGpsOptions(t={}){t.gpsMinDistance!==void 0&&u(this,S,t.gpsMinDistance),t.gpsMinAccuracy!==void 0&&u(this,j,t.gpsMinAccuracy)}async startGps(){if(s(this,P)){const i=await(await s(this,P).sendData("/gps/start",{gpsMinDistance:s(this,S),gpsMinAccuracy:s(this,j)})).json();u(this,T,i.session)}return s(this,L)===null?(u(this,L,navigator.geolocation.watchPosition(t=>{y(this,M,k).call(this,t)},t=>{s(this,D).gpserror?s(this,D).gpserror(t.code):alert(`GPS error: code ${t.code}`)},{enableHighAccuracy:!0})),!0):!1}stopGps(){return s(this,L)!==null?(navigator.geolocation.clearWatch(s(this,L)),u(this,L,null),!0):!1}fakeGps(t,i,e=null,l=0){e!==null&&this.setElevation(e),y(this,M,k).call(this,{coords:{longitude:t,latitude:i,accuracy:l}})}lonLatToWorldCoords(t,i){const e=s(this,E).project(t,i);if(s(this,O))e[0]-=s(this,O)[0],e[1]-=s(this,O)[1];else throw"No initial position determined";return[e[0],-e[1]]}add(t,i,e,l,h={}){var p;t.properties=h,y(this,M,H).call(this,t,i,e,l),this.scene.add(t),(p=s(this,P))==null||p.sendData("/object/new",{position:t.position,x:t.position.x,z:t.position.z,session:s(this,T),properties:h})}setElevation(t){this.camera.position.y=t}on(t,i){s(this,D)[t]=i}}E=new WeakMap,D=new WeakMap,I=new WeakMap,S=new WeakMap,j=new WeakMap,L=new WeakMap,O=new WeakMap,_=new WeakMap,T=new WeakMap,P=new WeakMap,M=new WeakSet,H=function(t,i,e,l){const h=this.lonLatToWorldCoords(i,e);l!==void 0&&(t.position.y=l),[t.position.x,t.position.z]=h},Z=function(t,i){u(this,O,s(this,E).project(t,i))},k=function(t){var e,l,h;let i=Number.MAX_VALUE;Q(this,_)._++,(e=s(this,P))==null||e.sendData("/gps/new",{gpsCount:s(this,_),lat:t.coords.latitude,lon:t.coords.longitude,acc:t.coords.accuracy,session:s(this,T)}),t.coords.accuracy<=s(this,j)&&(s(this,I)===null?u(this,I,{latitude:t.coords.latitude,longitude:t.coords.longitude}):i=y(this,M,B).call(this,s(this,I),t.coords),i>=s(this,S)&&(s(this,I).longitude=t.coords.longitude,s(this,I).latitude=t.coords.latitude,s(this,O)||(y(this,M,Z).call(this,t.coords.longitude,t.coords.latitude),(l=s(this,P))==null||l.sendData("/worldorigin/new",{gpsCount:s(this,_),lat:t.coords.latitude,lon:t.coords.longitude,session:s(this,T),initialPosition:s(this,O)})),y(this,M,H).call(this,this.camera,t.coords.longitude,t.coords.latitude),(h=s(this,P))==null||h.sendData("/gps/accepted",{gpsCount:s(this,_),cameraX:this.camera.position.x,cameraZ:this.camera.position.z,session:s(this,T),distMoved:i}),s(this,D).gpsupdate&&s(this,D).gpsupdate(t,i)))},B=function(t,i){const e=m.MathUtils.degToRad(i.longitude-t.longitude),l=m.MathUtils.degToRad(i.latitude-t.latitude),h=Math.sin(l/2)*Math.sin(l/2)+Math.cos(m.MathUtils.degToRad(t.latitude))*Math.cos(m.MathUtils.degToRad(i.latitude))*(Math.sin(e/2)*Math.sin(e/2));return 2*Math.atan2(Math.sqrt(h),Math.sqrt(1-h))*6371e3};class ${constructor(t={},i){this.sceneWebcam=new m.Scene;let e;if(i?e=document.querySelector(i):(e=document.createElement("video"),e.setAttribute("autoplay",!0),e.setAttribute("playsinline",!0),e.style.display="none",document.body.appendChild(e)),this.texture=new m.VideoTexture(e),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const l={video:{width:{ideal:t.idealWidth||1280},height:{ideal:t.idealHeight||720},facingMode:"environment"}};navigator.mediaDevices.getUserMedia(l).then(h=>{e.addEventListener("loadedmetadata",()=>{var p;e.setAttribute("width",e.videoWidth),e.setAttribute("height",e.videoHeight),e.play(),(p=t.onVideoStarted)==null||p.call(this,this.texture)}),e.srcObject=h}).catch(h=>{setTimeout(()=>{alert(`Webcam Error
2
2
  Name: `+h.name+`
3
- Message: `+h.message)},1e3)})}else setTimeout(()=>{alert("sorry - media devices API not supported")},1e3)}dispose(){this.texture.dispose()}}const k=navigator.userAgent.match(/iPhone|iPad|iPod/i)||/Macintosh/i.test(navigator.userAgent)&&navigator.maxTouchPoints!=null&&navigator.maxTouchPoints>1,$=new n.Vector3(0,0,1),R=new n.Euler,J=new n.Quaternion,tt=new n.Quaternion(-Math.sqrt(.5),0,0,Math.sqrt(.5)),et={type:"change"};class it extends n.EventDispatcher{constructor(t){super(),window.isSecureContext===!1&&console.error("THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)");const e=this,i=1e-6,d=new n.Quaternion;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation=null,this.screenOrientation=0,this.alphaOffset=0,this.initialOffset=null,this.TWO_PI=2*Math.PI,this.HALF_PI=.5*Math.PI,this.orientationChangeEventName="ondeviceorientationabsolute"in window?"deviceorientationabsolute":"deviceorientation",this.smoothingFactor=1;const h=function({alpha:o,beta:c,gamma:l,webkitCompassHeading:r}){if(k){const u=360-r;e.alphaOffset=n.MathUtils.degToRad(u-o),e.deviceOrientation={alpha:o,beta:c,gamma:l,webkitCompassHeading:r}}else o<0&&(o+=360),e.deviceOrientation={alpha:o,beta:c,gamma:l};window.dispatchEvent(new CustomEvent("camera-rotation-change",{detail:{cameraRotation:t.rotation}}))},m=function(){e.screenOrientation=window.orientation||0},x=function(o,c,l,r,u){R.set(l,c,-r,"YXZ"),o.setFromEuler(R),o.multiply(tt),o.multiply(J.setFromAxisAngle($,-u))};this.connect=function(){m(),window.DeviceOrientationEvent!==void 0&&typeof window.DeviceOrientationEvent.requestPermission=="function"?window.DeviceOrientationEvent.requestPermission().then(o=>{o==="granted"&&(window.addEventListener("orientationchange",m),window.addEventListener(e.orientationChangeEventName,h))}).catch(function(o){console.error("THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:",o)}):(window.addEventListener("orientationchange",m),window.addEventListener(e.orientationChangeEventName,h)),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",m),window.removeEventListener(e.orientationChangeEventName,h),e.enabled=!1,e.initialOffset=!1,e.deviceOrientation=null},this.update=function({theta:o=0}={theta:0}){if(e.enabled===!1)return;const c=e.deviceOrientation;if(c){let l=c.alpha?n.MathUtils.degToRad(c.alpha)+e.alphaOffset:0,r=c.beta?n.MathUtils.degToRad(c.beta):0,u=c.gamma?n.MathUtils.degToRad(c.gamma):0;const F=e.screenOrientation?n.MathUtils.degToRad(e.screenOrientation):0;if(k){const A=new n.Quaternion;x(A,l,r,u,F);const C=new n.Euler().setFromQuaternion(A,"YXZ");console.log(C.x,C.y,C.z),C.y=n.MathUtils.degToRad(360-c.webkitCompassHeading),A.setFromEuler(C),e.object.quaternion.copy(A)}else{if(this.smoothingFactor<1){if(this.lastOrientation){const A=this.smoothingFactor;l=this._getSmoothedAngle(l,this.lastOrientation.alpha,A),r=this._getSmoothedAngle(r+Math.PI,this.lastOrientation.beta,A),u=this._getSmoothedAngle(u+this.HALF_PI,this.lastOrientation.gamma,A,Math.PI)}else r+=Math.PI,u+=this.HALF_PI;this.lastOrientation={alpha:l,beta:r,gamma:u}}x(e.object.quaternion,l+o,this.smoothingFactor<1?r-Math.PI:r,this.smoothingFactor<1?u-this.HALF_PI:u,F)}8*(1-d.dot(e.object.quaternion))>i&&(d.copy(e.object.quaternion),e.dispatchEvent(et))}},this._orderAngle=function(o,c,l=this.TWO_PI){return c>o&&Math.abs(c-o)<l/2||o>c&&Math.abs(c-o)>l/2?{left:o,right:c}:{left:c,right:o}},this._getSmoothedAngle=function(o,c,l,r=this.TWO_PI){const u=this._orderAngle(o,c,r),F=u.left,A=u.right;u.left=0,u.right-=F,u.right<0&&(u.right+=r);let C=A==c?(1-l)*u.right+l*u.left:l*u.right+(1-l)*u.left;return C+=F,C>=r&&(C-=r),C},this.updateAlphaOffset=function(){e.initialOffset=!1},this.dispose=function(){e.disconnect()},this.getAlpha=function(){const{deviceOrientation:o}=e;return o&&o.alpha?n.MathUtils.degToRad(o.alpha)+e.alphaOffset:0},this.getBeta=function(){const{deviceOrientation:o}=e;return o&&o.beta?n.MathUtils.degToRad(o.beta):0},window.DeviceOrientationEvent!==void 0&&typeof window.DeviceOrientationEvent.requestPermission=="function"?this.initPermissionDialog():this.connect()}initPermissionDialog(){const t=document.createElement("div"),e=document.createElement("div"),i=document.createElement("div"),d=document.createElement("div");document.body.appendChild(t);const h={display:"flex",position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:1,backgroundColor:"rgba(0,0,0,0.6)",justifyContent:"center",alignItems:"center"},m={backgroundColor:"white",padding:"6px",borderRadius:"3px",width:"36rem",height:"24rem"},x={width:"100%",height:"70%",display:"flex",justifyContent:"center",alignItems:"center"},o={display:"inline-flex",width:"100%",height:"30%",justifyContent:"center",alignItems:"center"};for(let r in h)t.style[r]=h[r];for(let r in m)e.style[r]=m[r];for(let r in x)i.style[r]=x[r];for(let r in o)d.style[r]=o[r];t.appendChild(e),e.appendChild(i),e.appendChild(d),i.innerHTML='<div style="font-size: 24pt; margin: 1rem;">This immersive website requires access to your device motion sensors.</div>';const c=()=>{this.connect(),t.style.display="none"},l=document.createElement("button");l.addEventListener("click",c),l.style.width="50%",l.style.height="80%",l.style.fontSize="20pt",l.appendChild(document.createTextNode("OK")),d.appendChild(l),document.body.appendChild(t)}}class nt{constructor(t){this.raycaster=new p.Raycaster,this.normalisedMousePosition=new p.Vector2(null,null),t.domElement.addEventListener("click",e=>{this.normalisedMousePosition.set(e.clientX/t.domElement.clientWidth*2-1,-(e.clientY/t.domElement.clientHeight*2)+1)})}raycast(t,e){if(this.normalisedMousePosition.x!==null&&this.normalisedMousePosition.y!==null){this.raycaster.setFromCamera(this.normalisedMousePosition,t);const i=this.raycaster.intersectObjects(e.children,!1);return this.normalisedMousePosition.set(null,null),i}return[]}}const st="0.0.10-noaframe-1";a.ClickHandler=nt,a.DeviceOrientationControls=it,a.LocationBased=B,a.SphMercProjection=U,a.Webcam=K,a.version=st,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
3
+ Message: `+h.message)},1e3)})}else setTimeout(()=>{alert("sorry - media devices API not supported")},1e3)}dispose(){this.texture.dispose()}}const R=navigator.userAgent.match(/iPhone|iPad|iPod/i)||/Macintosh/i.test(navigator.userAgent)&&navigator.maxTouchPoints!=null&&navigator.maxTouchPoints>1,J=new n.Vector3(0,0,1),z=new n.Euler,tt=new n.Quaternion,et=new n.Quaternion(-Math.sqrt(.5),0,0,Math.sqrt(.5)),it={type:"change"};class nt extends n.EventDispatcher{constructor(t,i={}){super(),window.isSecureContext===!1&&console.error("THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)");const e=this,l=1e-6,h=new n.Quaternion;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation=null,this.screenOrientation=0,this.alphaOffset=0,this.initialOffset=null,this.TWO_PI=2*Math.PI,this.HALF_PI=.5*Math.PI,this.orientationChangeEventName="ondeviceorientationabsolute"in window?"deviceorientationabsolute":"deviceorientation",this.smoothingFactor=i.smoothingFactor||1;const p=function({alpha:o,beta:r,gamma:c,webkitCompassHeading:g}){if(R){const d=360-g;e.alphaOffset=n.MathUtils.degToRad(d-o),e.deviceOrientation={alpha:o,beta:r,gamma:c,webkitCompassHeading:g}}else o<0&&(o+=360),e.deviceOrientation={alpha:o,beta:r,gamma:c};window.dispatchEvent(new CustomEvent("camera-rotation-change",{detail:{cameraRotation:t.rotation}}))},x=function(){e.screenOrientation=window.orientation||0},F=function(o,r,c,g,d){z.set(c,r,-g,"YXZ"),o.setFromEuler(z),o.multiply(et),o.multiply(tt.setFromAxisAngle(J,-d))};this.connect=function(){x(),window.DeviceOrientationEvent!==void 0&&typeof window.DeviceOrientationEvent.requestPermission=="function"?window.DeviceOrientationEvent.requestPermission().then(o=>{o==="granted"&&(window.addEventListener("orientationchange",x),window.addEventListener(e.orientationChangeEventName,p))}).catch(function(o){console.error("THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:",o)}):(window.addEventListener("orientationchange",x),window.addEventListener(e.orientationChangeEventName,p)),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",x),window.removeEventListener(e.orientationChangeEventName,p),e.enabled=!1,e.initialOffset=!1,e.deviceOrientation=null},this.update=function({theta:o=0}={theta:0}){if(e.enabled===!1)return;const r=e.deviceOrientation;if(r){let c=r.alpha?n.MathUtils.degToRad(r.alpha)+e.alphaOffset:0,g=r.beta?n.MathUtils.degToRad(r.beta):0,d=r.gamma?n.MathUtils.degToRad(r.gamma):0;const U=e.screenOrientation?n.MathUtils.degToRad(e.screenOrientation):0;if(R){const A=new n.Quaternion;F(A,c,g,d,U);const C=new n.Euler().setFromQuaternion(A,"YXZ");console.log(C.x,C.y,C.z),C.y=n.MathUtils.degToRad(360-r.webkitCompassHeading),A.setFromEuler(C),e.object.quaternion.copy(A)}else{if(this.smoothingFactor<1){if(this.lastOrientation){const A=this.smoothingFactor;c=this._getSmoothedAngle(c,this.lastOrientation.alpha,A),g=this._getSmoothedAngle(g+Math.PI,this.lastOrientation.beta,A),d=this._getSmoothedAngle(d+this.HALF_PI,this.lastOrientation.gamma,A,Math.PI)}else g+=Math.PI,d+=this.HALF_PI;this.lastOrientation={alpha:c,beta:g,gamma:d}}F(e.object.quaternion,c+o,this.smoothingFactor<1?g-Math.PI:g,this.smoothingFactor<1?d-this.HALF_PI:d,U)}8*(1-h.dot(e.object.quaternion))>l&&(h.copy(e.object.quaternion),e.dispatchEvent(it))}},this._orderAngle=function(o,r,c=this.TWO_PI){return r>o&&Math.abs(r-o)<c/2||o>r&&Math.abs(r-o)>c/2?{left:o,right:r}:{left:r,right:o}},this._getSmoothedAngle=function(o,r,c,g=this.TWO_PI){const d=this._orderAngle(o,r,g),U=d.left,A=d.right;d.left=0,d.right-=U,d.right<0&&(d.right+=g);let C=A==r?(1-c)*d.right+c*d.left:c*d.right+(1-c)*d.left;return C+=U,C>=g&&(C-=g),C},this.updateAlphaOffset=function(){e.initialOffset=!1},this.dispose=function(){e.disconnect()},this.getAlpha=function(){const{deviceOrientation:o}=e;return o&&o.alpha?n.MathUtils.degToRad(o.alpha)+e.alphaOffset:0},this.getBeta=function(){const{deviceOrientation:o}=e;return o&&o.beta?n.MathUtils.degToRad(o.beta):0},window.DeviceOrientationEvent!==void 0&&typeof window.DeviceOrientationEvent.requestPermission=="function"?this.initPermissionDialog():this.connect()}initPermissionDialog(){const t=document.createElement("div"),i=document.createElement("div"),e=document.createElement("div"),l=document.createElement("div");document.body.appendChild(t);const h={display:"flex",position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:1,backgroundColor:"rgba(0,0,0,0.6)",justifyContent:"center",alignItems:"center"},p={backgroundColor:"white",padding:"6px",borderRadius:"3px",width:"36rem",height:"24rem"},x={width:"100%",height:"70%",display:"flex",justifyContent:"center",alignItems:"center"},F={display:"inline-flex",width:"100%",height:"30%",justifyContent:"center",alignItems:"center"};for(let c in h)t.style[c]=h[c];for(let c in p)i.style[c]=p[c];for(let c in x)e.style[c]=x[c];for(let c in F)l.style[c]=F[c];t.appendChild(i),i.appendChild(e),i.appendChild(l),e.innerHTML='<div style="font-size: 24pt; margin: 1rem;">This immersive website requires access to your device motion sensors.</div>';const o=()=>{this.connect(),t.style.display="none"},r=document.createElement("button");r.addEventListener("click",o),r.style.width="50%",r.style.height="80%",r.style.fontSize="20pt",r.appendChild(document.createTextNode("OK")),l.appendChild(r),document.body.appendChild(t)}}class st{constructor(t){this.raycaster=new m.Raycaster,this.normalisedMousePosition=new m.Vector2(null,null),t.domElement.addEventListener("click",i=>{this.normalisedMousePosition.set(i.clientX/t.domElement.clientWidth*2-1,-(i.clientY/t.domElement.clientHeight*2)+1)})}raycast(t,i){if(this.normalisedMousePosition.x!==null&&this.normalisedMousePosition.y!==null){this.raycaster.setFromCamera(this.normalisedMousePosition,t);const e=this.raycaster.intersectObjects(i.children,!1);return this.normalisedMousePosition.set(null,null),e}return[]}}const ot="0.0.10-noaframe-1";a.ClickHandler=st,a.DeviceOrientationControls=nt,a.LocationBased=K,a.SphMercProjection=W,a.Webcam=$,a.version=ot,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "locar",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "Location-based AR from AR.js.",
5
5
  "files": [
6
6
  "dist"