@needle-tools/engine 4.10.0-next.55c0bf9 → 4.10.0-next.870425c
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/CHANGELOG.md +8 -3
- package/README.md +2 -1
- package/components.needle.json +1 -1
- package/dist/{needle-engine.bundle-Cf5H9Zy9.umd.cjs → needle-engine.bundle-0b6rexDr.umd.cjs} +154 -141
- package/dist/{needle-engine.bundle-CUo74dPe.js → needle-engine.bundle-B5GtGvbq.js} +8329 -8050
- package/dist/needle-engine.bundle-CicGQeCY.min.js +1652 -0
- package/dist/needle-engine.js +259 -257
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/vendor-CPuBPspY.umd.cjs +1121 -0
- package/dist/vendor-DPCU8cUF.min.js +1121 -0
- package/dist/vendor-MBoqSyFm.js +16240 -0
- package/lib/engine/codegen/register_types.js +2 -0
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/engine_camera.d.ts +7 -1
- package/lib/engine/engine_camera.fit.d.ts +1 -1
- package/lib/engine/engine_camera.fit.js +3 -30
- package/lib/engine/engine_camera.fit.js.map +1 -1
- package/lib/engine/engine_camera.js +46 -6
- package/lib/engine/engine_camera.js.map +1 -1
- package/lib/engine/engine_context.d.ts +6 -0
- package/lib/engine/engine_context.js +48 -9
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_gizmos.d.ts +11 -10
- package/lib/engine/engine_gizmos.js +24 -10
- package/lib/engine/engine_gizmos.js.map +1 -1
- package/lib/engine/engine_license.js +1 -1
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_lightdata.d.ts +3 -3
- package/lib/engine/engine_lightdata.js +10 -10
- package/lib/engine/engine_lightdata.js.map +1 -1
- package/lib/engine/engine_physics_rapier.js +4 -0
- package/lib/engine/engine_physics_rapier.js.map +1 -1
- package/lib/engine/engine_scenelighting.d.ts +1 -1
- package/lib/engine/engine_scenelighting.js +4 -5
- package/lib/engine/engine_scenelighting.js.map +1 -1
- package/lib/engine/engine_utils.d.ts +3 -1
- package/lib/engine/engine_utils.js +11 -0
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_lightmaps.js +1 -1
- package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
- package/lib/engine/extensions/extension_utils.js +1 -1
- package/lib/engine/extensions/extension_utils.js.map +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +1 -1
- package/lib/engine/webcomponents/logo-element.js +29 -5
- package/lib/engine/webcomponents/logo-element.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.js +4 -3
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.js +22 -0
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +0 -1
- package/lib/engine/webcomponents/needle-engine.loading.js +3 -36
- package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
- package/lib/engine/xr/NeedleXRController.d.ts +3 -3
- package/lib/engine/xr/NeedleXRController.js +28 -0
- package/lib/engine/xr/NeedleXRController.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +1 -1
- package/lib/engine-components/Camera.js +1 -1
- package/lib/engine-components/CameraUtils.js +2 -1
- package/lib/engine-components/CameraUtils.js.map +1 -1
- package/lib/engine-components/CharacterController.d.ts +2 -2
- package/lib/engine-components/CharacterController.js +2 -2
- package/lib/engine-components/OrbitControls.d.ts +5 -2
- package/lib/engine-components/OrbitControls.js +31 -7
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/Renderer.js +6 -1
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/Skybox.js +22 -4
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +1 -0
- package/lib/engine-components/codegen/components.js +1 -0
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/debug/LogStats.d.ts +1 -0
- package/lib/engine-components/debug/LogStats.js +1 -0
- package/lib/engine-components/debug/LogStats.js.map +1 -1
- package/lib/engine-components/timeline/PlayableDirector.d.ts +7 -0
- package/lib/engine-components/timeline/PlayableDirector.js +8 -1
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/timeline/TimelineModels.d.ts +45 -2
- package/lib/engine-components/timeline/TimelineModels.js +6 -0
- package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
- package/lib/engine-components/timeline/TimelineTracks.d.ts +2 -1
- package/lib/engine-components/timeline/TimelineTracks.js +30 -25
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/utils/LookAt.js +5 -1
- package/lib/engine-components/utils/LookAt.js.map +1 -1
- package/lib/engine-components/web/Clickthrough.js +10 -2
- package/lib/engine-components/web/Clickthrough.js.map +1 -1
- package/lib/engine-components/web/ScrollFollow.d.ts +24 -0
- package/lib/engine-components/web/ScrollFollow.js +167 -41
- package/lib/engine-components/web/ScrollFollow.js.map +1 -1
- package/lib/engine-components/web/ViewBox.d.ts +46 -0
- package/lib/engine-components/web/ViewBox.js +270 -0
- package/lib/engine-components/web/ViewBox.js.map +1 -0
- package/lib/engine-components/web/index.d.ts +1 -0
- package/lib/engine-components/web/index.js +1 -0
- package/lib/engine-components/web/index.js.map +1 -1
- package/lib/engine-components/webxr/WebARSessionRoot.js +1 -0
- package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +1 -0
- package/lib/engine-components-experimental/Presentation.js +1 -0
- package/lib/engine-components-experimental/Presentation.js.map +1 -1
- package/package.json +2 -1
- package/src/engine/codegen/register_types.ts +2 -0
- package/src/engine/engine_camera.fit.ts +2 -32
- package/src/engine/engine_camera.ts +61 -9
- package/src/engine/engine_context.ts +50 -10
- package/src/engine/engine_gizmos.ts +37 -23
- package/src/engine/engine_license.ts +1 -1
- package/src/engine/engine_lightdata.ts +11 -11
- package/src/engine/engine_physics_rapier.ts +3 -0
- package/src/engine/engine_scenelighting.ts +5 -6
- package/src/engine/engine_utils.ts +12 -0
- package/src/engine/extensions/NEEDLE_lightmaps.ts +1 -1
- package/src/engine/extensions/extension_utils.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +29 -4
- package/src/engine/webcomponents/needle menu/needle-menu.ts +4 -3
- package/src/engine/webcomponents/needle-engine.loading.ts +32 -32
- package/src/engine/webcomponents/needle-engine.ts +33 -6
- package/src/engine/xr/NeedleXRController.ts +36 -4
- package/src/engine-components/Camera.ts +1 -1
- package/src/engine-components/CameraUtils.ts +1 -1
- package/src/engine-components/CharacterController.ts +2 -2
- package/src/engine-components/OrbitControls.ts +41 -2
- package/src/engine-components/Renderer.ts +6 -1
- package/src/engine-components/Skybox.ts +26 -7
- package/src/engine-components/codegen/components.ts +1 -0
- package/src/engine-components/debug/LogStats.ts +1 -0
- package/src/engine-components/timeline/PlayableDirector.ts +10 -1
- package/src/engine-components/timeline/TimelineModels.ts +45 -3
- package/src/engine-components/timeline/TimelineTracks.ts +30 -25
- package/src/engine-components/utils/LookAt.ts +5 -1
- package/src/engine-components/web/Clickthrough.ts +11 -2
- package/src/engine-components/web/ScrollFollow.ts +200 -48
- package/src/engine-components/web/ViewBox.ts +292 -0
- package/src/engine-components/web/index.ts +2 -1
- package/src/engine-components/webxr/WebARSessionRoot.ts +1 -0
- package/src/engine-components-experimental/Presentation.ts +1 -0
- package/dist/needle-engine.bundle-DlAVTipB.min.js +0 -1639
- package/dist/vendor-D0Yvltn9.umd.cjs +0 -1121
- package/dist/vendor-DU8tJyl_.js +0 -14366
- package/dist/vendor-JyrX4DVM.min.js +0 -1121
|
@@ -4,7 +4,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
// For firefox ViewTimeline support
|
|
8
|
+
import "scroll-timeline-polyfill/dist/scroll-timeline.js";
|
|
7
9
|
import { Object3D } from "three";
|
|
10
|
+
import { isDevEnvironment } from "../../engine/debug/debug.js";
|
|
8
11
|
import { Mathf } from "../../engine/engine_math.js";
|
|
9
12
|
import { serializable } from "../../engine/engine_serialization.js";
|
|
10
13
|
import { getBoundingBox } from "../../engine/engine_three_utils.js";
|
|
@@ -26,6 +29,7 @@ const debug = getParam("debugscroll");
|
|
|
26
29
|
*
|
|
27
30
|
* @link Example at https://scrollytelling-2-z23hmxby7c6x-u30ld.needle.run/
|
|
28
31
|
* @link Template at https://github.com/needle-engine/scrollytelling-template
|
|
32
|
+
* @link [Scrollytelling Bike Demo](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
|
|
29
33
|
*
|
|
30
34
|
* ## How to use with an Animator
|
|
31
35
|
* 1. Create an Animator component and set up a float parameter named "scroll".
|
|
@@ -116,7 +120,8 @@ export class ScrollFollow extends Behaviour {
|
|
|
116
120
|
this._current_value = this._target_value;
|
|
117
121
|
}
|
|
118
122
|
}
|
|
119
|
-
if (this._current_value !== this._appliedValue)
|
|
123
|
+
// if (this._current_value !== this._appliedValue)
|
|
124
|
+
{
|
|
120
125
|
this._appliedValue = this._current_value;
|
|
121
126
|
let defaultPrevented = false;
|
|
122
127
|
if (this.changed.listenerCount > 0) {
|
|
@@ -134,8 +139,8 @@ export class ScrollFollow extends Behaviour {
|
|
|
134
139
|
// if not prevented apply scroll
|
|
135
140
|
if (!defaultPrevented) {
|
|
136
141
|
const value = this.invert ? 1 - this._current_value : this._current_value;
|
|
137
|
-
const height = this._rangeEndValue - this._rangeStartValue;
|
|
138
|
-
const pixelValue = this._rangeStartValue + value * height;
|
|
142
|
+
// const height = this._rangeEndValue - this._rangeStartValue;
|
|
143
|
+
// const pixelValue = this._rangeStartValue + value * height;
|
|
139
144
|
// apply scroll to target(s)
|
|
140
145
|
if (Array.isArray(this.target)) {
|
|
141
146
|
this.target.forEach(t => t && this.applyScroll(t, value));
|
|
@@ -144,7 +149,7 @@ export class ScrollFollow extends Behaviour {
|
|
|
144
149
|
this.applyScroll(this.target, value);
|
|
145
150
|
}
|
|
146
151
|
if (debug && this.context.time.frame % 30 === 0) {
|
|
147
|
-
console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value * 100).toFixed(0)}
|
|
152
|
+
console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value * 100).toFixed(0)}%, targets [${Array.isArray(this.target) ? this.target.length : 1}]`);
|
|
148
153
|
}
|
|
149
154
|
}
|
|
150
155
|
}
|
|
@@ -194,8 +199,9 @@ export class ScrollFollow extends Behaviour {
|
|
|
194
199
|
return;
|
|
195
200
|
if (target instanceof PlayableDirector) {
|
|
196
201
|
this.handleTimelineTarget(target, value);
|
|
197
|
-
if (
|
|
198
|
-
target.
|
|
202
|
+
if (target.isPlaying)
|
|
203
|
+
target.pause();
|
|
204
|
+
target.evaluate();
|
|
199
205
|
}
|
|
200
206
|
else if (target instanceof Animator) {
|
|
201
207
|
target.setFloat("scroll", value);
|
|
@@ -239,18 +245,36 @@ export class ScrollFollow extends Behaviour {
|
|
|
239
245
|
let scrollRegionStart = Infinity;
|
|
240
246
|
let scrollRegionEnd = 0;
|
|
241
247
|
markersArray.length = 0;
|
|
248
|
+
// querySelectorResults.length = 0;
|
|
249
|
+
let markerIndex = 0;
|
|
250
|
+
// https://scroll-driven-animations.style/tools/view-timeline/ranges
|
|
242
251
|
for (const marker of director.foreachMarker("ScrollMarker")) {
|
|
252
|
+
const index = markerIndex++;
|
|
243
253
|
// Get marker elements from DOM
|
|
244
|
-
if (
|
|
254
|
+
if ((marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (marker.element && !marker.element?.parentNode))) {
|
|
245
255
|
marker.needsUpdate = false;
|
|
246
256
|
try {
|
|
247
|
-
|
|
257
|
+
// TODO: with this it's currently not possible to remap markers from HTML. For example if I have two sections and I want to now use the marker["center"] multiple times to stay at that marker for a longer time
|
|
258
|
+
marker.element = tryGetElementsForSelector(index, marker.name);
|
|
248
259
|
if (debug)
|
|
249
|
-
console.debug(
|
|
260
|
+
console.debug(`ScrollMarker #${index} "${marker.name}" (${marker.time.toFixed(2)}) found`, marker.element);
|
|
261
|
+
if (!marker.element) {
|
|
262
|
+
marker.timeline = undefined;
|
|
263
|
+
if (debug || isDevEnvironment())
|
|
264
|
+
console.warn(`No HTML element found for ScrollMarker: ${marker.name} (index ${index})`);
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
/** @ts-ignore */
|
|
269
|
+
marker.timeline = new ViewTimeline({
|
|
270
|
+
subject: marker.element,
|
|
271
|
+
axis: 'block', // https://drafts.csswg.org/scroll-animations/#scroll-notation
|
|
272
|
+
});
|
|
273
|
+
}
|
|
250
274
|
}
|
|
251
275
|
catch (error) {
|
|
252
276
|
marker.element = null;
|
|
253
|
-
console.error("ScrollMarker selector is not valid: " + marker.
|
|
277
|
+
console.error("ScrollMarker selector is not valid: " + marker.name + "\n", error);
|
|
254
278
|
}
|
|
255
279
|
}
|
|
256
280
|
// skip markers without element (e.g. if the selector didn't return any element)
|
|
@@ -271,49 +295,92 @@ export class ScrollFollow extends Behaviour {
|
|
|
271
295
|
const currentBottom = currentTop + this._scrollContainerHeight;
|
|
272
296
|
weightsArray.length = 0;
|
|
273
297
|
let sum = 0;
|
|
298
|
+
const oneFrameTime = 1 / 60;
|
|
299
|
+
// 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
|
|
274
300
|
let markerCount = 0;
|
|
275
|
-
for (
|
|
301
|
+
for (let i = 0; i < markersArray.length; i++) {
|
|
302
|
+
const marker = markersArray[i];
|
|
276
303
|
if (!marker.element)
|
|
277
304
|
continue;
|
|
278
|
-
const
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
// TODO: if we have two marker sections where no HTML overlaps (vor example because some large section is between them) we probably want to still virtually interpolate between them slowly in that region
|
|
283
|
-
if (bottom < currentTop) {
|
|
284
|
-
// marker is above scroll region
|
|
285
|
-
overlap = 0;
|
|
286
|
-
}
|
|
287
|
-
else if (top > currentBottom) {
|
|
288
|
-
// marker is below scroll region
|
|
289
|
-
overlap = 0;
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
// calculate overlap in pixels
|
|
293
|
-
const overlapTop = Math.max(top, currentTop);
|
|
294
|
-
const overlapBottom = Math.min(bottom, currentBottom);
|
|
295
|
-
overlap = Math.max(0, overlapBottom - overlapTop);
|
|
296
|
-
// console.log(marker.element.className, overlap)
|
|
297
|
-
}
|
|
305
|
+
const nextMarker = markersArray[i + 1];
|
|
306
|
+
const nextTime = nextMarker
|
|
307
|
+
? (nextMarker.time - oneFrameTime)
|
|
308
|
+
: duration;
|
|
298
309
|
markerCount += 1;
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
310
|
+
const timeline = marker.timeline;
|
|
311
|
+
if (timeline) {
|
|
312
|
+
const time01 = calculateTimelinePositionNormalized(timeline);
|
|
313
|
+
// remap 0-1 to 0 - 1 - 0 (full weight at center)
|
|
314
|
+
const weight = 1 - Math.abs(time01 - 0.5) * 2;
|
|
315
|
+
const name = marker.name || `marker${i}`;
|
|
316
|
+
if (time01 > 0 && time01 <= 1) {
|
|
317
|
+
const lerpTime = marker.time + (nextTime - marker.time) * time01;
|
|
318
|
+
weightsArray.push({ name, time: lerpTime, weight: weight });
|
|
319
|
+
sum += weight;
|
|
320
|
+
}
|
|
321
|
+
// Before the first marker is reached
|
|
322
|
+
else if (i === 0 && time01 <= 0) {
|
|
323
|
+
weightsArray.push({ name, time: 0, weight: 1 });
|
|
324
|
+
sum += 1;
|
|
325
|
+
}
|
|
326
|
+
// After the last marker is reached
|
|
327
|
+
else if (i === markersArray.length - 1 && time01 >= 1) {
|
|
328
|
+
weightsArray.push({ name, time: duration, weight: 1 });
|
|
329
|
+
sum += 1;
|
|
330
|
+
}
|
|
302
331
|
}
|
|
332
|
+
continue;
|
|
333
|
+
// if(this.context.time.frame % 10 === 0) console.log(marker.element?.className, timeline, calculateTimelinePositionNormalized(timeline!));
|
|
334
|
+
// const top = marker.element.offsetTop - this._scrollContainerHeight;
|
|
335
|
+
// const height = marker.element.offsetHeight + this._scrollContainerHeight;
|
|
336
|
+
// const bottom = top + height;
|
|
337
|
+
// let overlap = 0;
|
|
338
|
+
// // TODO: if we have two marker sections where no HTML overlaps (vor example because some large section is between them) we probably want to still virtually interpolate between them slowly in that region
|
|
339
|
+
// if (bottom < currentTop) {
|
|
340
|
+
// // marker is above scroll region
|
|
341
|
+
// overlap = 0;
|
|
342
|
+
// }
|
|
343
|
+
// else if (top > currentBottom) {
|
|
344
|
+
// // marker is below scroll region
|
|
345
|
+
// overlap = 0;
|
|
346
|
+
// }
|
|
347
|
+
// else {
|
|
348
|
+
// // calculate overlap in pixels
|
|
349
|
+
// const overlapTop = Math.max(top, currentTop);
|
|
350
|
+
// const overlapBottom = Math.min(bottom, currentBottom);
|
|
351
|
+
// const height = Math.max(1, currentBottom - currentTop);
|
|
352
|
+
// overlap = Math.max(0, overlapBottom - overlapTop);
|
|
353
|
+
// }
|
|
354
|
+
// // if(this.context.time.frame % 20 === 0) console.log(overlap)
|
|
355
|
+
// if (overlap > 0) {
|
|
356
|
+
// weightsArray.push({ time: marker.time, weight: overlap });
|
|
357
|
+
// sum += overlap;
|
|
358
|
+
// }
|
|
303
359
|
}
|
|
304
360
|
if (weightsArray.length <= 0 && markerCount <= 0) {
|
|
305
361
|
director.time = value * duration;
|
|
306
362
|
}
|
|
307
363
|
else if (weightsArray.length > 0) {
|
|
308
364
|
// normalize and calculate weighted time
|
|
309
|
-
let time = weightsArray[0].time;
|
|
310
|
-
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
365
|
+
let time = weightsArray[0].time; // fallback to first time
|
|
366
|
+
if (weightsArray.length > 1) {
|
|
367
|
+
for (const entry of weightsArray) {
|
|
368
|
+
const weight = entry.weight / Math.max(0.00001, sum);
|
|
369
|
+
// console.log(weight.toFixed(2))
|
|
370
|
+
// lerp time based on weight
|
|
371
|
+
const diff = Math.abs(entry.time - time);
|
|
372
|
+
time += diff * weight;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (this.damping <= 0) {
|
|
376
|
+
director.time = time;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
director.time = Mathf.lerp(director.time, time, this.context.time.deltaTime / this.damping);
|
|
380
|
+
}
|
|
381
|
+
if (debug && this.context.time.frame % 30 === 0) {
|
|
382
|
+
console.log(`[ScrollFollow ] Timeline ${director.name}: ${time.toFixed(3)}`, weightsArray.map(w => `[${w.name} ${(w.weight * 100).toFixed(0)}%]`).join(", "));
|
|
315
383
|
}
|
|
316
|
-
director.time = time;
|
|
317
384
|
}
|
|
318
385
|
}
|
|
319
386
|
}
|
|
@@ -337,4 +404,63 @@ __decorate([
|
|
|
337
404
|
], ScrollFollow.prototype, "changed", void 0);
|
|
338
405
|
const weightsArray = [];
|
|
339
406
|
const markersArray = [];
|
|
407
|
+
// type SelectorCache = {
|
|
408
|
+
// /** The selector used to query the *elements */
|
|
409
|
+
// selector: string,
|
|
410
|
+
// elements: Element[] | null,
|
|
411
|
+
// usedElementCount: number,
|
|
412
|
+
// }
|
|
413
|
+
// const querySelectorResults: Array<SelectorCache> = [];
|
|
414
|
+
const needleScrollMarkerIndexCache = new Map();
|
|
415
|
+
const needleScrollMarkerNameCache = new Map();
|
|
416
|
+
let needsScrollMarkerRefresh = true;
|
|
417
|
+
function tryGetElementsForSelector(index, name, _cycle = 0) {
|
|
418
|
+
if (!needsScrollMarkerRefresh) {
|
|
419
|
+
if (name?.length) {
|
|
420
|
+
const element = needleScrollMarkerNameCache.get(name) || null;
|
|
421
|
+
if (element)
|
|
422
|
+
return element;
|
|
423
|
+
// const isNumber = !isNaN(Number(name));
|
|
424
|
+
// if (!isNumber) {
|
|
425
|
+
// }
|
|
426
|
+
}
|
|
427
|
+
const element = needleScrollMarkerIndexCache.get(index) || null;
|
|
428
|
+
const value = element?.getAttribute("data-timeline-marker");
|
|
429
|
+
// if (value?.length) {
|
|
430
|
+
// if (cycle === 0) {
|
|
431
|
+
// // if the HTML marker we found by index does define a different marker name we try to find the correct HTML element by name
|
|
432
|
+
// return tryGetElementsForSelector(index, value, 1);
|
|
433
|
+
// }
|
|
434
|
+
// if (isDevEnvironment()) console.warn(`ScrollMarker name mismatch: expected "${name}", got "${value}"`);
|
|
435
|
+
// }
|
|
436
|
+
return element;
|
|
437
|
+
}
|
|
438
|
+
needsScrollMarkerRefresh = false;
|
|
439
|
+
needleScrollMarkerIndexCache.clear();
|
|
440
|
+
const markers = document.querySelectorAll(`[data-timeline-marker]`);
|
|
441
|
+
markers.forEach((m, i) => {
|
|
442
|
+
needleScrollMarkerIndexCache.set(i, m);
|
|
443
|
+
const name = m.getAttribute("data-timeline-marker");
|
|
444
|
+
if (name?.length)
|
|
445
|
+
needleScrollMarkerNameCache.set(name, m);
|
|
446
|
+
});
|
|
447
|
+
needsScrollMarkerRefresh = false;
|
|
448
|
+
return tryGetElementsForSelector(index, name);
|
|
449
|
+
}
|
|
450
|
+
// #region ScrollTimeline
|
|
451
|
+
function calculateTimelinePositionNormalized(timeline) {
|
|
452
|
+
if (!timeline.source)
|
|
453
|
+
return 0;
|
|
454
|
+
const currentTime = timeline.currentTime;
|
|
455
|
+
const duration = timeline.duration;
|
|
456
|
+
let durationValue = 1;
|
|
457
|
+
if (duration.unit === "seconds") {
|
|
458
|
+
durationValue = duration.value;
|
|
459
|
+
}
|
|
460
|
+
else if (duration.unit === "percent") {
|
|
461
|
+
durationValue = duration.value;
|
|
462
|
+
}
|
|
463
|
+
const t01 = currentTime.unit === "seconds" ? (currentTime.value / durationValue) : (currentTime.value / 100);
|
|
464
|
+
return t01;
|
|
465
|
+
}
|
|
340
466
|
//# 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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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Behaviour } from "../Component.js";
|
|
2
|
+
/**
|
|
3
|
+
* This component can be used to automatically fit a certain box area into the camera view - no matter your screen size or aspect ratio.
|
|
4
|
+
*
|
|
5
|
+
* Add the ViewBox to an object into your scene
|
|
6
|
+
*
|
|
7
|
+
* @link [Example on needle.run](https://viewbox-demo-z23hmxbz2gkayo-z1nyzm6.needle.run/)
|
|
8
|
+
* @link [Scrollytelling Demo using animated Viewbox](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
|
|
9
|
+
* @link [Example on Stackblitz](https://stackblitz.com/edit/needle-engine-view-box-example)
|
|
10
|
+
*
|
|
11
|
+
* @example Add a Viewbox component to an object in your scene
|
|
12
|
+
* ```ts
|
|
13
|
+
const viewBox = new Object3D();
|
|
14
|
+
viewBox.scale.set(0, 0, 0);
|
|
15
|
+
viewBox.addComponent(ViewBox, { debug: true });
|
|
16
|
+
scene.add(viewBox);
|
|
17
|
+
* ```
|
|
18
|
+
|
|
19
|
+
* @category Camera
|
|
20
|
+
* @group Components
|
|
21
|
+
* @component
|
|
22
|
+
*/
|
|
23
|
+
export declare class ViewBox extends Behaviour {
|
|
24
|
+
static readonly instances: ViewBox[];
|
|
25
|
+
/**
|
|
26
|
+
* The reference field of view is used to calculate the box size. This should usually be the same as your camera's fov.
|
|
27
|
+
* @default -1 (meaning it will use the camera fov on the first frame)
|
|
28
|
+
*/
|
|
29
|
+
referenceFieldOfView: number;
|
|
30
|
+
/**
|
|
31
|
+
* Enable debug logs and rendering for this component instance
|
|
32
|
+
*/
|
|
33
|
+
debug: boolean;
|
|
34
|
+
onEnable(): void;
|
|
35
|
+
onDisable(): void;
|
|
36
|
+
private removeUpdateCallback;
|
|
37
|
+
private static readonly _tempProjectionMatrix;
|
|
38
|
+
private static readonly _tempProjectionMatrixInverse;
|
|
39
|
+
private internalUpdate;
|
|
40
|
+
/**
|
|
41
|
+
* Cover fit
|
|
42
|
+
*/
|
|
43
|
+
private fit;
|
|
44
|
+
private projectBoxIntoCamera;
|
|
45
|
+
private _projectedBoxElement;
|
|
46
|
+
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var ViewBox_1;
|
|
8
|
+
import { Matrix4, PerspectiveCamera } from "three";
|
|
9
|
+
import { isDevEnvironment } from "../../engine/debug/debug.js";
|
|
10
|
+
import { Gizmos } from "../../engine/engine_gizmos.js";
|
|
11
|
+
import { serializable } from "../../engine/engine_serialization_decorator.js";
|
|
12
|
+
import { getTempVector } from "../../engine/engine_three_utils.js";
|
|
13
|
+
import { registerType } from "../../engine/engine_typestore.js";
|
|
14
|
+
import { getParam } from "../../engine/engine_utils.js";
|
|
15
|
+
import { RGBAColor } from "../../engine/js-extensions/RGBAColor.js";
|
|
16
|
+
import { Behaviour } from "../Component.js";
|
|
17
|
+
const debugParam = getParam("debugviewbox");
|
|
18
|
+
const disabledGizmoColor = new RGBAColor(.5, .5, .5, .5);
|
|
19
|
+
/**
|
|
20
|
+
* This component can be used to automatically fit a certain box area into the camera view - no matter your screen size or aspect ratio.
|
|
21
|
+
*
|
|
22
|
+
* Add the ViewBox to an object into your scene
|
|
23
|
+
*
|
|
24
|
+
* @link [Example on needle.run](https://viewbox-demo-z23hmxbz2gkayo-z1nyzm6.needle.run/)
|
|
25
|
+
* @link [Scrollytelling Demo using animated Viewbox](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
|
|
26
|
+
* @link [Example on Stackblitz](https://stackblitz.com/edit/needle-engine-view-box-example)
|
|
27
|
+
*
|
|
28
|
+
* @example Add a Viewbox component to an object in your scene
|
|
29
|
+
* ```ts
|
|
30
|
+
const viewBox = new Object3D();
|
|
31
|
+
viewBox.scale.set(0, 0, 0);
|
|
32
|
+
viewBox.addComponent(ViewBox, { debug: true });
|
|
33
|
+
scene.add(viewBox);
|
|
34
|
+
* ```
|
|
35
|
+
|
|
36
|
+
* @category Camera
|
|
37
|
+
* @group Components
|
|
38
|
+
* @component
|
|
39
|
+
*/
|
|
40
|
+
let ViewBox = ViewBox_1 = class ViewBox extends Behaviour {
|
|
41
|
+
static instances = [];
|
|
42
|
+
/**
|
|
43
|
+
* The reference field of view is used to calculate the box size. This should usually be the same as your camera's fov.
|
|
44
|
+
* @default -1 (meaning it will use the camera fov on the first frame)
|
|
45
|
+
*/
|
|
46
|
+
referenceFieldOfView = -1;
|
|
47
|
+
/**
|
|
48
|
+
* Enable debug logs and rendering for this component instance
|
|
49
|
+
*/
|
|
50
|
+
debug = false;
|
|
51
|
+
onEnable() {
|
|
52
|
+
if (debugParam || this.debug || isDevEnvironment())
|
|
53
|
+
console.debug("[ViewBox] Using camera fov:", this.referenceFieldOfView);
|
|
54
|
+
// register instance
|
|
55
|
+
ViewBox_1.instances.push(this);
|
|
56
|
+
this.removeUpdateCallback();
|
|
57
|
+
this.context.pre_render_callbacks.push(this.internalUpdate);
|
|
58
|
+
}
|
|
59
|
+
onDisable() {
|
|
60
|
+
if (debugParam || this.debug)
|
|
61
|
+
console.debug("[ViewBox] Disabled");
|
|
62
|
+
// unregister instance
|
|
63
|
+
const idx = ViewBox_1.instances.indexOf(this);
|
|
64
|
+
if (idx !== -1)
|
|
65
|
+
ViewBox_1.instances.splice(idx, 1);
|
|
66
|
+
this._projectedBoxElement?.remove();
|
|
67
|
+
this.removeUpdateCallback();
|
|
68
|
+
}
|
|
69
|
+
removeUpdateCallback() {
|
|
70
|
+
// remove prerender callback
|
|
71
|
+
const cbIdx = this.context.pre_render_callbacks.indexOf(this.internalUpdate);
|
|
72
|
+
if (cbIdx !== -1)
|
|
73
|
+
this.context.pre_render_callbacks.splice(cbIdx, 1);
|
|
74
|
+
}
|
|
75
|
+
static _tempProjectionMatrix = new Matrix4();
|
|
76
|
+
static _tempProjectionMatrixInverse = new Matrix4();
|
|
77
|
+
internalUpdate = () => {
|
|
78
|
+
if (this.context.isInXR)
|
|
79
|
+
return;
|
|
80
|
+
if (this.destroyed || !this.activeAndEnabled)
|
|
81
|
+
return;
|
|
82
|
+
const isActive = ViewBox_1.instances[ViewBox_1.instances.length - 1] === this;
|
|
83
|
+
if (!isActive) {
|
|
84
|
+
if (debugParam || this.debug) {
|
|
85
|
+
Gizmos.DrawWireBox(this.gameObject.worldPosition, this.gameObject.worldScale, disabledGizmoColor);
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (debugParam || this.debug)
|
|
90
|
+
Gizmos.DrawWireBox(this.gameObject.worldPosition, this.gameObject.worldScale, 0xdddd00, 0, true, this.gameObject.worldQuaternion);
|
|
91
|
+
// calculate box size to fit the camera frustrum size at the current position (just scale)
|
|
92
|
+
const camera = this.context.mainCamera;
|
|
93
|
+
if (!camera)
|
|
94
|
+
return;
|
|
95
|
+
if (!(camera instanceof PerspectiveCamera)) {
|
|
96
|
+
// TODO: support orthographic camera
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (this.referenceFieldOfView === undefined || this.referenceFieldOfView === -1) {
|
|
100
|
+
this.referenceFieldOfView = camera.fov;
|
|
101
|
+
console.debug("[ViewBox] No referenceFieldOfView set, using camera fov:", this.referenceFieldOfView);
|
|
102
|
+
}
|
|
103
|
+
if (this.referenceFieldOfView === undefined || this.referenceFieldOfView <= 0) {
|
|
104
|
+
if (debugParam || this.debug)
|
|
105
|
+
console.warn("[ViewBox] No valid referenceFieldOfView set, cannot adjust box size:", this.referenceFieldOfView);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const domWidth = this.context.domWidth;
|
|
109
|
+
const domHeight = this.context.domHeight;
|
|
110
|
+
let rectWidth = domWidth;
|
|
111
|
+
let rectHeight = domHeight;
|
|
112
|
+
let diffWidth = 1;
|
|
113
|
+
let diffHeight = 1;
|
|
114
|
+
// use focus rect if available
|
|
115
|
+
const focusRectSize = this.context.focusRectSize;
|
|
116
|
+
if (focusRectSize) {
|
|
117
|
+
rectWidth = focusRectSize.width;
|
|
118
|
+
rectHeight = focusRectSize.height;
|
|
119
|
+
diffWidth = domWidth / rectWidth;
|
|
120
|
+
diffHeight = domHeight / rectHeight;
|
|
121
|
+
}
|
|
122
|
+
// Copy the projection matrix and restore values so we can reset it later
|
|
123
|
+
ViewBox_1._tempProjectionMatrix.copy(camera.projectionMatrix);
|
|
124
|
+
ViewBox_1._tempProjectionMatrixInverse.copy(camera.projectionMatrixInverse);
|
|
125
|
+
const view = camera.view;
|
|
126
|
+
const zoom = camera.zoom;
|
|
127
|
+
const aspect = camera.aspect;
|
|
128
|
+
const fov = camera.fov;
|
|
129
|
+
// Set values to default so we can calculate the box size correctly
|
|
130
|
+
camera.view = null;
|
|
131
|
+
camera.zoom = 1;
|
|
132
|
+
camera.fov = this.referenceFieldOfView;
|
|
133
|
+
camera.updateProjectionMatrix();
|
|
134
|
+
const boxPosition = this.gameObject.worldPosition;
|
|
135
|
+
const boxScale = this.gameObject.worldScale;
|
|
136
|
+
const cameraPosition = camera.worldPosition;
|
|
137
|
+
const distance = cameraPosition.distanceTo(boxPosition);
|
|
138
|
+
// #region camera fixes
|
|
139
|
+
// If the camera is inside the box, move it out
|
|
140
|
+
const boxSizeMax = Math.max(boxScale.x, boxScale.y, boxScale.z);
|
|
141
|
+
const direction = getTempVector(cameraPosition).sub(boxPosition);
|
|
142
|
+
if (distance < boxSizeMax) {
|
|
143
|
+
// move camera out of bounds
|
|
144
|
+
if (this.debug || debugParam)
|
|
145
|
+
console.warn("[ViewBox] Moving camera out of bounds", distance, "<", boxSizeMax);
|
|
146
|
+
const positionDirection = getTempVector(direction);
|
|
147
|
+
positionDirection.y *= .00000001; // stay on horizontal plane mostly
|
|
148
|
+
positionDirection.normalize();
|
|
149
|
+
const lengthToMove = (boxSizeMax - distance);
|
|
150
|
+
const newPosition = cameraPosition.add(positionDirection.multiplyScalar(lengthToMove));
|
|
151
|
+
camera.worldPosition = newPosition.lerp(cameraPosition, 1 - this.context.time.deltaTime);
|
|
152
|
+
}
|
|
153
|
+
// Ensure the camera looks at the ViewBox
|
|
154
|
+
// TOOD: smooth lookat over multiple frames if we have multiple viewboxes
|
|
155
|
+
// const dot = direction.normalize().dot(camera.worldForward);
|
|
156
|
+
// if (dot < .9) {
|
|
157
|
+
// console.log(dot);
|
|
158
|
+
// const targetRotation = direction;
|
|
159
|
+
// const rotation = getTempQuaternion();
|
|
160
|
+
// rotation.setFromUnitVectors(camera.worldForward.multiplyScalar(-1), targetRotation);
|
|
161
|
+
// camera.worldQuaternion = rotation;
|
|
162
|
+
// camera.updateMatrixWorld();
|
|
163
|
+
// }
|
|
164
|
+
const boxPositionInCameraSpace = getTempVector(boxPosition);
|
|
165
|
+
camera.worldToLocal(boxPositionInCameraSpace);
|
|
166
|
+
camera.lookAt(boxPosition);
|
|
167
|
+
camera.updateMatrixWorld();
|
|
168
|
+
// #region calculate fit
|
|
169
|
+
const vFOV = this.referenceFieldOfView * Math.PI / 180; // convert vertical fov to radians
|
|
170
|
+
const height = 2 * Math.tan(vFOV / 2) * distance; // visible height
|
|
171
|
+
const width = height * camera.aspect; // visible width
|
|
172
|
+
const projectedBox = this.projectBoxIntoCamera(camera, 1);
|
|
173
|
+
// return
|
|
174
|
+
const boxWidth = (projectedBox.maxX - projectedBox.minX);
|
|
175
|
+
const boxHeight = (projectedBox.maxY - projectedBox.minY);
|
|
176
|
+
const scale = this.fit(boxWidth * camera.aspect, boxHeight, width / diffWidth, height / diffHeight);
|
|
177
|
+
// console.log({ scale, width, height, boxWidth: boxWidth * camera.aspect, boxHeight, diffWidth, diffHeight, aspect: camera.aspect, distance })
|
|
178
|
+
// this.context.focusRectSettings.zoom = 1.39;
|
|
179
|
+
// if (!this.context.focusRect) this.context.setCameraFocusRect(this.context.domElement);
|
|
180
|
+
// return
|
|
181
|
+
const vec = getTempVector(boxPosition);
|
|
182
|
+
vec.project(camera);
|
|
183
|
+
this.context.focusRectSettings.offsetX = vec.x;
|
|
184
|
+
this.context.focusRectSettings.offsetY = vec.y;
|
|
185
|
+
this.context.focusRectSettings.zoom = scale / (height * .5);
|
|
186
|
+
// if we don't have a focus rect yet, set it to the dom element
|
|
187
|
+
if (!this.context.focusRect)
|
|
188
|
+
this.context.setCameraFocusRect(this.context.domElement);
|
|
189
|
+
// Reset values
|
|
190
|
+
camera.view = view;
|
|
191
|
+
camera.zoom = zoom;
|
|
192
|
+
camera.aspect = aspect;
|
|
193
|
+
camera.fov = fov;
|
|
194
|
+
camera.projectionMatrix.copy(ViewBox_1._tempProjectionMatrix);
|
|
195
|
+
camera.projectionMatrixInverse.copy(ViewBox_1._tempProjectionMatrixInverse);
|
|
196
|
+
// BACKLOG: some code for box scale of an object (different component)
|
|
197
|
+
// this.gameObject.worldScale = getTempVector(width, height, worldscale.z);
|
|
198
|
+
// this.gameObject.scale.multiplyScalar(.98)
|
|
199
|
+
// const minscale = Math.min(width, height);
|
|
200
|
+
// console.log(width, height);
|
|
201
|
+
// this.gameObject.worldScale = getTempVector(scale, scale, scale);
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Cover fit
|
|
205
|
+
*/
|
|
206
|
+
fit(width1, height1, width2, height2) {
|
|
207
|
+
const scaleX = width2 / width1;
|
|
208
|
+
const scaleY = height2 / height1;
|
|
209
|
+
return Math.min(scaleX, scaleY);
|
|
210
|
+
}
|
|
211
|
+
projectBoxIntoCamera(camera, _factor) {
|
|
212
|
+
const factor = .5 * _factor;
|
|
213
|
+
const corners = [
|
|
214
|
+
getTempVector(-factor, -factor, -factor),
|
|
215
|
+
getTempVector(factor, -factor, -factor),
|
|
216
|
+
getTempVector(-factor, factor, -factor),
|
|
217
|
+
getTempVector(factor, factor, -factor),
|
|
218
|
+
getTempVector(-factor, -factor, factor),
|
|
219
|
+
getTempVector(factor, -factor, factor),
|
|
220
|
+
getTempVector(-factor, factor, factor),
|
|
221
|
+
getTempVector(factor, factor, factor),
|
|
222
|
+
];
|
|
223
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
224
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
225
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
226
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
227
|
+
for (let i = 0; i < corners.length; i++) {
|
|
228
|
+
const c = corners[i];
|
|
229
|
+
c.applyMatrix4(this.gameObject.matrixWorld);
|
|
230
|
+
c.project(camera);
|
|
231
|
+
if (c.x < minX)
|
|
232
|
+
minX = c.x;
|
|
233
|
+
if (c.x > maxX)
|
|
234
|
+
maxX = c.x;
|
|
235
|
+
if (c.y < minY)
|
|
236
|
+
minY = c.y;
|
|
237
|
+
if (c.y > maxY)
|
|
238
|
+
maxY = c.y;
|
|
239
|
+
}
|
|
240
|
+
if (debugParam) {
|
|
241
|
+
if (!this._projectedBoxElement) {
|
|
242
|
+
this._projectedBoxElement = document.createElement("div");
|
|
243
|
+
}
|
|
244
|
+
if (this._projectedBoxElement.parentElement !== this.context.domElement)
|
|
245
|
+
this.context.domElement.appendChild(this._projectedBoxElement);
|
|
246
|
+
this._projectedBoxElement.style.position = "fixed";
|
|
247
|
+
// dotted but with larger gaps
|
|
248
|
+
this._projectedBoxElement.style.outline = "2px dashed rgba(255,0,0,.5)";
|
|
249
|
+
this._projectedBoxElement.style.left = ((minX * .5 + .5) * this.context.domWidth) + "px";
|
|
250
|
+
this._projectedBoxElement.style.top = ((-maxY * .5 + .5) * this.context.domHeight) + "px";
|
|
251
|
+
this._projectedBoxElement.style.width = ((maxX - minX) * .5 * this.context.domWidth) + "px";
|
|
252
|
+
this._projectedBoxElement.style.height = ((maxY - minY) * .5 * this.context.domHeight) + "px";
|
|
253
|
+
this._projectedBoxElement.style.pointerEvents = "none";
|
|
254
|
+
this._projectedBoxElement.style.zIndex = "1000";
|
|
255
|
+
}
|
|
256
|
+
return { minX, maxX, minY, maxY };
|
|
257
|
+
}
|
|
258
|
+
_projectedBoxElement = null;
|
|
259
|
+
};
|
|
260
|
+
__decorate([
|
|
261
|
+
serializable()
|
|
262
|
+
], ViewBox.prototype, "referenceFieldOfView", void 0);
|
|
263
|
+
__decorate([
|
|
264
|
+
serializable()
|
|
265
|
+
], ViewBox.prototype, "debug", void 0);
|
|
266
|
+
ViewBox = ViewBox_1 = __decorate([
|
|
267
|
+
registerType
|
|
268
|
+
], ViewBox);
|
|
269
|
+
export { ViewBox };
|
|
270
|
+
//# sourceMappingURL=ViewBox.js.map
|