@needle-tools/engine 4.9.3 → 4.10.0-beta

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 (110) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/components.needle.json +1 -1
  3. package/dist/{gltf-progressive-DhE1A6hX.min.js → gltf-progressive-CoZbSfPR.min.js} +1 -1
  4. package/dist/{gltf-progressive-egsMzRdv.js → gltf-progressive-DUR9TuAH.js} +3 -3
  5. package/dist/{gltf-progressive-DWiyqrwB.umd.cjs → gltf-progressive-Iy7aSAPk.umd.cjs} +1 -1
  6. package/dist/{needle-engine.bundle-C7LSzO5L.umd.cjs → needle-engine.bundle-42AmEGfk.umd.cjs} +160 -137
  7. package/dist/needle-engine.bundle-C6zhyLF5.min.js +1639 -0
  8. package/dist/{needle-engine.bundle-BAsxNKpA.js → needle-engine.bundle-Dj6faVbC.js} +7665 -7380
  9. package/dist/needle-engine.js +447 -444
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/dist/{postprocessing-BZOSD1ln.min.js → postprocessing-BHMVuZQ1.min.js} +1 -1
  13. package/dist/{postprocessing-Bb5StX0o.umd.cjs → postprocessing-BsnRNRRS.umd.cjs} +1 -1
  14. package/dist/{postprocessing-BzFF7i-7.js → postprocessing-DQ2pynXW.js} +2 -2
  15. package/dist/{three-BK56xWDs.umd.cjs → three-B-jwTHao.umd.cjs} +11 -11
  16. package/dist/{three-CsHK73Zc.js → three-CJSAehtG.js} +1 -0
  17. package/dist/{three-examples-Bph291U2.min.js → three-examples-BivkhnvN.min.js} +1 -1
  18. package/dist/{three-examples-C9WfZu-X.umd.cjs → three-examples-Deqc1bNw.umd.cjs} +1 -1
  19. package/dist/{three-examples-BvMpKSun.js → three-examples-Doq0rvFU.js} +1 -1
  20. package/dist/{three-mesh-ui-CN6aRT7i.js → three-mesh-ui-CktOi6oI.js} +1 -1
  21. package/dist/{three-mesh-ui-DnxkZWNA.umd.cjs → three-mesh-ui-CsHwj9cJ.umd.cjs} +1 -1
  22. package/dist/{three-mesh-ui-n_qS2BM-.min.js → three-mesh-ui-DhYXcXZe.min.js} +1 -1
  23. package/dist/{three-TNFQHSFa.min.js → three-qw28ZtTy.min.js} +10 -10
  24. package/dist/{vendor-BtJpSuCj.umd.cjs → vendor-D0Yvltn9.umd.cjs} +1 -1
  25. package/dist/{vendor-k9i6CeGi.js → vendor-DU8tJyl_.js} +1 -1
  26. package/dist/{vendor-XJ9xiwrv.min.js → vendor-JyrX4DVM.min.js} +1 -1
  27. package/lib/engine/api.d.ts +1 -0
  28. package/lib/engine/api.js +1 -0
  29. package/lib/engine/api.js.map +1 -1
  30. package/lib/engine/codegen/register_types.js +4 -0
  31. package/lib/engine/codegen/register_types.js.map +1 -1
  32. package/lib/engine/engine_animation.d.ts +21 -1
  33. package/lib/engine/engine_animation.js +32 -1
  34. package/lib/engine/engine_animation.js.map +1 -1
  35. package/lib/engine/engine_camera.fit.d.ts +68 -0
  36. package/lib/engine/engine_camera.fit.js +193 -0
  37. package/lib/engine/engine_camera.fit.js.map +1 -0
  38. package/lib/engine/engine_gizmos.d.ts +2 -2
  39. package/lib/engine/engine_gizmos.js +2 -2
  40. package/lib/engine/engine_physics.js +6 -3
  41. package/lib/engine/engine_physics.js.map +1 -1
  42. package/lib/engine/webcomponents/needle-engine.d.ts +1 -0
  43. package/lib/engine/webcomponents/needle-engine.js +6 -0
  44. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  45. package/lib/engine/webcomponents/needle-engine.loading.js +59 -23
  46. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  47. package/lib/engine-components/AnimatorController.js +16 -0
  48. package/lib/engine-components/AnimatorController.js.map +1 -1
  49. package/lib/engine-components/CameraUtils.js +8 -9
  50. package/lib/engine-components/CameraUtils.js.map +1 -1
  51. package/lib/engine-components/OrbitControls.d.ts +4 -47
  52. package/lib/engine-components/OrbitControls.js +30 -178
  53. package/lib/engine-components/OrbitControls.js.map +1 -1
  54. package/lib/engine-components/Renderer.d.ts +2 -2
  55. package/lib/engine-components/Renderer.js +6 -4
  56. package/lib/engine-components/Renderer.js.map +1 -1
  57. package/lib/engine-components/api.d.ts +0 -1
  58. package/lib/engine-components/api.js.map +1 -1
  59. package/lib/engine-components/codegen/components.d.ts +2 -0
  60. package/lib/engine-components/codegen/components.js +2 -0
  61. package/lib/engine-components/codegen/components.js.map +1 -1
  62. package/lib/engine-components/timeline/PlayableDirector.d.ts +28 -6
  63. package/lib/engine-components/timeline/PlayableDirector.js +60 -26
  64. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  65. package/lib/engine-components/timeline/TimelineModels.d.ts +3 -0
  66. package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
  67. package/lib/engine-components/timeline/TimelineTracks.d.ts +7 -0
  68. package/lib/engine-components/timeline/TimelineTracks.js +19 -0
  69. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  70. package/lib/engine-components/web/Clickthrough.d.ts +3 -0
  71. package/lib/engine-components/web/Clickthrough.js +3 -0
  72. package/lib/engine-components/web/Clickthrough.js.map +1 -1
  73. package/lib/engine-components/web/CursorFollow.d.ts +3 -0
  74. package/lib/engine-components/web/CursorFollow.js +3 -0
  75. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  76. package/lib/engine-components/web/HoverAnimation.d.ts +44 -0
  77. package/lib/engine-components/web/HoverAnimation.js +105 -0
  78. package/lib/engine-components/web/HoverAnimation.js.map +1 -0
  79. package/lib/engine-components/web/ScrollFollow.d.ts +18 -4
  80. package/lib/engine-components/web/ScrollFollow.js +143 -25
  81. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  82. package/lib/engine-components/web/index.d.ts +1 -0
  83. package/lib/engine-components/web/index.js +1 -0
  84. package/lib/engine-components/web/index.js.map +1 -1
  85. package/package.json +1 -1
  86. package/plugins/vite/alias.js +5 -3
  87. package/plugins/vite/poster-client.js +22 -21
  88. package/src/engine/api.ts +2 -1
  89. package/src/engine/codegen/register_types.ts +4 -0
  90. package/src/engine/engine_animation.ts +69 -1
  91. package/src/engine/engine_camera.fit.ts +288 -0
  92. package/src/engine/engine_gizmos.ts +2 -2
  93. package/src/engine/engine_physics.ts +6 -3
  94. package/src/engine/webcomponents/needle-engine.loading.ts +63 -24
  95. package/src/engine/webcomponents/needle-engine.ts +6 -1
  96. package/src/engine-components/AnimatorController.ts +21 -2
  97. package/src/engine-components/CameraUtils.ts +8 -9
  98. package/src/engine-components/OrbitControls.ts +30 -239
  99. package/src/engine-components/Renderer.ts +6 -4
  100. package/src/engine-components/api.ts +0 -1
  101. package/src/engine-components/codegen/components.ts +2 -0
  102. package/src/engine-components/timeline/PlayableDirector.ts +79 -34
  103. package/src/engine-components/timeline/TimelineModels.ts +3 -0
  104. package/src/engine-components/timeline/TimelineTracks.ts +22 -0
  105. package/src/engine-components/web/Clickthrough.ts +3 -0
  106. package/src/engine-components/web/CursorFollow.ts +3 -0
  107. package/src/engine-components/web/HoverAnimation.ts +99 -0
  108. package/src/engine-components/web/ScrollFollow.ts +181 -24
  109. package/src/engine-components/web/index.ts +1 -0
  110. package/dist/needle-engine.bundle-ugr1bBtk.min.js +0 -1616
@@ -9,6 +9,9 @@ import { getTempVector } from "../../engine/engine_three_utils.js";
9
9
  import { Behaviour } from "../Component.js";
10
10
  /**
11
11
  * The CursorFollow component makes the object follow the cursor (or touch) position on screen.
12
+ * @category Web
13
+ * @group Components
14
+ * @component
12
15
  */
13
16
  export class CursorFollow extends Behaviour {
14
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CursorFollow.js","sourceRoot":"","sources":["../../../src/engine-components/web/CursorFollow.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IAEvC;;;OAGG;IAEH,OAAO,GAAW,CAAC,CAAC;IAEpB;;;OAGG;IAEH,YAAY,GAAY,IAAI,CAAC;IAE7B,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC;IAEO,SAAS,GAAW,CAAC,CAAC,CAAC;IAE/B,cAAc;QACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;YAC5C,OAAO;SACV;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACrG,CAAC;IAED,gBAAgB;IAChB,MAAM;QACF,8DAA8D;QAC9D,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,yEAAyE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;QAE5C,iDAAiD;QACjD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5E,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC;QAE7C,oDAAoD;QACpD,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC;SACvC;aACI;YACD,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,WAAW,CAAC;SAC/C;IAEL,CAAC;CAEJ;AAjDG;IADC,YAAY,EAAE;6CACK;AAOpB;IADC,YAAY,EAAE;kDACc"}
1
+ {"version":3,"file":"CursorFollow.js","sourceRoot":"","sources":["../../../src/engine-components/web/CursorFollow.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IAEvC;;;OAGG;IAEH,OAAO,GAAW,CAAC,CAAC;IAEpB;;;OAGG;IAEH,YAAY,GAAY,IAAI,CAAC;IAE7B,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC;IAEO,SAAS,GAAW,CAAC,CAAC,CAAC;IAE/B,cAAc;QACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;YAC5C,OAAO;SACV;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACrG,CAAC;IAED,gBAAgB;IAChB,MAAM;QACF,8DAA8D;QAC9D,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,yEAAyE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;QAE5C,iDAAiD;QACjD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5E,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC;QAE7C,oDAAoD;QACpD,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC;SACvC;aACI;YACD,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,WAAW,CAAC;SAC/C;IAEL,CAAC;CAEJ;AAjDG;IADC,YAAY,EAAE;6CACK;AAOpB;IADC,YAAY,EAAE;kDACc"}
@@ -0,0 +1,44 @@
1
+ import { AnimationClip } from "three";
2
+ import { ScaleClipType } from "../../engine/engine_animation.js";
3
+ import { Behaviour } from "../Component.js";
4
+ /**
5
+ * @category Web
6
+ * @group Components
7
+ * @component
8
+ */
9
+ export declare class HoverAnimation extends Behaviour {
10
+ /**
11
+ * Default hover animation type if no custom clip is provided.
12
+ * **Node**: This is only used if no custom hover animation clip is provided.
13
+ * @default "linear"
14
+ */
15
+ type: ScaleClipType;
16
+ /**
17
+ * Duration of the hover animation in seconds.
18
+ * **Node**: This is only used if no custom hover animation clip is provided.
19
+ * @default 0.1
20
+ */
21
+ duration: number;
22
+ /**
23
+ * Scale factor to apply when hovering.
24
+ * **Node**: This is only used if no custom hover animation clip is provided.
25
+ * @default 1.1
26
+ */
27
+ scaleFactor: number;
28
+ /**
29
+ * Animation clip to play when hovering. If null, a default scale-up animation is used.
30
+ */
31
+ hovered: AnimationClip | null;
32
+ /**
33
+ * Animation clip to play when not hovering. If null, an empty clip is used.
34
+ */
35
+ idle: AnimationClip | null;
36
+ private animation;
37
+ start(): void;
38
+ onEnable(): void;
39
+ onDisable(): void;
40
+ onPointerEnter(): void;
41
+ onPointerExit(): void;
42
+ private playIdle;
43
+ private playHover;
44
+ }
@@ -0,0 +1,105 @@
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
+ import { AnimationClip } from "three";
8
+ import { AnimationUtils } from "../../engine/engine_animation.js";
9
+ import { serializable } from "../../engine/engine_serialization_decorator.js";
10
+ import { registerType } from "../../engine/engine_typestore.js";
11
+ import { Animation } from "../Animation.js";
12
+ import { Behaviour } from "../Component.js";
13
+ /**
14
+ * @category Web
15
+ * @group Components
16
+ * @component
17
+ */
18
+ let HoverAnimation = class HoverAnimation extends Behaviour {
19
+ /**
20
+ * Default hover animation type if no custom clip is provided.
21
+ * **Node**: This is only used if no custom hover animation clip is provided.
22
+ * @default "linear"
23
+ */
24
+ type = "linear";
25
+ /**
26
+ * Duration of the hover animation in seconds.
27
+ * **Node**: This is only used if no custom hover animation clip is provided.
28
+ * @default 0.1
29
+ */
30
+ duration = 0.1;
31
+ /**
32
+ * Scale factor to apply when hovering.
33
+ * **Node**: This is only used if no custom hover animation clip is provided.
34
+ * @default 1.1
35
+ */
36
+ scaleFactor = 1.1;
37
+ /**
38
+ * Animation clip to play when hovering. If null, a default scale-up animation is used.
39
+ */
40
+ hovered = null;
41
+ /**
42
+ * Animation clip to play when not hovering. If null, an empty clip is used.
43
+ */
44
+ idle = null;
45
+ animation = null;
46
+ start() {
47
+ if (!this.idle)
48
+ this.idle = AnimationUtils.emptyClip();
49
+ if (!this.hovered) {
50
+ this.hovered = AnimationUtils.createScaleClip({
51
+ type: "linear",
52
+ duration: this.duration || 0.1,
53
+ scale: this.gameObject.scale,
54
+ scaleFactor: this.scaleFactor || 1.1,
55
+ });
56
+ }
57
+ this.animation ??= this.gameObject.addComponent(Animation);
58
+ this.animation.playAutomatically = false;
59
+ this.playIdle();
60
+ }
61
+ onEnable() {
62
+ if (this.animation)
63
+ this.animation.enabled = true;
64
+ this.playIdle();
65
+ }
66
+ onDisable() {
67
+ if (this.animation)
68
+ this.animation.enabled = false;
69
+ this.playIdle();
70
+ }
71
+ onPointerEnter() {
72
+ this.playHover();
73
+ }
74
+ onPointerExit() {
75
+ this.playIdle();
76
+ }
77
+ playIdle() {
78
+ if (this.idle)
79
+ this.animation?.play(this.idle, { exclusive: true, fadeDuration: .1, loop: true });
80
+ }
81
+ playHover() {
82
+ if (this.hovered)
83
+ this.animation?.play(this.hovered, { exclusive: true, fadeDuration: .1, loop: false, clampWhenFinished: true });
84
+ }
85
+ };
86
+ __decorate([
87
+ serializable()
88
+ ], HoverAnimation.prototype, "type", void 0);
89
+ __decorate([
90
+ serializable()
91
+ ], HoverAnimation.prototype, "duration", void 0);
92
+ __decorate([
93
+ serializable()
94
+ ], HoverAnimation.prototype, "scaleFactor", void 0);
95
+ __decorate([
96
+ serializable(AnimationClip)
97
+ ], HoverAnimation.prototype, "hovered", void 0);
98
+ __decorate([
99
+ serializable(AnimationClip)
100
+ ], HoverAnimation.prototype, "idle", void 0);
101
+ HoverAnimation = __decorate([
102
+ registerType
103
+ ], HoverAnimation);
104
+ export { HoverAnimation };
105
+ //# sourceMappingURL=HoverAnimation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HoverAnimation.js","sourceRoot":"","sources":["../../../src/engine-components/web/HoverAnimation.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;GAIG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,SAAS;IAEzC;;;;OAIG;IAEH,IAAI,GAAkB,QAAQ,CAAC;IAE/B;;;;OAIG;IAEH,QAAQ,GAAW,GAAG,CAAC;IAEvB;;;;OAIG;IAEH,WAAW,GAAW,GAAG,CAAC;IAG1B;;OAEG;IAEH,OAAO,GAAyB,IAAI,CAAC;IAErC;;OAEG;IAEH,IAAI,GAAyB,IAAI,CAAC;IAE1B,SAAS,GAAqB,IAAI,CAAC;IAE3C,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC;gBAC1C,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;gBAC9B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;gBAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG;aACvC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IACD,SAAS;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,cAAc;QACV,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,aAAa;QACT,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEO,QAAQ;QACZ,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC;IACO,SAAS;QACb,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACtI,CAAC;CAEJ,CAAA;AA1EG;IADC,YAAY,EAAE;4CACgB;AAQ/B;IADC,YAAY,EAAE;gDACQ;AAQvB;IADC,YAAY,EAAE;mDACW;AAO1B;IADC,YAAY,CAAC,aAAa,CAAC;+CACS;AAMrC;IADC,YAAY,CAAC,aAAa,CAAC;4CACM;AArCzB,cAAc;IAD1B,YAAY;GACA,cAAc,CAkF1B;SAlFY,cAAc"}
@@ -31,6 +31,10 @@ type ScrollFollowEvent = {
31
31
  * 2. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
32
32
  * 3. Assign the PlayableDirector component to the ScrollFollow's target property.
33
33
  * 4. The timeline will now scrub based on the scroll position of the page.
34
+ *
35
+ * @category Web
36
+ * @group Components
37
+ * @component
34
38
  */
35
39
  export declare class ScrollFollow extends Behaviour {
36
40
  /**
@@ -58,6 +62,7 @@ export declare class ScrollFollow extends Behaviour {
58
62
  */
59
63
  invert: boolean;
60
64
  /**
65
+ * **Experimental - might change in future updates**
61
66
  * If set, the scroll position will be read from the specified element instead of the window.
62
67
  * Use a CSS selector to specify the element, e.g. `#my-scrollable-div` or `.scroll-container`.
63
68
  * @default null
@@ -72,9 +77,13 @@ export declare class ScrollFollow extends Behaviour {
72
77
  * Current scroll value in "pages" (0 = top of page, 1 = bottom of page)
73
78
  */
74
79
  get currentValue(): number;
75
- private current_value;
76
- private target_value;
77
- private applied_value;
80
+ private _current_value;
81
+ private _target_value;
82
+ private _appliedValue;
83
+ private _scrollStart;
84
+ private _scrollEnd;
85
+ private _scrollValue;
86
+ private _scrollContainerHeight;
78
87
  /** @internal */
79
88
  onEnable(): void;
80
89
  /** @internal */
@@ -83,7 +92,12 @@ export declare class ScrollFollow extends Behaviour {
83
92
  lateUpdate(): void;
84
93
  private _lastSelectorValue;
85
94
  private _lastSelectorElement;
95
+ /** Top y */
96
+ private _rangeStartValue;
97
+ /** Bottom y */
98
+ private _rangeEndValue;
86
99
  private updateCurrentScrollValue;
87
- private static applyScroll;
100
+ private applyScroll;
101
+ private handleTimelineTarget;
88
102
  }
89
103
  export {};
@@ -8,6 +8,7 @@ import { Object3D } from "three";
8
8
  import { Mathf } from "../../engine/engine_math.js";
9
9
  import { serializable } from "../../engine/engine_serialization.js";
10
10
  import { getBoundingBox } from "../../engine/engine_three_utils.js";
11
+ import { getParam } from "../../engine/engine_utils.js";
11
12
  import { Animation } from "../Animation.js";
12
13
  import { Animator } from "../Animator.js";
13
14
  import { AudioSource } from "../AudioSource.js";
@@ -16,6 +17,7 @@ import { EventList } from "../EventList.js";
16
17
  import { Light } from "../Light.js";
17
18
  import { SplineWalker } from "../splines/SplineWalker.js";
18
19
  import { PlayableDirector } from "../timeline/PlayableDirector.js";
20
+ const debug = getParam("debugscroll");
19
21
  /**
20
22
  * The ScrollFollow component allows you to link the scroll position of the page (or a specific element) to one or more target objects.
21
23
  * This can be used to create scroll-based animations, audio playback, or other effects. For example you can link the scroll position to a timeline (PlayableDirector) to create scroll-based storytelling effects or to an Animator component to change the animation state based on scroll.
@@ -36,6 +38,10 @@ import { PlayableDirector } from "../timeline/PlayableDirector.js";
36
38
  * 2. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
37
39
  * 3. Assign the PlayableDirector component to the ScrollFollow's target property.
38
40
  * 4. The timeline will now scrub based on the scroll position of the page.
41
+ *
42
+ * @category Web
43
+ * @group Components
44
+ * @component
39
45
  */
40
46
  export class ScrollFollow extends Behaviour {
41
47
  /**
@@ -63,6 +69,7 @@ export class ScrollFollow extends Behaviour {
63
69
  */
64
70
  invert = false;
65
71
  /**
72
+ * **Experimental - might change in future updates**
66
73
  * If set, the scroll position will be read from the specified element instead of the window.
67
74
  * Use a CSS selector to specify the element, e.g. `#my-scrollable-div` or `.scroll-container`.
68
75
  * @default null
@@ -77,15 +84,19 @@ export class ScrollFollow extends Behaviour {
77
84
  * Current scroll value in "pages" (0 = top of page, 1 = bottom of page)
78
85
  */
79
86
  get currentValue() {
80
- return this.current_value;
87
+ return this._current_value;
81
88
  }
82
- current_value = 0;
83
- target_value = 0;
84
- applied_value = -1;
89
+ _current_value = 0;
90
+ _target_value = 0;
91
+ _appliedValue = -1;
92
+ _scrollStart = 0;
93
+ _scrollEnd = 0;
94
+ _scrollValue = 0;
95
+ _scrollContainerHeight = 0;
85
96
  /** @internal */
86
97
  onEnable() {
87
98
  window.addEventListener("wheel", this.updateCurrentScrollValue, { passive: true });
88
- this.applied_value = -1;
99
+ this._appliedValue = -1;
89
100
  }
90
101
  /** @internal */
91
102
  onDisable() {
@@ -94,21 +105,25 @@ export class ScrollFollow extends Behaviour {
94
105
  /** @internal */
95
106
  lateUpdate() {
96
107
  this.updateCurrentScrollValue();
97
- // apply damping if any
98
- if (this.damping > 0) {
99
- this.current_value = Mathf.lerp(this.current_value, this.target_value, this.context.time.deltaTime / this.damping);
100
- }
101
- else {
102
- this.current_value = this.target_value;
108
+ if (this._target_value >= 0) {
109
+ if (this.damping > 0) { // apply damping
110
+ this._current_value = Mathf.lerp(this._current_value, this._target_value, this.context.time.deltaTime / this.damping);
111
+ if (Math.abs(this._current_value - this._target_value) < 0.001) {
112
+ this._current_value = this._target_value;
113
+ }
114
+ }
115
+ else {
116
+ this._current_value = this._target_value;
117
+ }
103
118
  }
104
- if (this.current_value !== this.applied_value) {
105
- this.applied_value = this.current_value;
119
+ if (this._current_value !== this._appliedValue) {
120
+ this._appliedValue = this._current_value;
106
121
  let defaultPrevented = false;
107
122
  if (this.changed.listenerCount > 0) {
108
123
  // fire change event
109
124
  const event = {
110
125
  type: "change",
111
- value: this.current_value,
126
+ value: this._current_value,
112
127
  component: this,
113
128
  preventDefault: () => { event.defaultPrevented = true; },
114
129
  defaultPrevented: false,
@@ -118,19 +133,28 @@ export class ScrollFollow extends Behaviour {
118
133
  }
119
134
  // if not prevented apply scroll
120
135
  if (!defaultPrevented) {
121
- const value = this.invert ? 1 - this.current_value : this.current_value;
136
+ 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;
122
139
  // apply scroll to target(s)
123
140
  if (Array.isArray(this.target)) {
124
- this.target.forEach(t => t && ScrollFollow.applyScroll(t, value));
141
+ this.target.forEach(t => t && this.applyScroll(t, value));
125
142
  }
126
143
  else if (this.target) {
127
- ScrollFollow.applyScroll(this.target, value);
144
+ this.applyScroll(this.target, value);
145
+ }
146
+ if (debug && this.context.time.frame % 30 === 0) {
147
+ console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value * 100).toFixed(0)}%`);
128
148
  }
129
149
  }
130
150
  }
131
151
  }
132
152
  _lastSelectorValue = null;
133
153
  _lastSelectorElement = null;
154
+ /** Top y */
155
+ _rangeStartValue = 0;
156
+ /** Bottom y */
157
+ _rangeEndValue = 0;
134
158
  updateCurrentScrollValue = () => {
135
159
  switch (this.mode) {
136
160
  case "window":
@@ -141,25 +165,35 @@ export class ScrollFollow extends Behaviour {
141
165
  }
142
166
  if (this._lastSelectorElement) {
143
167
  const rect = this._lastSelectorElement.getBoundingClientRect();
144
- this.target_value = -rect.top / (rect.height - window.innerHeight);
145
- if (isNaN(this.target_value) || !isFinite(this.target_value))
146
- this.target_value = 0;
168
+ this._scrollStart = rect.top + window.scrollY;
169
+ this._scrollEnd = rect.height - window.innerHeight;
170
+ this._scrollValue = -rect.top;
171
+ this._target_value = -rect.top / (rect.height - window.innerHeight);
172
+ this._rangeStartValue = rect.top + window.scrollY;
173
+ this._rangeEndValue = this._rangeStartValue + rect.height - window.innerHeight;
174
+ this._scrollContainerHeight = rect.height;
147
175
  break;
148
176
  }
149
177
  }
150
178
  else {
151
- this.target_value = window.scrollY / (document.body.scrollHeight - window.innerHeight);
179
+ this._scrollStart = 0;
180
+ this._scrollEnd = window.document.body.scrollHeight - window.innerHeight;
181
+ this._scrollValue = window.scrollY;
182
+ this._target_value = this._scrollValue / (this._scrollEnd || 1);
183
+ this._rangeStartValue = 0;
184
+ this._rangeEndValue = document.body.scrollHeight;
185
+ this._scrollContainerHeight = window.innerHeight;
152
186
  }
153
- if (isNaN(this.target_value) || !isFinite(this.target_value))
154
- this.target_value = 0;
155
187
  break;
156
188
  }
189
+ if (isNaN(this._target_value) || !isFinite(this._target_value))
190
+ this._target_value = -1;
157
191
  };
158
- static applyScroll(target, value) {
192
+ applyScroll(target, value) {
159
193
  if (!target)
160
194
  return;
161
195
  if (target instanceof PlayableDirector) {
162
- target.time = value * target.duration;
196
+ this.handleTimelineTarget(target, value);
163
197
  if (!target.isPlaying)
164
198
  target.evaluate();
165
199
  }
@@ -200,6 +234,88 @@ export class ScrollFollow extends Behaviour {
200
234
  }
201
235
  }
202
236
  }
237
+ handleTimelineTarget(director, value) {
238
+ const duration = director.duration;
239
+ let scrollRegionStart = Infinity;
240
+ let scrollRegionEnd = 0;
241
+ markersArray.length = 0;
242
+ for (const marker of director.foreachMarker("ScrollMarker")) {
243
+ // Get marker elements from DOM
244
+ if (marker.selector?.length && (marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (!marker.element?.parentNode))) {
245
+ marker.needsUpdate = false;
246
+ try {
247
+ marker.element = document.querySelector(marker.selector) || null;
248
+ if (debug)
249
+ console.debug("ScrollMarker found on page", marker.element, marker.selector);
250
+ }
251
+ catch (error) {
252
+ marker.element = null;
253
+ console.error("ScrollMarker selector is not valid: " + marker.selector + "\n", error);
254
+ }
255
+ }
256
+ // skip markers without element (e.g. if the selector didn't return any element)
257
+ if (!marker.element)
258
+ continue;
259
+ markersArray.push(marker);
260
+ const top = marker.element.offsetTop;
261
+ const height = marker.element.offsetHeight;
262
+ const bottom = top + height;
263
+ if (top < scrollRegionStart) {
264
+ scrollRegionStart = top;
265
+ }
266
+ if (bottom > scrollRegionEnd) {
267
+ scrollRegionEnd = bottom;
268
+ }
269
+ }
270
+ const currentTop = this._scrollValue;
271
+ const currentBottom = currentTop + this._scrollContainerHeight;
272
+ weightsArray.length = 0;
273
+ let sum = 0;
274
+ let markerCount = 0;
275
+ for (const marker of markersArray) {
276
+ if (!marker.element)
277
+ continue;
278
+ const top = marker.element.offsetTop;
279
+ const height = marker.element.offsetHeight;
280
+ const bottom = top + height;
281
+ let overlap = 0;
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
+ }
298
+ markerCount += 1;
299
+ if (overlap > 0) {
300
+ weightsArray.push({ time: marker.time, weight: overlap });
301
+ sum += overlap;
302
+ }
303
+ }
304
+ if (weightsArray.length <= 0 && markerCount <= 0) {
305
+ director.time = value * duration;
306
+ }
307
+ else if (weightsArray.length > 0) {
308
+ // normalize and calculate weighted time
309
+ let time = weightsArray[0].time;
310
+ for (const o of weightsArray) {
311
+ const weight = o.weight / Math.max(0.00001, sum);
312
+ // lerp time based on weight
313
+ const diff = Math.abs(o.time - time);
314
+ time += diff * weight;
315
+ }
316
+ director.time = time;
317
+ }
318
+ }
203
319
  }
204
320
  __decorate([
205
321
  serializable([Behaviour, Object3D])
@@ -219,4 +335,6 @@ __decorate([
219
335
  __decorate([
220
336
  serializable(EventList)
221
337
  ], ScrollFollow.prototype, "changed", void 0);
338
+ const weightsArray = [];
339
+ const markersArray = [];
222
340
  //# 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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"}
@@ -1,3 +1,4 @@
1
1
  export * from "./Clickthrough.js";
2
2
  export * from "./CursorFollow.js";
3
+ export * from "./HoverAnimation.js";
3
4
  export * from "./ScrollFollow.js";
@@ -1,4 +1,5 @@
1
1
  export * from "./Clickthrough.js";
2
2
  export * from "./CursorFollow.js";
3
+ export * from "./HoverAnimation.js";
3
4
  export * from "./ScrollFollow.js";
4
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,mBAAmB,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.9.3",
3
+ "version": "4.10.0-beta",
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": {
@@ -113,12 +113,14 @@ export const needleViteAlias = (command, config, userSettings) => {
113
113
 
114
114
  // is needle engine a local package?
115
115
  // This will cause local changes to not be reflected anymore...
116
- const localEnginePath = path.resolve(projectDir, 'node_modules/', '@needle-tools/engine', 'node_modules');
116
+ const localEnginePath = path.resolve(projectDir, 'node_modules/', '@needle-tools/engine', 'node_modules', '.package-lock.json');
117
117
  if (existsSync(localEnginePath)) {
118
118
  config.optimizeDeps ??= {};
119
119
  config.optimizeDeps.exclude ??= [];
120
- config.optimizeDeps.exclude.push('@needle-tools/engine');
121
- log("[needle-alias] Detected local @needle-tools/engine package: will exclude it from optimization");
120
+ if (!config.optimizeDeps.include?.includes('@needle-tools/engine')) {
121
+ config.optimizeDeps.exclude.push('@needle-tools/engine');
122
+ log("[needle-alias] Detected local @needle-tools/engine package → will exclude it from optimization");
123
+ }
122
124
  }
123
125
 
124
126
 
@@ -10,32 +10,33 @@ async function generatePoster() {
10
10
  const height = 1080;
11
11
 
12
12
  return new Promise(res => {
13
- onStart(async context => {
13
+ /** @ts-ignore */
14
+ onStart(async (context) => {
14
15
 
15
16
  if (context.lodsManager.manager) {
16
17
  await context.lodsManager.manager.awaitLoading({ frames: 5, maxPromisesPerObject: 2, waitForFirstCapture: true });
17
18
  }
18
19
 
19
- const mimeType = "image/webp";
20
-
21
- // We're reading back as a blob here because that's async, and doesn't seem
22
- // to stress the GPU so much on memory-constrained devices.
23
- const blob = await screenshot2({ context, width, height, mimeType, type: "blob" });
24
-
25
- // We can only send a DataURL, so we need to convert it back here.
26
- const dataUrl = await new Promise((resolve, reject) => {
27
- const reader = new FileReader();
28
- reader.onload = function () {
29
- resolve(reader.result);
30
- };
31
- reader.onloadend = function () {
32
- resolve(null);
33
- };
34
- reader.readAsDataURL(blob);
35
- });
36
-
37
-
38
- res(dataUrl);
20
+ onStart(() => {
21
+ const mimeType = "image/webp";
22
+ // We're reading back as a blob here because that's async, and doesn't seem
23
+ // to stress the GPU so much on memory-constrained devices.
24
+ screenshot2({ context, width, height, mimeType, type: "blob" })
25
+ // @ts-ignore
26
+ .then(blob => {
27
+ const reader = new FileReader();
28
+ reader.onload = function () {
29
+ res(reader.result);
30
+ };
31
+ reader.onloadend = function () {
32
+ res(null);
33
+ };
34
+ reader.readAsDataURL(blob);
35
+
36
+ })
37
+
38
+
39
+ }, { once: true });
39
40
 
40
41
 
41
42
  }, { once: true });
package/src/engine/api.ts CHANGED
@@ -24,7 +24,8 @@ export * from "./engine_addressables.js";
24
24
  export { AnimationUtils } from "./engine_animation.js";
25
25
  export { Application } from "./engine_application.js";
26
26
  export * from "./engine_assetdatabase.js";
27
- export { getCameraController, setAutoFitEnabled, setCameraController, useForAutoFit } from "./engine_camera.js"
27
+ export * from "./engine_camera.fit.js";
28
+ export { getCameraController, setAutoFitEnabled, setCameraController, useForAutoFit } from "./engine_camera.js";
28
29
  export * from "./engine_components.js";
29
30
  export * from "./engine_components_internal.js";
30
31
  export * from "./engine_components_internal.js";