@needle-tools/engine 5.1.0-canary.fbdfce3 → 5.1.0-experimental.03e8105
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 +86 -0
- package/SKILL.md +4 -1
- package/components.needle.json +1 -1
- package/dist/{needle-engine.bundle-BFSj2Fz8.js → needle-engine.bundle-BNqUjnSQ.js} +19180 -18386
- package/dist/needle-engine.bundle-Bt8ULD7E.umd.cjs +1733 -0
- package/dist/needle-engine.bundle-DF6ovbwD.min.js +1733 -0
- package/dist/needle-engine.d.ts +1487 -356
- package/dist/needle-engine.js +544 -542
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/three.js +1 -0
- package/dist/three.min.js +21 -21
- package/dist/three.umd.cjs +16 -16
- package/lib/engine/api.d.ts +8 -1
- package/lib/engine/api.js +7 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/codegen/register_types.js +10 -18
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/engine_audio.d.ts +68 -0
- package/lib/engine/engine_audio.js +172 -0
- package/lib/engine/engine_audio.js.map +1 -1
- package/lib/engine/engine_camera.fit.js +16 -4
- package/lib/engine/engine_camera.fit.js.map +1 -1
- package/lib/engine/engine_components.js +1 -1
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_context.d.ts +21 -8
- package/lib/engine/engine_context.js +32 -16
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_context_eventbus.d.ts +47 -0
- package/lib/engine/engine_context_eventbus.js +47 -0
- package/lib/engine/engine_context_eventbus.js.map +1 -0
- 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 +22 -120
- 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_init.js +7 -7
- package/lib/engine/engine_init.js.map +1 -1
- package/lib/engine/engine_input.d.ts +24 -5
- package/lib/engine/engine_input.js +3 -2
- package/lib/engine/engine_input.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_license.d.ts +7 -7
- package/lib/engine/engine_license.js +183 -57
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.js +7 -4
- 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_blob.js +4 -4
- package/lib/engine/engine_networking_blob.js.map +1 -1
- 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 +21 -3
- package/lib/engine/engine_physics_rapier.js +94 -25
- package/lib/engine/engine_physics_rapier.js.map +1 -1
- package/lib/engine/engine_scenedata.js +2 -2
- package/lib/engine/engine_scenedata.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.js +28 -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 +29 -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/engine_utils_qrcode.js +2 -2
- package/lib/engine/engine_utils_qrcode.js.map +1 -1
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.js +6 -6
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +10 -4
- package/lib/engine/webcomponents/needle-engine.js +3 -3
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
- package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
- package/lib/engine/xr/NeedleXRSession.d.ts +3 -2
- package/lib/engine/xr/NeedleXRSession.js +50 -14
- package/lib/engine/xr/NeedleXRSession.js.map +1 -1
- package/lib/engine/xr/TempXRContext.js +2 -2
- package/lib/engine/xr/TempXRContext.js.map +1 -1
- package/lib/engine/xr/events.d.ts +1 -1
- package/lib/engine/xr/events.js.map +1 -1
- package/lib/engine-components/Animation.js +17 -16
- package/lib/engine-components/Animation.js.map +1 -1
- package/lib/engine-components/AnimationBuilder.d.ts +158 -0
- package/lib/engine-components/AnimationBuilder.js +305 -0
- package/lib/engine-components/AnimationBuilder.js.map +1 -0
- package/lib/engine-components/Animator.d.ts +6 -0
- package/lib/engine-components/Animator.js +23 -13
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.builder.d.ts +191 -0
- package/lib/engine-components/AnimatorController.builder.js +263 -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 +33 -232
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/AudioSource.d.ts +19 -3
- package/lib/engine-components/AudioSource.js +121 -68
- package/lib/engine-components/AudioSource.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/ContactShadows.d.ts +1 -0
- package/lib/engine-components/ContactShadows.js +14 -1
- package/lib/engine-components/ContactShadows.js.map +1 -1
- package/lib/engine-components/DragControls.d.ts +7 -0
- package/lib/engine-components/DragControls.js +19 -7
- package/lib/engine-components/DragControls.js.map +1 -1
- package/lib/engine-components/DropListener.js +3 -0
- package/lib/engine-components/DropListener.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/Networking.d.ts +1 -1
- package/lib/engine-components/Networking.js +1 -1
- package/lib/engine-components/OrbitControls.d.ts +0 -2
- package/lib/engine-components/OrbitControls.js +30 -12
- package/lib/engine-components/OrbitControls.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/SceneSwitcher.js +3 -0
- package/lib/engine-components/SceneSwitcher.js.map +1 -1
- package/lib/engine-components/SeeThrough.js +2 -2
- package/lib/engine-components/SeeThrough.js.map +1 -1
- package/lib/engine-components/api.d.ts +2 -1
- package/lib/engine-components/api.js +2 -1
- package/lib/engine-components/api.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +7 -13
- package/lib/engine-components/codegen/components.js +7 -13
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
- package/lib/engine-components/timeline/PlayableDirector.d.ts +21 -11
- package/lib/engine-components/timeline/PlayableDirector.js +75 -67
- 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 +413 -0
- package/lib/engine-components/timeline/TimelineBuilder.js +506 -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 +37 -6
- package/lib/engine-components/timeline/TimelineTracks.js +92 -26
- 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/lib/engine-components/ui/Canvas.d.ts +1 -1
- package/lib/engine-components/ui/Canvas.js +2 -8
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/Text.d.ts +1 -0
- package/lib/engine-components/ui/Text.js +10 -7
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/web/CursorFollow.d.ts +0 -1
- package/lib/engine-components/web/CursorFollow.js +21 -13
- package/lib/engine-components/web/CursorFollow.js.map +1 -1
- package/lib/engine-components/webxr/WebXRImageTracking.js +4 -0
- package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
- package/package.json +2 -83
- package/plugins/common/cloud.js +6 -1
- package/plugins/common/license.js +31 -10
- package/plugins/common/worker.js +9 -4
- package/plugins/vite/asap.js +17 -8
- package/plugins/vite/dependencies.js +29 -10
- package/plugins/vite/dependency-watcher.js +2 -2
- package/plugins/vite/editor-connection.js +3 -3
- package/plugins/vite/license.js +46 -7
- package/plugins/vite/local-files-core.js +3 -3
- package/plugins/vite/local-files-utils.d.ts +3 -1
- package/plugins/vite/local-files-utils.js +29 -5
- package/plugins/vite/reload.js +1 -1
- package/plugins/vite/server.js +2 -1
- package/src/engine/api.ts +11 -1
- package/src/engine/codegen/register_types.ts +10 -18
- package/src/engine/engine_audio.ts +184 -0
- package/src/engine/engine_camera.fit.ts +15 -4
- package/src/engine/engine_components.ts +1 -1
- package/src/engine/engine_context.ts +34 -18
- package/src/engine/engine_context_eventbus.ts +73 -0
- package/src/engine/engine_disposable.ts +214 -0
- package/src/engine/engine_gameobject.ts +54 -159
- package/src/engine/engine_gltf_builtin_components.ts +7 -76
- package/src/engine/engine_init.ts +7 -7
- package/src/engine/engine_input.ts +28 -7
- package/src/engine/engine_instantiate_resolve.ts +407 -0
- package/src/engine/engine_license.ts +197 -55
- package/src/engine/engine_mainloop_utils.ts +7 -4
- package/src/engine/engine_networking.transport.websocket.ts +45 -0
- package/src/engine/engine_networking.ts +161 -137
- package/src/engine/engine_networking_blob.ts +4 -4
- 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 +102 -33
- package/src/engine/engine_scenedata.ts +3 -3
- package/src/engine/engine_serialization_builtin_serializer.ts +32 -9
- package/src/engine/engine_serialization_core.ts +9 -0
- package/src/engine/engine_types.ts +46 -27
- package/src/engine/engine_util_decorator.ts +7 -2
- package/src/engine/engine_utils.ts +16 -5
- package/src/engine/engine_utils_qrcode.ts +2 -2
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
- package/src/engine/webcomponents/needle menu/needle-menu.ts +6 -6
- package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
- package/src/engine/webcomponents/needle-engine.ts +12 -6
- package/src/engine/xr/NeedleXRSession.ts +48 -13
- package/src/engine/xr/TempXRContext.ts +2 -2
- package/src/engine/xr/events.ts +1 -1
- package/src/engine-components/Animation.ts +19 -16
- package/src/engine-components/AnimationBuilder.ts +472 -0
- package/src/engine-components/Animator.ts +24 -12
- package/src/engine-components/AnimatorController.builder.ts +387 -0
- package/src/engine-components/AnimatorController.ts +20 -291
- package/src/engine-components/AudioSource.ts +130 -79
- package/src/engine-components/Collider.ts +66 -18
- package/src/engine-components/Component.ts +118 -20
- package/src/engine-components/ContactShadows.ts +15 -1
- package/src/engine-components/DragControls.ts +18 -11
- package/src/engine-components/DropListener.ts +3 -0
- 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/Networking.ts +1 -1
- package/src/engine-components/OrbitControls.ts +34 -14
- package/src/engine-components/RigidBody.ts +18 -4
- package/src/engine-components/SceneSwitcher.ts +3 -0
- package/src/engine-components/SeeThrough.ts +2 -2
- package/src/engine-components/api.ts +2 -1
- package/src/engine-components/codegen/components.ts +7 -13
- package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
- package/src/engine-components/timeline/PlayableDirector.ts +83 -81
- package/src/engine-components/timeline/SignalAsset.ts +4 -1
- package/src/engine-components/timeline/TimelineBuilder.ts +824 -0
- package/src/engine-components/timeline/TimelineModels.ts +5 -1
- package/src/engine-components/timeline/TimelineTracks.ts +96 -27
- package/src/engine-components/timeline/index.ts +2 -1
- package/src/engine-components/ui/Canvas.ts +2 -8
- package/src/engine-components/ui/Text.ts +12 -8
- package/src/engine-components/web/CursorFollow.ts +21 -14
- package/src/engine-components/webxr/WebXRImageTracking.ts +2 -0
- package/dist/needle-engine.bundle-CmxIO5uH.min.js +0 -1732
- package/dist/needle-engine.bundle-tJIZukCz.umd.cjs +0 -1732
- 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/plugins/dts-generator/dts.codegen.js +0 -334
- package/plugins/dts-generator/dts.scan.js +0 -99
- package/plugins/dts-generator/dts.writer.js +0 -59
- package/plugins/dts-generator/glb.discovery.js +0 -279
- package/plugins/dts-generator/glb.extractor.js +0 -215
- package/plugins/dts-generator/glb.reader.js +0 -167
- package/plugins/dts-generator/index.js +0 -36
- package/plugins/dts-generator/manifest.types.js +0 -174
- package/plugins/gltf-packer.mjs +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
- package/src/vite-env.d.ts +0 -16
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import { AnimationClip, Object3D } from "three";
|
|
2
|
+
import { GameObject } from "../Component.js";
|
|
3
|
+
import { InstantiateIdProvider } from "../../engine/engine_networking_instantiate.js";
|
|
4
|
+
import { EventList } from "../EventList.js";
|
|
5
|
+
import { resolveToClip, track as trackFn } from "../AnimationBuilder.js";
|
|
6
|
+
import { SignalAsset, SignalReceiver, SignalReceiverEvent } from "./SignalAsset.js";
|
|
7
|
+
import { ClipExtrapolation, TrackType } from "./TimelineModels.js";
|
|
8
|
+
import { MarkerType } from "./TimelineModels.js";
|
|
9
|
+
/**
|
|
10
|
+
* A fluent builder for creating timeline assets ({@link TimelineAssetModel}) from code.
|
|
11
|
+
*
|
|
12
|
+
* Use {@link TimelineBuilder.create} to start building a timeline.
|
|
13
|
+
*
|
|
14
|
+
* @example Using build() for timelines without signal callbacks
|
|
15
|
+
* ```ts
|
|
16
|
+
* const timeline = TimelineBuilder.create("MySequence")
|
|
17
|
+
* .animationTrack("Character", animator)
|
|
18
|
+
* .clip(walkClip, { duration: 2, easeIn: 0.3 })
|
|
19
|
+
* .clip(runClip, { duration: 3, easeIn: 0.5, easeOut: 0.5 })
|
|
20
|
+
* .activationTrack("FX", particleObject)
|
|
21
|
+
* .clip({ start: 1, duration: 2 })
|
|
22
|
+
* .audioTrack("Music", audioSource)
|
|
23
|
+
* .clip("music.mp3", { start: 0, duration: 5, volume: 0.8 })
|
|
24
|
+
* .build();
|
|
25
|
+
*
|
|
26
|
+
* director.playableAsset = timeline;
|
|
27
|
+
* director.play();
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example With inline tracks (no pre-built clips needed)
|
|
31
|
+
* ```ts
|
|
32
|
+
* TimelineBuilder.create("DoorSequence")
|
|
33
|
+
* .animationTrack("Door", door)
|
|
34
|
+
* .track(door, "position", { from: [0, 0, 0], to: [2, 0, 0], duration: 1 })
|
|
35
|
+
* .track(light, "intensity", { from: 0, to: 5, duration: 1 })
|
|
36
|
+
* .signalTrack("Events")
|
|
37
|
+
* .signal(0.5, () => playSound("creak"))
|
|
38
|
+
* .install(director);
|
|
39
|
+
*
|
|
40
|
+
* director.play();
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Using install() with signal callbacks
|
|
44
|
+
* ```ts
|
|
45
|
+
* TimelineBuilder.create("WithSignals")
|
|
46
|
+
* .animationTrack("Character", animator)
|
|
47
|
+
* .clip(walkClip, { duration: 2 })
|
|
48
|
+
* .signalTrack("Events")
|
|
49
|
+
* .signal(1.0, () => console.log("1 second!"))
|
|
50
|
+
* .signal(2.0, () => spawnParticles())
|
|
51
|
+
* .install(director);
|
|
52
|
+
*
|
|
53
|
+
* director.play();
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @category Animation and Sequencing
|
|
57
|
+
* @group Utilities
|
|
58
|
+
*/
|
|
59
|
+
export class TimelineBuilder {
|
|
60
|
+
_name;
|
|
61
|
+
_tracks = [];
|
|
62
|
+
_currentTrack = null;
|
|
63
|
+
_pendingSignals = [];
|
|
64
|
+
_idProvider;
|
|
65
|
+
constructor(name, seed) {
|
|
66
|
+
this._name = name;
|
|
67
|
+
this._idProvider = new InstantiateIdProvider(seed ?? Date.now());
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates a new TimelineBuilder instance.
|
|
71
|
+
* @param name - Name for the timeline asset
|
|
72
|
+
* @param seed - Optional numeric seed for deterministic guid generation. Defaults to `Date.now()`.
|
|
73
|
+
*/
|
|
74
|
+
static create(name, seed) {
|
|
75
|
+
return new TimelineBuilder(name ?? "Timeline", seed);
|
|
76
|
+
}
|
|
77
|
+
// #region Track creation
|
|
78
|
+
/**
|
|
79
|
+
* Adds an animation track. Chain `.clip()` calls to add pre-built clips,
|
|
80
|
+
* or chain `.track()` calls to define animation data inline:
|
|
81
|
+
*
|
|
82
|
+
* @example With pre-built AnimationClip
|
|
83
|
+
* ```ts
|
|
84
|
+
* .animationTrack("Character", animator)
|
|
85
|
+
* .clip(walkClip, { duration: 2, easeIn: 0.3 })
|
|
86
|
+
* .clip(runClip, { duration: 3 })
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @example With inline tracks
|
|
90
|
+
* ```ts
|
|
91
|
+
* .animationTrack("Door", door)
|
|
92
|
+
* .track(door, "position", { from: [0, 0, 0], to: [2, 0, 0], duration: 1 })
|
|
93
|
+
* .track(light, "intensity", { from: 0, to: 5, duration: 1 })
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @param name - Display name for the track
|
|
97
|
+
* @param binding - The Animator or Object3D to animate
|
|
98
|
+
*/
|
|
99
|
+
animationTrack(name, binding) {
|
|
100
|
+
this.commitInlineTracks();
|
|
101
|
+
this._currentTrack = this.pushTrack(name, TrackType.Animation, binding ?? null);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Adds an audio track. Subsequent `.clip()` calls add audio clips to this track.
|
|
106
|
+
* @param name - Display name for the track
|
|
107
|
+
* @param binding - The AudioSource to play audio on (optional)
|
|
108
|
+
* @param volume - Track volume multiplier (default: 1)
|
|
109
|
+
*/
|
|
110
|
+
audioTrack(name, binding, volume) {
|
|
111
|
+
this.commitInlineTracks();
|
|
112
|
+
this._currentTrack = this.pushTrack(name, TrackType.Audio, binding ?? null);
|
|
113
|
+
this._currentTrack.volume = volume;
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Adds an activation track. Subsequent `.clip()` calls define when the bound object is active.
|
|
118
|
+
* @param name - Display name for the track
|
|
119
|
+
* @param binding - The Object3D to show/hide
|
|
120
|
+
*/
|
|
121
|
+
activationTrack(name, binding) {
|
|
122
|
+
this.commitInlineTracks();
|
|
123
|
+
this._currentTrack = this.pushTrack(name, TrackType.Activation, binding ?? null);
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Adds a control track. Subsequent `.clip()` calls control nested timelines or objects.
|
|
128
|
+
* @param name - Display name for the track
|
|
129
|
+
*/
|
|
130
|
+
controlTrack(name) {
|
|
131
|
+
this.commitInlineTracks();
|
|
132
|
+
this._currentTrack = this.pushTrack(name, TrackType.Control, null);
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Adds a signal track. Use `.signal()` or `.marker()` to add signal markers.
|
|
137
|
+
* @param name - Display name for the track
|
|
138
|
+
* @param binding - The SignalReceiver component (optional — if using `.signal()` with callbacks, one is created automatically by {@link install})
|
|
139
|
+
*/
|
|
140
|
+
signalTrack(name, binding) {
|
|
141
|
+
this.commitInlineTracks();
|
|
142
|
+
this._currentTrack = this.pushTrack(name, TrackType.Signal, binding ?? null);
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Adds a marker track. Use `.marker()` to add markers.
|
|
147
|
+
* @param name - Display name for the track
|
|
148
|
+
*/
|
|
149
|
+
markerTrack(name) {
|
|
150
|
+
this.commitInlineTracks();
|
|
151
|
+
this._currentTrack = this.pushTrack(name, TrackType.Marker, null);
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
clip(assetOrOptions, options) {
|
|
155
|
+
if (!this._currentTrack)
|
|
156
|
+
throw new Error("TimelineBuilder: .clip() must be called after a track method (e.g. .animationTrack())");
|
|
157
|
+
this.commitInlineTracks();
|
|
158
|
+
const track = this._currentTrack;
|
|
159
|
+
switch (track.type) {
|
|
160
|
+
case TrackType.Animation: {
|
|
161
|
+
// Resolve TrackDescriptor(s) to AnimationClip if needed
|
|
162
|
+
let animClip;
|
|
163
|
+
if (assetOrOptions instanceof AnimationClip) {
|
|
164
|
+
animClip = assetOrOptions;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const descriptors = Array.isArray(assetOrOptions) ? assetOrOptions : [assetOrOptions];
|
|
168
|
+
// Use the track's binding as root for resolution
|
|
169
|
+
const binding = track.outputs[0];
|
|
170
|
+
const root = binding instanceof Object3D ? binding
|
|
171
|
+
: (binding != null && "gameObject" in binding) ? binding.gameObject
|
|
172
|
+
: undefined;
|
|
173
|
+
animClip = resolveToClip(descriptors, root);
|
|
174
|
+
}
|
|
175
|
+
const opts = (options ?? {});
|
|
176
|
+
const duration = opts.duration ?? animClip.duration;
|
|
177
|
+
const start = opts.start ?? track.cursor;
|
|
178
|
+
const end = start + duration;
|
|
179
|
+
const clipModel = {
|
|
180
|
+
start,
|
|
181
|
+
end,
|
|
182
|
+
duration,
|
|
183
|
+
timeScale: opts.speed ?? 1,
|
|
184
|
+
clipIn: opts.clipIn ?? 0,
|
|
185
|
+
easeInDuration: opts.easeIn ?? 0,
|
|
186
|
+
easeOutDuration: opts.easeOut ?? 0,
|
|
187
|
+
preExtrapolationMode: opts.preExtrapolation ?? ClipExtrapolation.None,
|
|
188
|
+
postExtrapolationMode: opts.postExtrapolation ?? ClipExtrapolation.None,
|
|
189
|
+
reversed: opts.reversed,
|
|
190
|
+
asset: {
|
|
191
|
+
clip: animClip,
|
|
192
|
+
loop: opts.loop ?? false,
|
|
193
|
+
duration: animClip.duration,
|
|
194
|
+
removeStartOffset: opts.removeStartOffset ?? false,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
track.clips.push(clipModel);
|
|
198
|
+
track.cursor = end;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case TrackType.Audio: {
|
|
202
|
+
const url = assetOrOptions;
|
|
203
|
+
const opts = (options ?? {});
|
|
204
|
+
const duration = opts.duration;
|
|
205
|
+
const start = opts.start ?? track.cursor;
|
|
206
|
+
const end = start + duration;
|
|
207
|
+
const clipModel = {
|
|
208
|
+
start,
|
|
209
|
+
end,
|
|
210
|
+
duration,
|
|
211
|
+
timeScale: opts.speed ?? 1,
|
|
212
|
+
clipIn: 0,
|
|
213
|
+
easeInDuration: opts.easeIn ?? 0,
|
|
214
|
+
easeOutDuration: opts.easeOut ?? 0,
|
|
215
|
+
preExtrapolationMode: ClipExtrapolation.None,
|
|
216
|
+
postExtrapolationMode: ClipExtrapolation.None,
|
|
217
|
+
asset: {
|
|
218
|
+
clip: url,
|
|
219
|
+
loop: opts.loop ?? false,
|
|
220
|
+
volume: opts.volume ?? 1,
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
track.clips.push(clipModel);
|
|
224
|
+
track.cursor = end;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
case TrackType.Activation: {
|
|
228
|
+
const opts = assetOrOptions;
|
|
229
|
+
const start = opts.start ?? track.cursor;
|
|
230
|
+
const end = start + opts.duration;
|
|
231
|
+
const clipModel = {
|
|
232
|
+
start,
|
|
233
|
+
end,
|
|
234
|
+
duration: opts.duration,
|
|
235
|
+
timeScale: 1,
|
|
236
|
+
clipIn: 0,
|
|
237
|
+
easeInDuration: opts.easeIn ?? 0,
|
|
238
|
+
easeOutDuration: opts.easeOut ?? 0,
|
|
239
|
+
preExtrapolationMode: ClipExtrapolation.None,
|
|
240
|
+
postExtrapolationMode: ClipExtrapolation.None,
|
|
241
|
+
asset: {},
|
|
242
|
+
};
|
|
243
|
+
track.clips.push(clipModel);
|
|
244
|
+
track.cursor = end;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
case TrackType.Control: {
|
|
248
|
+
const sourceObject = assetOrOptions;
|
|
249
|
+
const opts = (options ?? {});
|
|
250
|
+
const start = opts.start ?? track.cursor;
|
|
251
|
+
const duration = opts.duration;
|
|
252
|
+
const end = start + duration;
|
|
253
|
+
const clipModel = {
|
|
254
|
+
start,
|
|
255
|
+
end,
|
|
256
|
+
duration,
|
|
257
|
+
timeScale: 1,
|
|
258
|
+
clipIn: 0,
|
|
259
|
+
easeInDuration: 0,
|
|
260
|
+
easeOutDuration: 0,
|
|
261
|
+
preExtrapolationMode: ClipExtrapolation.None,
|
|
262
|
+
postExtrapolationMode: ClipExtrapolation.None,
|
|
263
|
+
asset: {
|
|
264
|
+
sourceObject,
|
|
265
|
+
controlActivation: opts.controlActivation ?? true,
|
|
266
|
+
updateDirector: opts.updateDirector ?? true,
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
track.clips.push(clipModel);
|
|
270
|
+
track.cursor = end;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
default:
|
|
274
|
+
throw new Error(`TimelineBuilder: .clip() is not supported on track type "${track.type}"`);
|
|
275
|
+
}
|
|
276
|
+
return this;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Adds a signal marker to the current signal or marker track.
|
|
280
|
+
* @param time - Time in seconds when the signal fires
|
|
281
|
+
* @param asset - The signal asset identifier (guid string)
|
|
282
|
+
* @param options - Optional marker configuration
|
|
283
|
+
*/
|
|
284
|
+
marker(time, asset, options) {
|
|
285
|
+
if (!this._currentTrack)
|
|
286
|
+
throw new Error("TimelineBuilder: .marker() must be called after a track method");
|
|
287
|
+
if (this._currentTrack.type !== TrackType.Signal && this._currentTrack.type !== TrackType.Marker) {
|
|
288
|
+
throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);
|
|
289
|
+
}
|
|
290
|
+
const marker = {
|
|
291
|
+
type: MarkerType.Signal,
|
|
292
|
+
time,
|
|
293
|
+
retroActive: options?.retroActive ?? false,
|
|
294
|
+
emitOnce: options?.emitOnce ?? false,
|
|
295
|
+
asset,
|
|
296
|
+
};
|
|
297
|
+
this._currentTrack.markers.push(marker);
|
|
298
|
+
// Update cursor past the marker
|
|
299
|
+
if (time > this._currentTrack.cursor) {
|
|
300
|
+
this._currentTrack.cursor = time;
|
|
301
|
+
}
|
|
302
|
+
return this;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Adds a signal with a callback to the current signal track.
|
|
306
|
+
* This is a convenience method that automatically generates a signal asset guid,
|
|
307
|
+
* adds the marker, and registers the callback so that {@link install} can wire up
|
|
308
|
+
* the `SignalReceiver` on the director's GameObject.
|
|
309
|
+
*
|
|
310
|
+
* @param time - Time in seconds when the signal fires
|
|
311
|
+
* @param callback - The function to invoke when the signal fires
|
|
312
|
+
* @param options - Optional marker configuration
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```ts
|
|
316
|
+
* const timeline = TimelineBuilder.create("Sequence")
|
|
317
|
+
* .signalTrack("Events")
|
|
318
|
+
* .signal(1.0, () => console.log("1 second reached!"))
|
|
319
|
+
* .signal(3.5, () => console.log("halfway!"), { emitOnce: true })
|
|
320
|
+
* .install(director);
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
signal(time, callback, options) {
|
|
324
|
+
if (!this._currentTrack)
|
|
325
|
+
throw new Error("TimelineBuilder: .signal() must be called after a track method");
|
|
326
|
+
if (this._currentTrack.type !== TrackType.Signal && this._currentTrack.type !== TrackType.Marker) {
|
|
327
|
+
throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);
|
|
328
|
+
}
|
|
329
|
+
const guid = this._idProvider.generateUUID();
|
|
330
|
+
const trackIndex = this._tracks.indexOf(this._currentTrack);
|
|
331
|
+
// Add the marker with the generated guid
|
|
332
|
+
const marker = {
|
|
333
|
+
type: MarkerType.Signal,
|
|
334
|
+
time,
|
|
335
|
+
retroActive: options?.retroActive ?? false,
|
|
336
|
+
emitOnce: options?.emitOnce ?? false,
|
|
337
|
+
asset: guid,
|
|
338
|
+
};
|
|
339
|
+
this._currentTrack.markers.push(marker);
|
|
340
|
+
// Store the pending signal for wiring during install()
|
|
341
|
+
this._pendingSignals.push({ trackIndex, guid, callback });
|
|
342
|
+
if (time > this._currentTrack.cursor) {
|
|
343
|
+
this._currentTrack.cursor = time;
|
|
344
|
+
}
|
|
345
|
+
return this;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Mutes the current track so it is skipped during playback.
|
|
349
|
+
*/
|
|
350
|
+
muted(muted = true) {
|
|
351
|
+
if (!this._currentTrack)
|
|
352
|
+
throw new Error("TimelineBuilder: .muted() must be called after a track method");
|
|
353
|
+
this._currentTrack.muted = muted;
|
|
354
|
+
return this;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Adds an animation track descriptor to the current animation track.
|
|
358
|
+
* Multiple `.track()` calls accumulate into a single animation clip that is
|
|
359
|
+
* committed when the next `.clip()`, track method, or `.build()`/`.install()` is called.
|
|
360
|
+
*
|
|
361
|
+
* Must be called after `.animationTrack()`.
|
|
362
|
+
*
|
|
363
|
+
* @param target - The object whose type determines valid properties and value types
|
|
364
|
+
* @param property - The property to animate
|
|
365
|
+
* @param keyframes - Keyframe array or {@link Tween} shorthand
|
|
366
|
+
* @param options - Optional {@link TrackOptions} with a `root` for named targeting
|
|
367
|
+
*/
|
|
368
|
+
track(target, property, keyframes, options) {
|
|
369
|
+
if (!this._currentTrack)
|
|
370
|
+
throw new Error("TimelineBuilder: .track() must be called after .animationTrack()");
|
|
371
|
+
if (this._currentTrack.type !== TrackType.Animation)
|
|
372
|
+
throw new Error("TimelineBuilder: .track() is only supported on animation tracks");
|
|
373
|
+
this._currentTrack.inlineTracks.push(trackFn(target, property, keyframes, options));
|
|
374
|
+
return this;
|
|
375
|
+
}
|
|
376
|
+
// #endregion
|
|
377
|
+
/**
|
|
378
|
+
* Builds and returns the {@link TimelineAssetModel}.
|
|
379
|
+
* Assign the result to `PlayableDirector.playableAsset` to play it.
|
|
380
|
+
*
|
|
381
|
+
* If you used `.signal()` with callbacks, use {@link install} instead — it calls `build()`
|
|
382
|
+
* internally and also wires up the SignalReceiver on the director's GameObject.
|
|
383
|
+
*/
|
|
384
|
+
build() {
|
|
385
|
+
this.commitInlineTracks();
|
|
386
|
+
const tracks = this._tracks.map(t => {
|
|
387
|
+
const track = {
|
|
388
|
+
name: t.name,
|
|
389
|
+
type: t.type,
|
|
390
|
+
muted: t.muted,
|
|
391
|
+
outputs: t.outputs,
|
|
392
|
+
};
|
|
393
|
+
if (t.clips.length > 0)
|
|
394
|
+
track.clips = t.clips;
|
|
395
|
+
if (t.markers.length > 0)
|
|
396
|
+
track.markers = t.markers;
|
|
397
|
+
if (t.volume !== undefined)
|
|
398
|
+
track.volume = t.volume;
|
|
399
|
+
if (t.trackOffset !== undefined)
|
|
400
|
+
track.trackOffset = t.trackOffset;
|
|
401
|
+
return track;
|
|
402
|
+
});
|
|
403
|
+
return {
|
|
404
|
+
name: this._name,
|
|
405
|
+
tracks,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Builds the timeline asset, assigns it to the director, and wires up any
|
|
410
|
+
* `.signal()` callbacks by creating/configuring a {@link SignalReceiver} on the
|
|
411
|
+
* director's GameObject.
|
|
412
|
+
*
|
|
413
|
+
* @param director - The PlayableDirector to install the timeline on
|
|
414
|
+
* @returns The built TimelineAssetModel (also assigned to `director.playableAsset`)
|
|
415
|
+
*
|
|
416
|
+
* @example
|
|
417
|
+
* ```ts
|
|
418
|
+
* TimelineBuilder.create("MyTimeline")
|
|
419
|
+
* .animationTrack("Anim", animator)
|
|
420
|
+
* .clip(walkClip, { duration: 2 })
|
|
421
|
+
* .signalTrack("Events")
|
|
422
|
+
* .signal(1.0, () => console.log("signal fired!"))
|
|
423
|
+
* .install(director);
|
|
424
|
+
*
|
|
425
|
+
* director.play();
|
|
426
|
+
* ```
|
|
427
|
+
*/
|
|
428
|
+
install(director) {
|
|
429
|
+
const asset = this.build();
|
|
430
|
+
// Wire up signal callbacks
|
|
431
|
+
if (this._pendingSignals.length > 0) {
|
|
432
|
+
const obj = director.gameObject;
|
|
433
|
+
let receiver = GameObject.getComponent(obj, SignalReceiver);
|
|
434
|
+
if (!receiver) {
|
|
435
|
+
receiver = GameObject.addComponent(obj, SignalReceiver);
|
|
436
|
+
}
|
|
437
|
+
if (!receiver.events) {
|
|
438
|
+
receiver.events = [];
|
|
439
|
+
}
|
|
440
|
+
for (const pending of this._pendingSignals) {
|
|
441
|
+
const signalAsset = new SignalAsset();
|
|
442
|
+
signalAsset.guid = pending.guid;
|
|
443
|
+
const evt = new SignalReceiverEvent();
|
|
444
|
+
evt.signal = signalAsset;
|
|
445
|
+
evt.reaction = new EventList([pending.callback]);
|
|
446
|
+
receiver.events.push(evt);
|
|
447
|
+
// Wire the receiver as the output binding for the signal track
|
|
448
|
+
const track = asset.tracks[pending.trackIndex];
|
|
449
|
+
if (track && !track.outputs.includes(receiver)) {
|
|
450
|
+
track.outputs.push(receiver);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
director.playableAsset = asset;
|
|
455
|
+
return asset;
|
|
456
|
+
}
|
|
457
|
+
// #region Private helpers
|
|
458
|
+
pushTrack(name, type, binding) {
|
|
459
|
+
const track = {
|
|
460
|
+
name,
|
|
461
|
+
type,
|
|
462
|
+
muted: false,
|
|
463
|
+
outputs: binding ? [binding] : [],
|
|
464
|
+
clips: [],
|
|
465
|
+
markers: [],
|
|
466
|
+
cursor: 0,
|
|
467
|
+
inlineTracks: [],
|
|
468
|
+
};
|
|
469
|
+
this._tracks.push(track);
|
|
470
|
+
return track;
|
|
471
|
+
}
|
|
472
|
+
/** Commits any pending `.track()` descriptors on the current animation track into a clip */
|
|
473
|
+
commitInlineTracks() {
|
|
474
|
+
if (!this._currentTrack || this._currentTrack.inlineTracks.length === 0)
|
|
475
|
+
return;
|
|
476
|
+
const t = this._currentTrack;
|
|
477
|
+
const binding = t.outputs[0];
|
|
478
|
+
const root = binding instanceof Object3D ? binding
|
|
479
|
+
: (binding != null && "gameObject" in binding) ? binding.gameObject
|
|
480
|
+
: undefined;
|
|
481
|
+
const animClip = resolveToClip(t.inlineTracks, root);
|
|
482
|
+
const start = t.cursor;
|
|
483
|
+
const duration = animClip.duration;
|
|
484
|
+
const clipModel = {
|
|
485
|
+
start,
|
|
486
|
+
end: start + duration,
|
|
487
|
+
duration,
|
|
488
|
+
timeScale: 1,
|
|
489
|
+
clipIn: 0,
|
|
490
|
+
easeInDuration: 0,
|
|
491
|
+
easeOutDuration: 0,
|
|
492
|
+
preExtrapolationMode: ClipExtrapolation.None,
|
|
493
|
+
postExtrapolationMode: ClipExtrapolation.None,
|
|
494
|
+
asset: {
|
|
495
|
+
clip: animClip,
|
|
496
|
+
loop: false,
|
|
497
|
+
duration: animClip.duration,
|
|
498
|
+
removeStartOffset: false,
|
|
499
|
+
},
|
|
500
|
+
};
|
|
501
|
+
t.clips.push(clipModel);
|
|
502
|
+
t.cursor = start + duration;
|
|
503
|
+
t.inlineTracks = [];
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=TimelineBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineBuilder.js","sourceRoot":"","sources":["../../../src/engine-components/timeline/TimelineBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ export declare enum ClipExtrapolation {
|
|
|
36
36
|
* @category Animation and Sequencing
|
|
37
37
|
* @see {@link PlayableDirector} for the main component to control timelines in Needle Engine.
|
|
38
38
|
*/
|
|
39
|
-
export
|
|
39
|
+
export type TrackModel = {
|
|
40
40
|
name: string;
|
|
41
41
|
type: TrackType;
|
|
42
42
|
muted: boolean;
|
|
@@ -46,6 +46,7 @@ export declare type TrackModel = {
|
|
|
46
46
|
trackOffset?: TrackOffset;
|
|
47
47
|
volume?: number;
|
|
48
48
|
};
|
|
49
|
+
export declare function isTrackModel(obj: unknown): obj is TrackModel;
|
|
49
50
|
declare type Vec3 = {
|
|
50
51
|
x: number;
|
|
51
52
|
y: number;
|
|
@@ -26,6 +26,9 @@ export var ClipExtrapolation;
|
|
|
26
26
|
ClipExtrapolation[ClipExtrapolation["Continue"] = 4] = "Continue";
|
|
27
27
|
})(ClipExtrapolation || (ClipExtrapolation = {}));
|
|
28
28
|
;
|
|
29
|
+
export function isTrackModel(obj) {
|
|
30
|
+
return typeof obj === "object" && obj !== null && "name" in obj && "type" in obj && "outputs" in obj && "muted" in obj;
|
|
31
|
+
}
|
|
29
32
|
export var MarkerType;
|
|
30
33
|
(function (MarkerType) {
|
|
31
34
|
MarkerType["Signal"] = "SignalEmitter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimelineModels.js","sourceRoot":"","sources":["../../../src/engine-components/timeline/TimelineModels.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,2CAA8B,CAAA;IAC9B,yCAA4B,CAAA;IAC5B,iCAAoB,CAAA;IACpB,qCAAwB,CAAA;IACxB,mCAAsB,CAAA;IACtB,mCAAsB,CAAA;AAC1B,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IACzB,yDAAQ,CAAA;IACR,yDAAQ,CAAA;IACR,yDAAQ,CAAA;IACR,iEAAY,CAAA;IACZ,iEAAY,CAAA;AAChB,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"TimelineModels.js","sourceRoot":"","sources":["../../../src/engine-components/timeline/TimelineModels.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,2CAA8B,CAAA;IAC9B,yCAA4B,CAAA;IAC5B,iCAAoB,CAAA;IACpB,qCAAwB,CAAA;IACxB,mCAAsB,CAAA;IACtB,mCAAsB,CAAA;AAC1B,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IACzB,yDAAQ,CAAA;IACR,yDAAQ,CAAA;IACR,yDAAQ,CAAA;IACR,iEAAY,CAAA;IACZ,iEAAY,CAAA;AAChB,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAAA,CAAC;AAiBF,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC;AAC3H,CAAC;AAiED,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IAClB,sCAAwB,CAAA;AAC5B,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB"}
|
|
@@ -8,7 +8,7 @@ import * as Models from "./TimelineModels.js";
|
|
|
8
8
|
* A TrackHandler is responsible for evaluating a specific type of timeline track.
|
|
9
9
|
* A timeline track can be an animation track, audio track, signal track, control track etc and is controlled by a {@link PlayableDirector}.
|
|
10
10
|
*/
|
|
11
|
-
export declare abstract class
|
|
11
|
+
export declare abstract class TimelineTrackHandler {
|
|
12
12
|
director: PlayableDirector;
|
|
13
13
|
track: Models.TrackModel;
|
|
14
14
|
get muted(): boolean;
|
|
@@ -26,7 +26,7 @@ export declare abstract class TrackHandler {
|
|
|
26
26
|
getClipTimeNormalized(time: number, model: Models.ClipModel): number;
|
|
27
27
|
evaluateWeight(time: number, index: number, models: Array<Models.ClipModel>, isActive?: boolean): number;
|
|
28
28
|
}
|
|
29
|
-
export declare class
|
|
29
|
+
export declare class TimelineAnimationTrack extends TimelineTrackHandler {
|
|
30
30
|
/** @internal */
|
|
31
31
|
models: Array<Models.ClipModel>;
|
|
32
32
|
/** @internal */
|
|
@@ -69,13 +69,30 @@ export declare class AnimationTrackHandler extends TrackHandler {
|
|
|
69
69
|
declare type AudioClipModel = Models.ClipModel & {
|
|
70
70
|
_didTriggerPlay: boolean;
|
|
71
71
|
};
|
|
72
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Handles audio playback for a timeline audio track.
|
|
74
|
+
*
|
|
75
|
+
* **Runtime mutation:** The track model is read fresh every frame during `evaluate()`.
|
|
76
|
+
* You can mutate `track.volume`, `clip.start`, `clip.end`, `clip.asset.volume` etc.
|
|
77
|
+
* at any time — changes take effect on the next frame without rebuilding the timeline.
|
|
78
|
+
*
|
|
79
|
+
* **Audio stopping:** Audio clips are automatically stopped when:
|
|
80
|
+
* - Timeline time moves outside a clip's `[start, end]` range (e.g. jumping or normal playback advancing past a clip)
|
|
81
|
+
* - The track is muted (via `muted = true`)
|
|
82
|
+
* - The director is stopped (`director.stop()`)
|
|
83
|
+
* - The director is paused (`director.pause()`)
|
|
84
|
+
* - The director is disabled or destroyed
|
|
85
|
+
*/
|
|
86
|
+
export declare class TimelineAudioTrack extends TimelineTrackHandler {
|
|
73
87
|
models: Array<AudioClipModel>;
|
|
74
88
|
listener: AudioListener;
|
|
75
89
|
audio: Array<Audio>;
|
|
76
90
|
audioContextTimeOffset: Array<number>;
|
|
77
91
|
lastTime: number;
|
|
78
92
|
audioSource?: AudioSource;
|
|
93
|
+
/** Track-level volume multiplier (0–1). Applied on top of per-clip volume each frame. */
|
|
94
|
+
get volume(): number;
|
|
95
|
+
set volume(val: number);
|
|
79
96
|
private _audioLoader;
|
|
80
97
|
private getAudioFilePath;
|
|
81
98
|
onAllowAudioChanged(allow: boolean): void;
|
|
@@ -94,7 +111,7 @@ export declare class AudioTrackHandler extends TrackHandler {
|
|
|
94
111
|
static dispose(): void;
|
|
95
112
|
private handleAudioLoading;
|
|
96
113
|
}
|
|
97
|
-
export declare class
|
|
114
|
+
export declare class TimelineMarkerTrack extends TimelineTrackHandler {
|
|
98
115
|
models: Array<Models.MarkerModel & Record<string, any>>;
|
|
99
116
|
needsSorting: boolean;
|
|
100
117
|
foreachMarker<T>(type?: string | null): Generator<T, void, unknown>;
|
|
@@ -102,13 +119,27 @@ export declare class MarkerTrackHandler extends TrackHandler {
|
|
|
102
119
|
evaluate(_time: number): void;
|
|
103
120
|
private sort;
|
|
104
121
|
}
|
|
105
|
-
export declare class SignalTrackHandler extends
|
|
122
|
+
export declare class SignalTrackHandler extends TimelineTrackHandler {
|
|
106
123
|
models: Models.SignalMarkerModel[];
|
|
107
124
|
didTrigger: boolean[];
|
|
108
125
|
receivers: Array<SignalReceiver | null>;
|
|
126
|
+
private _lastTime;
|
|
127
|
+
onEnable(): void;
|
|
128
|
+
onMuteChanged(): void;
|
|
129
|
+
evaluate(time: number): void;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Handles activation (visibility) of bound objects for a timeline activation track.
|
|
133
|
+
*
|
|
134
|
+
* Each clip on the track defines a time range during which the bound objects should be active (visible).
|
|
135
|
+
* @see TimelineTrackHandler for details on how tracks and clips work in general, and how to mutate them at runtime.
|
|
136
|
+
* @see PlayableDirector for how to control timeline playback and time.
|
|
137
|
+
* @see TimelineBuilder for how to create and configure timelines and tracks in the editor.
|
|
138
|
+
*/
|
|
139
|
+
export declare class TimelineActivationTrack extends TimelineTrackHandler {
|
|
109
140
|
evaluate(time: number): void;
|
|
110
141
|
}
|
|
111
|
-
export declare class
|
|
142
|
+
export declare class TimelineControlTrack extends TimelineTrackHandler {
|
|
112
143
|
models: Array<Models.ClipModel>;
|
|
113
144
|
timelines: Array<PlayableDirector | null>;
|
|
114
145
|
resolveSourceObjects(_context: Context): void;
|