@needle-tools/engine 4.10.0-next.4f9d92a → 4.10.0-next.f0ec242

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 (68) hide show
  1. package/components.needle.json +1 -1
  2. package/dist/{needle-engine.bundle-BeZ_xmJa.js → needle-engine.bundle-BC-0Ex9m.js} +5301 -5485
  3. package/dist/{needle-engine.bundle-C3bpSNYu.min.js → needle-engine.bundle-BSh7dSEx.min.js} +154 -165
  4. package/dist/{needle-engine.bundle-D4dO0t5I.umd.cjs → needle-engine.bundle-dgNq9Vsa.umd.cjs} +131 -142
  5. package/dist/needle-engine.d.ts +15 -15
  6. package/dist/needle-engine.js +257 -258
  7. package/dist/needle-engine.min.js +1 -1
  8. package/dist/needle-engine.umd.cjs +1 -1
  9. package/lib/engine/codegen/register_types.js +0 -2
  10. package/lib/engine/codegen/register_types.js.map +1 -1
  11. package/lib/engine/engine_camera.d.ts +1 -7
  12. package/lib/engine/engine_camera.js +6 -46
  13. package/lib/engine/engine_camera.js.map +1 -1
  14. package/lib/engine/engine_context.d.ts +0 -6
  15. package/lib/engine/engine_context.js +9 -48
  16. package/lib/engine/engine_context.js.map +1 -1
  17. package/lib/engine/extensions/NEEDLE_lightmaps.js +1 -1
  18. package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
  19. package/lib/engine/webcomponents/logo-element.d.ts +1 -1
  20. package/lib/engine/webcomponents/logo-element.js +5 -29
  21. package/lib/engine/webcomponents/logo-element.js.map +1 -1
  22. package/lib/engine/webcomponents/needle menu/needle-menu.js +3 -4
  23. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  24. package/lib/engine/webcomponents/needle-engine.loading.d.ts +1 -0
  25. package/lib/engine/webcomponents/needle-engine.loading.js +36 -3
  26. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  27. package/lib/engine-components/Renderer.js +1 -6
  28. package/lib/engine-components/Renderer.js.map +1 -1
  29. package/lib/engine-components/codegen/components.d.ts +0 -1
  30. package/lib/engine-components/codegen/components.js +0 -1
  31. package/lib/engine-components/codegen/components.js.map +1 -1
  32. package/lib/engine-components/timeline/PlayableDirector.d.ts +0 -7
  33. package/lib/engine-components/timeline/PlayableDirector.js +0 -7
  34. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  35. package/lib/engine-components/timeline/TimelineModels.d.ts +1 -9
  36. package/lib/engine-components/timeline/TimelineTracks.js +2 -4
  37. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  38. package/lib/engine-components/utils/LookAt.js +1 -5
  39. package/lib/engine-components/utils/LookAt.js.map +1 -1
  40. package/lib/engine-components/web/Clickthrough.js +2 -10
  41. package/lib/engine-components/web/Clickthrough.js.map +1 -1
  42. package/lib/engine-components/web/ScrollFollow.d.ts +0 -22
  43. package/lib/engine-components/web/ScrollFollow.js +14 -126
  44. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  45. package/lib/engine-components/web/index.d.ts +0 -1
  46. package/lib/engine-components/web/index.js +0 -1
  47. package/lib/engine-components/web/index.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/engine/codegen/register_types.ts +0 -2
  50. package/src/engine/engine_camera.ts +8 -62
  51. package/src/engine/engine_context.ts +10 -50
  52. package/src/engine/extensions/NEEDLE_lightmaps.ts +1 -1
  53. package/src/engine/webcomponents/logo-element.ts +4 -29
  54. package/src/engine/webcomponents/needle menu/needle-menu.ts +3 -4
  55. package/src/engine/webcomponents/needle-engine.loading.ts +32 -32
  56. package/src/engine-components/Renderer.ts +1 -6
  57. package/src/engine-components/codegen/components.ts +0 -1
  58. package/src/engine-components/timeline/PlayableDirector.ts +0 -9
  59. package/src/engine-components/timeline/TimelineModels.ts +1 -9
  60. package/src/engine-components/timeline/TimelineTracks.ts +2 -4
  61. package/src/engine-components/utils/LookAt.ts +1 -5
  62. package/src/engine-components/web/Clickthrough.ts +2 -11
  63. package/src/engine-components/web/ScrollFollow.ts +15 -151
  64. package/src/engine-components/web/index.ts +1 -2
  65. package/lib/engine-components/web/ViewBox.d.ts +0 -16
  66. package/lib/engine-components/web/ViewBox.js +0 -186
  67. package/lib/engine-components/web/ViewBox.js.map +0 -1
  68. package/src/engine-components/web/ViewBox.ts +0 -202
@@ -100,26 +100,4 @@ export declare class ScrollFollow extends Behaviour {
100
100
  private applyScroll;
101
101
  private handleTimelineTarget;
102
102
  }
103
- declare global {
104
- interface ViewTimeline {
105
- axis: 'block' | 'inline';
106
- currentTime: {
107
- unit: 'seconds' | 'percent';
108
- value: number;
109
- };
110
- duration: {
111
- unit: 'seconds' | 'percent';
112
- value: number;
113
- };
114
- source: Element | null;
115
- startOffset: {
116
- unit: 'px';
117
- value: number;
118
- };
119
- endOffset: {
120
- unit: 'px';
121
- value: number;
122
- };
123
- }
124
- }
125
103
  export {};
@@ -116,8 +116,7 @@ export class ScrollFollow extends Behaviour {
116
116
  this._current_value = this._target_value;
117
117
  }
118
118
  }
119
- // if (this._current_value !== this._appliedValue)
120
- {
119
+ if (this._current_value !== this._appliedValue) {
121
120
  this._appliedValue = this._current_value;
122
121
  let defaultPrevented = false;
123
122
  if (this.changed.listenerCount > 0) {
@@ -195,9 +194,8 @@ export class ScrollFollow extends Behaviour {
195
194
  return;
196
195
  if (target instanceof PlayableDirector) {
197
196
  this.handleTimelineTarget(target, value);
198
- if (target.isPlaying)
199
- target.pause();
200
- target.evaluate();
197
+ if (!target.isPlaying)
198
+ target.evaluate();
201
199
  }
202
200
  else if (target instanceof Animator) {
203
201
  target.setFloat("scroll", value);
@@ -241,33 +239,18 @@ export class ScrollFollow extends Behaviour {
241
239
  let scrollRegionStart = Infinity;
242
240
  let scrollRegionEnd = 0;
243
241
  markersArray.length = 0;
244
- // querySelectorResults.length = 0;
245
- let markerIndex = 0;
246
- // https://scroll-driven-animations.style/tools/view-timeline/ranges
247
242
  for (const marker of director.foreachMarker("ScrollMarker")) {
248
- const index = markerIndex++;
249
243
  // Get marker elements from DOM
250
- if ((marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (!marker.element?.parentNode))) {
244
+ if (marker.selector?.length && (marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (!marker.element?.parentNode))) {
251
245
  marker.needsUpdate = false;
252
246
  try {
253
- marker.element = tryGetElementsForSelector(index, marker.name);
247
+ marker.element = document.querySelector(marker.selector) || null;
254
248
  if (debug)
255
- console.debug("ScrollMarker found on page", marker.element, marker.name);
256
- // if (!marker.element) {
257
- // marker.timeline = undefined;
258
- // continue;
259
- // }
260
- // else {
261
- // /** @ts-ignore */
262
- // marker.timeline = new ViewTimeline({
263
- // subject: marker.element,
264
- // axis: 'block', // https://drafts.csswg.org/scroll-animations/#scroll-notation
265
- // });
266
- // }
249
+ console.debug("ScrollMarker found on page", marker.element, marker.selector);
267
250
  }
268
251
  catch (error) {
269
252
  marker.element = null;
270
- console.error("ScrollMarker selector is not valid: " + marker.name + "\n", error);
253
+ console.error("ScrollMarker selector is not valid: " + marker.selector + "\n", error);
271
254
  }
272
255
  }
273
256
  // skip markers without element (e.g. if the selector didn't return any element)
@@ -288,25 +271,10 @@ export class ScrollFollow extends Behaviour {
288
271
  const currentBottom = currentTop + this._scrollContainerHeight;
289
272
  weightsArray.length = 0;
290
273
  let sum = 0;
291
- // We keep a separate count here in case there are some markers that could not be resolved so point to *invalid* elements - the timeline should fallback to 0-1 scroll behaviour then
292
274
  let markerCount = 0;
293
275
  for (const marker of markersArray) {
294
276
  if (!marker.element)
295
277
  continue;
296
- markerCount += 1;
297
- // const timeline = marker.timeline;
298
- // if (timeline) {
299
- // const time01 = calculateTimelinePositionNormalized(timeline);
300
- // if (time01 > 0 && time01 <= 1) {
301
- // const overlap = calculateTimelinePositionNormalized(timeline!);
302
- // const weight = overlap;
303
- // // console.log(marker.element.className, time01)
304
- // weightsArray.push({ time: marker.time, weight: weight });
305
- // sum += weight;
306
- // }
307
- // }
308
- // continue;
309
- // if(this.context.time.frame % 10 === 0) console.log(marker.element?.className, timeline, calculateTimelinePositionNormalized(timeline!));
310
278
  const top = marker.element.offsetTop;
311
279
  const height = marker.element.offsetHeight;
312
280
  const bottom = top + height;
@@ -325,31 +293,26 @@ export class ScrollFollow extends Behaviour {
325
293
  const overlapTop = Math.max(top, currentTop);
326
294
  const overlapBottom = Math.min(bottom, currentBottom);
327
295
  overlap = Math.max(0, overlapBottom - overlapTop);
296
+ // console.log(marker.element.className, overlap)
328
297
  }
329
- markerCount += 1;
330
298
  if (overlap > 0) {
331
299
  weightsArray.push({ time: marker.time, weight: overlap });
332
300
  sum += overlap;
333
301
  }
334
302
  }
335
- if (weightsArray.length <= 0 && markerCount <= 0) {
303
+ if (weightsArray.length <= 0 && markersArray.length <= 0) {
336
304
  director.time = value * duration;
337
305
  }
338
306
  else if (weightsArray.length > 0) {
339
307
  // normalize and calculate weighted time
340
- let time = 0;
341
- for (const entry of weightsArray) {
342
- const weight = entry.weight / Math.max(0.00001, sum);
343
- // console.log(weight.toFixed(2))
308
+ let time = weightsArray[0].time;
309
+ for (const o of weightsArray) {
310
+ const weight = o.weight / Math.max(0.00001, sum);
344
311
  // lerp time based on weight
345
- const diff = Math.abs(entry.time - time);
312
+ const diff = Math.abs(o.time - time);
346
313
  time += diff * weight;
347
314
  }
348
- // console.log(time.toFixed(2), [...weightsArray])
349
- if (this.damping <= 0)
350
- director.time = time;
351
- else
352
- director.time = Mathf.lerp(director.time, time, this.context.time.deltaTime / this.damping);
315
+ director.time = time;
353
316
  }
354
317
  }
355
318
  }
@@ -373,79 +336,4 @@ __decorate([
373
336
  ], ScrollFollow.prototype, "changed", void 0);
374
337
  const weightsArray = [];
375
338
  const markersArray = [];
376
- // type SelectorCache = {
377
- // /** The selector used to query the *elements */
378
- // selector: string,
379
- // elements: Element[] | null,
380
- // usedElementCount: number,
381
- // }
382
- // const querySelectorResults: Array<SelectorCache> = [];
383
- const needleScrollMarkerCacheKey = "data-timeline-marker";
384
- const needleScrollMarkerIndexCache = new Map();
385
- const needleScrollMarkerNameCache = new Map();
386
- let needsScrollMarkerRefresh = true;
387
- function tryGetElementsForSelector(index, name) {
388
- if (!needsScrollMarkerRefresh) {
389
- let element = name?.length ? needleScrollMarkerNameCache.get(name) : null;
390
- if (element)
391
- return element;
392
- element = needleScrollMarkerIndexCache.get(index) || null;
393
- return element;
394
- }
395
- needsScrollMarkerRefresh = false;
396
- needleScrollMarkerIndexCache.clear();
397
- const markers = document.querySelectorAll(`[data-timeline-marker]`);
398
- markers.forEach((m, i) => {
399
- needleScrollMarkerIndexCache.set(i, m);
400
- const name = m.getAttribute("data-timeline-marker");
401
- if (name?.length)
402
- needleScrollMarkerNameCache.set(name, m);
403
- });
404
- const element = needleScrollMarkerIndexCache.get(index) || null;
405
- return element;
406
- /* e.g.
407
- <div class="section behind start" data-needle-scroll-marker>
408
- */
409
- // console.log(index, element)
410
- if (element)
411
- return element;
412
- // for (const entry of querySelectorResults) {
413
- // if (entry.selector === selector) {
414
- // const index = entry.usedElementCount++;
415
- // return entry.elements && index < entry.elements.length ? entry.elements[index] : null;
416
- // }
417
- // }
418
- // const elements = document.querySelectorAll(selector);
419
- // querySelectorResults.push({ selector, elements: Array.from(elements), usedElementCount: 1 });
420
- // if (elements.length > 0) return elements[0];
421
- return null;
422
- }
423
- // #region ScrollTimeline
424
- function calculateTimelinePositionNormalized(timeline) {
425
- if (!timeline.source)
426
- return 0;
427
- const currentTime = timeline.currentTime;
428
- const duration = timeline.duration;
429
- let durationValue = 1;
430
- if (duration.unit === "seconds") {
431
- durationValue = duration.value;
432
- }
433
- else if (duration.unit === "percent") {
434
- durationValue = duration.value;
435
- }
436
- const t01 = currentTime.unit === "seconds" ? (currentTime.value / durationValue) : (currentTime.value / 100);
437
- return t01;
438
- }
439
- function calculateNormalizedOverlap(timeline) {
440
- if (!timeline.source)
441
- return 0;
442
- const start = timeline.startOffset;
443
- const end = timeline.endOffset;
444
- const total = start.value + end.value;
445
- if (total <= 0)
446
- return 1;
447
- const startNorm = start.value / total;
448
- const endNorm = end.value / total;
449
- return 1 - (startNorm + endNorm);
450
- }
451
339
  //# sourceMappingURL=ScrollFollow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollFollow.js","sourceRoot":"","sources":["../../../src/engine-components/web/ScrollFollow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScrollFollow.js","sourceRoot":"","sources":["../../../src/engine-components/web/ScrollFollow.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,3 @@ export * from "./Clickthrough.js";
2
2
  export * from "./CursorFollow.js";
3
3
  export * from "./HoverAnimation.js";
4
4
  export * from "./ScrollFollow.js";
5
- export * from "./ViewBox.js";
@@ -2,5 +2,4 @@ export * from "./Clickthrough.js";
2
2
  export * from "./CursorFollow.js";
3
3
  export * from "./HoverAnimation.js";
4
4
  export * from "./ScrollFollow.js";
5
- export * from "./ViewBox.js";
6
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine-components/web/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine-components/web/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "4.10.0-next.4f9d92a",
3
+ "version": "4.10.0-next.f0ec242",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
5
5
  "main": "dist/needle-engine.min.js",
6
6
  "exports": {
@@ -142,7 +142,6 @@ import { ClickThrough } from "../../engine-components/web/Clickthrough.js";
142
142
  import { CursorFollow } from "../../engine-components/web/CursorFollow.js";
143
143
  import { HoverAnimation } from "../../engine-components/web/HoverAnimation.js";
144
144
  import { ScrollFollow } from "../../engine-components/web/ScrollFollow.js";
145
- import { ViewBox } from "../../engine-components/web/ViewBox.js";
146
145
  import { Avatar } from "../../engine-components/webxr/Avatar.js";
147
146
  import { XRControllerFollow } from "../../engine-components/webxr/controllers/XRControllerFollow.js";
148
147
  import { XRControllerModel } from "../../engine-components/webxr/controllers/XRControllerModel.js";
@@ -301,7 +300,6 @@ TypeStore.add("ClickThrough", ClickThrough);
301
300
  TypeStore.add("CursorFollow", CursorFollow);
302
301
  TypeStore.add("HoverAnimation", HoverAnimation);
303
302
  TypeStore.add("ScrollFollow", ScrollFollow);
304
- TypeStore.add("ViewBox", ViewBox);
305
303
  TypeStore.add("Avatar", Avatar);
306
304
  TypeStore.add("XRControllerFollow", XRControllerFollow);
307
305
  TypeStore.add("XRControllerModel", XRControllerModel);
@@ -52,23 +52,15 @@ export type FocusRectSettings = {
52
52
  /** Lower values will result in faster alignment with the rect (value ~= seconds to reach target)
53
53
  * Minimum value is 0.
54
54
  */
55
- damping: number,
56
-
57
- /** X offset in camera coordinates. Used by ViewBox component */
58
- offsetX: number,
59
- /** Y offset in camera coordinates. Used by ViewBox component */
60
- offsetY: number,
61
- /** Zoom factor. Used by ViewBox component */
62
- zoom: number,
55
+ damping: number
63
56
  }
64
57
  export type FocusRect = DOMRect | Element | { x: number, y: number, width: number, height: number };
65
58
 
66
59
  let rendererRect: DOMRect | undefined = undefined;
67
60
  const overlapRect = { x: 0, y: 0, width: 0, height: 0 };
68
- const _testTime = 1;
69
61
 
70
62
  /** Used internally by the Needle Engine context via 'setFocusRect(<rect>)' */
71
- export function updateCameraFocusRect(focusRect: FocusRect, settings: FocusRectSettings, dt: number, camera: PerspectiveCamera, renderer: WebGLRenderer) {
63
+ export function updateCameraFocusRect(focusRect: FocusRect, dt: number, camera: PerspectiveCamera, renderer: WebGLRenderer) {
72
64
 
73
65
  if (focusRect instanceof Element) {
74
66
  focusRect = focusRect.getBoundingClientRect();
@@ -84,62 +76,16 @@ export function updateCameraFocusRect(focusRect: FocusRect, settings: FocusRectS
84
76
  rect.x -= rendererRect.x;
85
77
  rect.y -= rendererRect.y;
86
78
 
87
- const sourceWidth = rendererRect.width;
88
- const sourceHeight = rendererRect.height;
79
+ const targetX = rect.width / -2 - (rect.x - (rendererRect.width / 2));
80
+ const targetY = rect.height / -2 - (rect.y - (rendererRect.height / 2));
89
81
 
90
- const view = camera.view as PerspectiveCamera["view"];
82
+ const view = camera.view;
91
83
 
92
- // Apply zoom
93
- const zoom = settings.zoom;
94
84
  let offsetX = view?.offsetX || 0;
95
85
  let offsetY = view?.offsetY || 0;
86
+ offsetX = Mathf.lerp(offsetX, targetX, dt);
87
+ offsetY = Mathf.lerp(offsetY, targetY, dt);
96
88
 
97
- let width = rendererRect.width;
98
- let height = rendererRect.height;
99
- width /= zoom;
100
- height /= zoom;
101
- offsetX = width * (zoom - 1) * .5;
102
- offsetY = height * (zoom - 1) * .5;
103
-
104
- const focusRectCenterX = rect.x + rect.width * .5;
105
- const focusRectCenterY = rect.y + rect.height * .5;
106
- const rendererCenterX = rendererRect.width * .5;
107
- const rendererCenterY = rendererRect.height * .5;
108
-
109
- const diffx = focusRectCenterX - rendererCenterX;
110
- const diffy = focusRectCenterY - rendererCenterY;
111
- offsetX -= diffx / zoom;
112
- offsetY -= diffy / zoom;
113
- if (settings.offsetX !== undefined) {
114
- offsetX += settings.offsetX * (rendererRect.width * .5);
115
- }
116
- if (settings.offsetY !== undefined) {
117
- offsetY -= settings.offsetY * (rendererRect.height * .5);
118
- }
119
-
120
-
121
- const currentOffsetX = view?.offsetX || offsetX;
122
- const currentOffsetY = view?.offsetY || offsetY;
123
- offsetX = Mathf.lerp(currentOffsetX, offsetX, dt);
124
- offsetY = Mathf.lerp(currentOffsetY, offsetY, dt);
125
- const currentWidth = view?.width || sourceWidth;
126
- const currentHeight = view?.height || sourceHeight;
127
- width = Mathf.lerp(currentWidth, width, dt);
128
- height = Mathf.lerp(currentHeight, height, dt);
129
-
130
- camera.setViewOffset(sourceWidth, sourceHeight, offsetX, offsetY, width, height);
89
+ camera.setViewOffset(rendererRect.width, rendererRect.height, offsetX, offsetY, rendererRect.width, rendererRect.height);
131
90
  camera.updateProjectionMatrix();
132
-
133
- if (settings.damping > 0) {
134
- settings.damping *= (1.0 - dt);
135
- if (settings.damping < 0.01) settings.damping = 0;
136
- settings.damping = Math.max(0, settings.damping);
137
- }
138
- }
139
-
140
-
141
- function fit(width1: number, height1: number, width2: number, height2: number) {
142
- const scaleX = width2 / width1;
143
- const scaleY = height2 / height1;
144
- return Math.max(scaleX, scaleY);
145
91
  }
@@ -1382,61 +1382,21 @@ export class Context implements IContext {
1382
1382
  * @param settings Optional settings for the focus rect. These will override the `focusRectSettings` property
1383
1383
  */
1384
1384
  public setCameraFocusRect(rect: FocusRect | null, settings?: Partial<FocusRectSettings>) {
1385
- const oldRect = this._focusRect;
1386
1385
  this._focusRect = rect;
1387
1386
  if (settings) {
1388
1387
  Object.assign(this.focusRectSettings, settings);
1389
1388
  }
1390
- if (settings?.damping === undefined) {
1391
- // if the new rect is on screen then set damping
1392
- if (oldRect) {
1393
- let domRect = oldRect as DOMRect;
1394
- if (oldRect instanceof HTMLElement) {
1395
- domRect = oldRect.getBoundingClientRect();
1396
- }
1397
- if (domRect && "top" in domRect) {
1398
- const allowedDistance = 100;
1399
- const isVisible = domRect.bottom >= -allowedDistance && domRect.right >= -allowedDistance && domRect.top <= window.innerHeight + allowedDistance && domRect.left <= window.innerWidth + allowedDistance;
1400
- if (isVisible) this.focusRectSettings.damping = .2;
1401
- }
1402
- }
1403
- }
1404
-
1405
1389
  }
1406
1390
  get focusRect() { return this._focusRect; }
1407
- get focusRectSize(): null | { x: number, y: number, width: number, height: number } {
1408
- const rect = this._focusRect;
1409
- if (rect && (rect instanceof DOMRect || ("width" in rect && "height" in rect && "x" in rect && "y" in rect))) {
1410
- return { x: rect.x, y: rect.y, width: rect.width, height: rect.height };
1411
- }
1412
- else if (rect instanceof HTMLElement) {
1413
- const r = rect.getBoundingClientRect();
1414
- return { x: r.x, y: r.y, width: r.width, height: r.height };
1415
- }
1416
- return null;
1417
- }
1418
1391
  /** Settings when a focus rect is set. Use `setCameraFocusRect(...)` to do so.
1419
1392
  * This can be used to offset the renderer center e.g. to a specific DOM element.
1420
1393
  */
1421
1394
  readonly focusRectSettings: FocusRectSettings = {
1422
1395
  /** Controls how fast the rect is centered. Smaller values mean the rect is centered faster.
1423
1396
  * A minimum value of 0 means the rect is centered instantly.
1424
- * @default 0
1397
+ * @default .05
1425
1398
  */
1426
- damping: 0,
1427
-
1428
- /**
1429
- * Zoom factor when a focus rect is set.
1430
- */
1431
- zoom: 1,
1432
- /**
1433
- * Additional offset in pixels from the center of the rect
1434
- */
1435
- offsetX: 0,
1436
- /**
1437
- * Additional offset in pixels from the center of the rect
1438
- */
1439
- offsetY: 0,
1399
+ damping: .05
1440
1400
  };
1441
1401
  private _focusRect: FocusRect | null = null;
1442
1402
 
@@ -1568,6 +1528,14 @@ export class Context implements IContext {
1568
1528
 
1569
1529
  if (this.isVisibleToUser || this.runInBackground) {
1570
1530
 
1531
+ if (this._focusRect) {
1532
+ if (this.mainCamera instanceof PerspectiveCamera) {
1533
+ const settings = this.focusRectSettings;
1534
+ const dt = settings.damping > 0 ? this.time.deltaTime / settings.damping : 1;
1535
+ updateCameraFocusRect(this._focusRect, dt, this.mainCamera, this.renderer);
1536
+ }
1537
+ }
1538
+
1571
1539
  this._currentFrameEvent = FrameEvent.OnBeforeRender;
1572
1540
 
1573
1541
  // should we move these callbacks in the regular three onBeforeRender events?
@@ -1584,14 +1552,6 @@ export class Context implements IContext {
1584
1552
  this.executeCoroutines(FrameEvent.OnBeforeRender);
1585
1553
  invokeLifecycleFunctions(this, FrameEvent.OnBeforeRender);
1586
1554
 
1587
- if (this._focusRect) {
1588
- if (this.mainCamera instanceof PerspectiveCamera) {
1589
- const settings = this.focusRectSettings;
1590
- const dt = settings.damping > 0 ? this.time.deltaTime / settings.damping : 1;
1591
- updateCameraFocusRect(this._focusRect, this.focusRectSettings, dt, this.mainCamera, this.renderer);
1592
- }
1593
- }
1594
-
1595
1555
  if (this._needsUpdateSize)
1596
1556
  this.updateSize();
1597
1557
 
@@ -107,7 +107,7 @@ export class NEEDLE_lightmaps implements GLTFLoaderPlugin {
107
107
 
108
108
  private resolveTexture(entry: LightmapInfo, res: any) {
109
109
  const tex: Texture = res as unknown as Texture;
110
- if (debug) console.log("Light Texture loaded:", tex);
110
+ if (debug) console.log("Lightmap loaded:", tex);
111
111
  if (tex?.isTexture) {
112
112
  if (!this.registry)
113
113
  console.log(LightmapType[entry.type], entry.pointer, tex);
@@ -32,22 +32,10 @@ export class NeedleLogoElement extends HTMLElement {
32
32
  cursor: pointer;
33
33
  }
34
34
  img {
35
+ width: 95px;
35
36
  height: 100%;
36
37
  align-self: end;
37
38
  margin-left: 0.6rem;
38
- transition: transform 0.2s;
39
- }
40
- img.with-text {
41
- width: 11.5ch;
42
- &:hover {
43
- transform: scale(1.02);
44
- }
45
- }
46
- img.compact {
47
- width: 1.7em;
48
- &:hover {
49
- transform: scale(1.1);
50
- }
51
39
  }
52
40
  span {
53
41
  font-size: 1rem;
@@ -55,14 +43,12 @@ export class NeedleLogoElement extends HTMLElement {
55
43
  }
56
44
  </style>
57
45
  <div class="wrapper">
58
- <img class="logo with-text" src=${needleLogoSVG} />
46
+ <img class="logo" src=${needleLogoSVG} />
59
47
  </div>
60
48
  `;
61
49
  this._root.appendChild(template.content.cloneNode(true));
62
50
  this.wrapper = this._root.querySelector(".wrapper") as HTMLDivElement;
63
51
  this._root.appendChild(this.wrapper);
64
- this.logoElement = this._root.querySelector("img.logo") as HTMLImageElement;
65
-
66
52
  // this.wrapper.classList.add("wrapper");
67
53
 
68
54
  // this.wrapper.appendChild(this.logoElement);
@@ -81,24 +67,13 @@ export class NeedleLogoElement extends HTMLElement {
81
67
 
82
68
  private readonly _root: ShadowRoot;
83
69
  private readonly wrapper: HTMLDivElement;
84
- private readonly logoElement: HTMLImageElement;
70
+ private readonly logoElement: HTMLImageElement = document.createElement("img");
71
+ private readonly textElement: HTMLSpanElement = document.createElement("span");
85
72
 
86
73
  setLogoVisible(val: boolean) {
87
74
  this.logoElement.style.display = val ? "block" : "none";
88
75
  }
89
76
 
90
- setType(type: "full" | "compact") {
91
- if (type === "full") {
92
- this.logoElement.src = needleLogoSVG;
93
- this.logoElement.classList.remove("with-text");
94
- this.logoElement.classList.remove("compact");
95
- } else {
96
- this.logoElement.src = needleLogoOnlySVG;
97
- this.logoElement.classList.add("with-text");
98
- this.logoElement.classList.add("compact");
99
- }
100
- }
101
-
102
77
  }
103
78
  if (!customElements.get(elementName))
104
79
  customElements.define(elementName, NeedleLogoElement);
@@ -459,7 +459,7 @@ export class NeedleMenuElement extends HTMLElement {
459
459
 
460
460
  .logo {
461
461
  cursor: pointer;
462
- padding-left: 0.0rem;
462
+ padding-left: 0.6rem;
463
463
  padding-bottom: .02rem;
464
464
  margin-right: 0.5rem;
465
465
  }
@@ -664,8 +664,8 @@ export class NeedleMenuElement extends HTMLElement {
664
664
  <slot name="end"></slot>
665
665
  </div>
666
666
  </div>
667
- <div style="user-select:none;" class="logo">
668
- <span class="madewith notranslate" style="display:none;">powered by</span>
667
+ <div style="user-select:none" class="logo">
668
+ <span class="madewith notranslate">powered by</span>
669
669
  </div>
670
670
  </div>
671
671
  <button class="compact-menu-button">
@@ -698,7 +698,6 @@ export class NeedleMenuElement extends HTMLElement {
698
698
  this.wrapper.classList.add("wrapper");
699
699
 
700
700
  const logo = NeedleLogoElement.create();
701
- logo.setType("compact");
702
701
  logo.style.minHeight = "1rem";
703
702
  this.logoContainer.append(logo);
704
703
  this.logoContainer.addEventListener("click", () => {