@needle-tools/engine 5.1.0-alpha.3 → 5.1.0-alpha.4
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 +39 -0
- package/SKILL.md +4 -1
- package/components.needle.json +1 -1
- package/dist/needle-engine.bundle-AjVIot3d.min.js +1733 -0
- package/dist/{needle-engine.bundle-DF01sSGQ.js → needle-engine.bundle-B7cqsI4c.js} +9149 -8867
- package/dist/{needle-engine.bundle-C-ixARur.umd.cjs → needle-engine.bundle-DQCuBTVp.umd.cjs} +154 -154
- package/dist/needle-engine.d.ts +754 -199
- package/dist/needle-engine.js +583 -584
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/api.d.ts +3 -0
- package/lib/engine/api.js +2 -0
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/codegen/register_types.js +2 -10
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/engine_context.js +2 -1
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_disposable.d.ts +172 -0
- package/lib/engine/engine_disposable.js +136 -0
- package/lib/engine/engine_disposable.js.map +1 -0
- package/lib/engine/engine_gameobject.d.ts +1 -10
- package/lib/engine/engine_gameobject.js +20 -118
- package/lib/engine/engine_gameobject.js.map +1 -1
- package/lib/engine/engine_gltf_builtin_components.js +7 -69
- package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
- package/lib/engine/engine_instantiate_resolve.d.ts +42 -0
- package/lib/engine/engine_instantiate_resolve.js +372 -0
- package/lib/engine/engine_instantiate_resolve.js.map +1 -0
- package/lib/engine/engine_mainloop_utils.js +2 -2
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine/engine_networking.d.ts +51 -37
- package/lib/engine/engine_networking.js +132 -82
- package/lib/engine/engine_networking.js.map +1 -1
- package/lib/engine/engine_networking.transport.websocket.d.ts +15 -0
- package/lib/engine/engine_networking.transport.websocket.js +38 -0
- package/lib/engine/engine_networking.transport.websocket.js.map +1 -0
- package/lib/engine/engine_networking_instantiate.js +2 -2
- package/lib/engine/engine_networking_instantiate.js.map +1 -1
- package/lib/engine/engine_networking_types.d.ts +39 -1
- package/lib/engine/engine_networking_types.js +7 -0
- package/lib/engine/engine_networking_types.js.map +1 -1
- package/lib/engine/engine_physics_rapier.d.ts +11 -3
- package/lib/engine/engine_physics_rapier.js +88 -25
- package/lib/engine/engine_physics_rapier.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.js +1 -5
- package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
- package/lib/engine/engine_serialization_core.d.ts +1 -0
- package/lib/engine/engine_serialization_core.js +7 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_types.d.ts +19 -11
- package/lib/engine/engine_types.js +1 -1
- package/lib/engine/engine_types.js.map +1 -1
- package/lib/engine/engine_util_decorator.js +7 -2
- package/lib/engine/engine_util_decorator.js.map +1 -1
- package/lib/engine/engine_utils.d.ts +1 -1
- package/lib/engine/engine_utils.js +19 -5
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine-components/Animator.d.ts +6 -0
- package/lib/engine-components/Animator.js +17 -12
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.builder.d.ts +113 -0
- package/lib/engine-components/AnimatorController.builder.js +195 -0
- package/lib/engine-components/AnimatorController.builder.js.map +1 -0
- package/lib/engine-components/AnimatorController.d.ts +2 -119
- package/lib/engine-components/AnimatorController.js +31 -232
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/Collider.d.ts +18 -9
- package/lib/engine-components/Collider.js +61 -14
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +72 -9
- package/lib/engine-components/Component.js +114 -10
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/DragControls.js +0 -7
- package/lib/engine-components/DragControls.js.map +1 -1
- package/lib/engine-components/EventList.d.ts +31 -9
- package/lib/engine-components/EventList.js +37 -76
- package/lib/engine-components/EventList.js.map +1 -1
- package/lib/engine-components/Joints.d.ts +4 -2
- package/lib/engine-components/Joints.js +19 -3
- package/lib/engine-components/Joints.js.map +1 -1
- package/lib/engine-components/Light.js +9 -1
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/RigidBody.d.ts +12 -4
- package/lib/engine-components/RigidBody.js +18 -4
- package/lib/engine-components/RigidBody.js.map +1 -1
- package/lib/engine-components/api.d.ts +1 -1
- package/lib/engine-components/api.js +1 -1
- package/lib/engine-components/api.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +3 -9
- package/lib/engine-components/codegen/components.js +3 -9
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/timeline/PlayableDirector.d.ts +16 -6
- package/lib/engine-components/timeline/PlayableDirector.js +70 -62
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/timeline/SignalAsset.d.ts +3 -1
- package/lib/engine-components/timeline/SignalAsset.js +1 -0
- package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
- package/lib/engine-components/timeline/TimelineBuilder.d.ts +247 -0
- package/lib/engine-components/timeline/TimelineBuilder.js +400 -0
- package/lib/engine-components/timeline/TimelineBuilder.js.map +1 -0
- package/lib/engine-components/timeline/TimelineModels.d.ts +2 -1
- package/lib/engine-components/timeline/TimelineModels.js +3 -0
- package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
- package/lib/engine-components/timeline/TimelineTracks.d.ts +23 -0
- package/lib/engine-components/timeline/TimelineTracks.js +71 -13
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/timeline/index.d.ts +2 -1
- package/lib/engine-components/timeline/index.js +2 -0
- package/lib/engine-components/timeline/index.js.map +1 -1
- package/package.json +2 -83
- package/plugins/common/license.js +5 -2
- package/plugins/common/worker.js +9 -4
- package/plugins/vite/dependencies.js +1 -11
- package/plugins/vite/dependency-watcher.js +2 -2
- package/plugins/vite/editor-connection.js +3 -3
- package/plugins/vite/reload.js +1 -1
- package/plugins/vite/server.js +2 -1
- package/src/engine/api.ts +4 -0
- package/src/engine/codegen/register_types.ts +2 -10
- package/src/engine/engine_context.ts +2 -1
- package/src/engine/engine_disposable.ts +214 -0
- package/src/engine/engine_gameobject.ts +52 -157
- package/src/engine/engine_gltf_builtin_components.ts +7 -76
- package/src/engine/engine_instantiate_resolve.ts +407 -0
- package/src/engine/engine_mainloop_utils.ts +2 -2
- package/src/engine/engine_networking.transport.websocket.ts +45 -0
- package/src/engine/engine_networking.ts +161 -137
- package/src/engine/engine_networking_instantiate.ts +2 -2
- package/src/engine/engine_networking_types.ts +41 -1
- package/src/engine/engine_physics_rapier.ts +82 -27
- package/src/engine/engine_serialization_builtin_serializer.ts +1 -6
- package/src/engine/engine_serialization_core.ts +9 -0
- package/src/engine/engine_types.ts +24 -15
- package/src/engine/engine_util_decorator.ts +7 -2
- package/src/engine/engine_utils.ts +16 -5
- package/src/engine-components/Animator.ts +18 -11
- package/src/engine-components/AnimatorController.builder.ts +261 -0
- package/src/engine-components/AnimatorController.ts +19 -291
- package/src/engine-components/Collider.ts +66 -18
- package/src/engine-components/Component.ts +118 -20
- package/src/engine-components/DragControls.ts +0 -9
- package/src/engine-components/EventList.ts +45 -83
- package/src/engine-components/Joints.ts +20 -4
- package/src/engine-components/Light.ts +10 -2
- package/src/engine-components/RigidBody.ts +18 -4
- package/src/engine-components/api.ts +1 -1
- package/src/engine-components/codegen/components.ts +3 -9
- package/src/engine-components/timeline/PlayableDirector.ts +67 -65
- package/src/engine-components/timeline/SignalAsset.ts +4 -1
- package/src/engine-components/timeline/TimelineBuilder.ts +564 -0
- package/src/engine-components/timeline/TimelineModels.ts +5 -1
- package/src/engine-components/timeline/TimelineTracks.ts +74 -13
- package/src/engine-components/timeline/index.ts +2 -1
- package/dist/needle-engine.bundle-CHmXdnE1.min.js +0 -1733
- package/lib/engine-components/AvatarLoader.d.ts +0 -80
- package/lib/engine-components/AvatarLoader.js +0 -232
- package/lib/engine-components/AvatarLoader.js.map +0 -1
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +0 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +0 -77
- package/lib/engine-components/avatar/AvatarBlink_Simple.js.map +0 -1
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +0 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +0 -69
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js.map +0 -1
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +0 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +0 -122
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +0 -1
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +0 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +0 -80
- package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +0 -1
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +0 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +0 -30
- package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +0 -1
- package/src/engine-components/AvatarLoader.ts +0 -264
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +0 -70
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +0 -64
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +0 -140
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +0 -84
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +0 -32
|
@@ -591,6 +591,20 @@ const muteAudioTracks = getParam("mutetimeline");
|
|
|
591
591
|
|
|
592
592
|
declare type AudioClipModel = Models.ClipModel & { _didTriggerPlay: boolean };
|
|
593
593
|
|
|
594
|
+
/**
|
|
595
|
+
* Handles audio playback for a timeline audio track.
|
|
596
|
+
*
|
|
597
|
+
* **Runtime mutation:** The track model is read fresh every frame during `evaluate()`.
|
|
598
|
+
* You can mutate `track.volume`, `clip.start`, `clip.end`, `clip.asset.volume` etc.
|
|
599
|
+
* at any time — changes take effect on the next frame without rebuilding the timeline.
|
|
600
|
+
*
|
|
601
|
+
* **Audio stopping:** Audio clips are automatically stopped when:
|
|
602
|
+
* - Timeline time moves outside a clip's `[start, end]` range (e.g. jumping or normal playback advancing past a clip)
|
|
603
|
+
* - The track is muted (via `muted = true`)
|
|
604
|
+
* - The director is stopped (`director.stop()`)
|
|
605
|
+
* - The director is paused (`director.pause()`)
|
|
606
|
+
* - The director is disabled or destroyed
|
|
607
|
+
*/
|
|
594
608
|
export class AudioTrackHandler extends TrackHandler {
|
|
595
609
|
|
|
596
610
|
models: Array<AudioClipModel> = [];
|
|
@@ -600,6 +614,10 @@ export class AudioTrackHandler extends TrackHandler {
|
|
|
600
614
|
lastTime: number = 0;
|
|
601
615
|
audioSource?: AudioSource;
|
|
602
616
|
|
|
617
|
+
/** Track-level volume multiplier (0–1). Applied on top of per-clip volume each frame. */
|
|
618
|
+
get volume(): number { return this.track.volume ?? 1; }
|
|
619
|
+
set volume(val: number) { this.track.volume = val; }
|
|
620
|
+
|
|
603
621
|
private _audioLoader: AudioLoader | null = null;
|
|
604
622
|
|
|
605
623
|
private getAudioFilePath(path: string) {
|
|
@@ -863,21 +881,29 @@ export class SignalTrackHandler extends TrackHandler {
|
|
|
863
881
|
didTrigger: boolean[] = [];
|
|
864
882
|
receivers: Array<SignalReceiver | null> = [];
|
|
865
883
|
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
884
|
+
private _lastTime: number = -1;
|
|
885
|
+
|
|
886
|
+
onEnable() {
|
|
887
|
+
// Reset state so signals fire fresh on replay
|
|
888
|
+
this._lastTime = -1;
|
|
889
|
+
for (let i = 0; i < this.didTrigger.length; i++) {
|
|
890
|
+
this.didTrigger[i] = false;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
872
893
|
|
|
873
|
-
|
|
894
|
+
onMuteChanged() {
|
|
895
|
+
// When unmuted, sync _lastTime to avoid stale comparisons
|
|
896
|
+
if (!this.track.muted) {
|
|
897
|
+
this._lastTime = -1;
|
|
898
|
+
}
|
|
899
|
+
}
|
|
874
900
|
|
|
875
901
|
evaluate(time: number) {
|
|
876
902
|
if (this.track.muted) return;
|
|
877
903
|
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
904
|
+
let lastTime = this._lastTime;
|
|
905
|
+
if (lastTime === -1) lastTime = time;
|
|
906
|
+
this._lastTime = time;
|
|
881
907
|
|
|
882
908
|
const estimatedFrameLengthWithPadding = this.director.context.time.deltaTime * 1.5;
|
|
883
909
|
|
|
@@ -899,7 +925,6 @@ export class SignalTrackHandler extends TrackHandler {
|
|
|
899
925
|
isActive = true;
|
|
900
926
|
}
|
|
901
927
|
}
|
|
902
|
-
// console.log(time, td, isActive);
|
|
903
928
|
if (isActive) {
|
|
904
929
|
if (!wasTriggered) {
|
|
905
930
|
if (debug)
|
|
@@ -917,9 +942,45 @@ export class SignalTrackHandler extends TrackHandler {
|
|
|
917
942
|
}
|
|
918
943
|
}
|
|
919
944
|
}
|
|
920
|
-
else {
|
|
921
|
-
|
|
945
|
+
else if (!model.emitOnce) {
|
|
946
|
+
// Only reset didTrigger when time has moved backward past the signal
|
|
947
|
+
// (e.g. timeline looped or was scrubbed back). Don't reset just because
|
|
948
|
+
// the deltaTime-based activation window shrank on a fast frame.
|
|
949
|
+
if (time < model.time && lastTime >= model.time) {
|
|
922
950
|
this.didTrigger[i] = false;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
export class ActivationTrackHandler extends TrackHandler {
|
|
959
|
+
|
|
960
|
+
evaluate(time: number) {
|
|
961
|
+
if (this.track.muted) return;
|
|
962
|
+
// NE-3241 / NE-3737: Don't evaluate when stopped (preserves "Leave as is" post-playback).
|
|
963
|
+
// But DO evaluate if the user explicitly called director.evaluate().
|
|
964
|
+
if (!this.director.isPlaying && !this.director._isUserEvaluation) return;
|
|
965
|
+
|
|
966
|
+
for (let i = 0; i < this.track.outputs.length; i++) {
|
|
967
|
+
const binding = this.track.outputs[i];
|
|
968
|
+
if (typeof binding !== "object" || binding === null) continue;
|
|
969
|
+
|
|
970
|
+
let isActive = false;
|
|
971
|
+
if (this.track.clips) {
|
|
972
|
+
for (const clip of this.track.clips) {
|
|
973
|
+
if (clip.start <= time && time <= clip.end) {
|
|
974
|
+
isActive = true;
|
|
975
|
+
break;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
const obj = binding as Object3D;
|
|
981
|
+
if (obj.visible !== undefined && obj.visible !== isActive) {
|
|
982
|
+
obj.visible = isActive;
|
|
983
|
+
if (debug) console.warn(this.director.name, "ActivationTrack-" + i, obj.name, isActive, time);
|
|
923
984
|
}
|
|
924
985
|
}
|
|
925
986
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { type ITimelineAnimationCallbacks as ITimelineAnimationOverride } from "./PlayableDirector.js"
|
|
1
|
+
export { DirectorWrapMode, type ITimelineAnimationCallbacks as ITimelineAnimationOverride } from "./PlayableDirector.js"
|
|
2
2
|
export * from "./SignalAsset.js"
|
|
3
|
+
export * from "./TimelineBuilder.js"
|
|
3
4
|
export * from "./TimelineModels.js"
|
|
4
5
|
export * from "./TimelineTracks.js"
|