@twick/core 0.11.0
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/LICENSE +21 -0
- package/lib/app/Logger.d.ts +105 -0
- package/lib/app/Logger.d.ts.map +1 -0
- package/lib/app/Logger.js +77 -0
- package/lib/app/PlaybackManager.d.ts +55 -0
- package/lib/app/PlaybackManager.d.ts.map +1 -0
- package/lib/app/PlaybackManager.js +179 -0
- package/lib/app/PlaybackStatus.d.ts +30 -0
- package/lib/app/PlaybackStatus.d.ts.map +1 -0
- package/lib/app/PlaybackStatus.js +46 -0
- package/lib/app/Player.d.ts +130 -0
- package/lib/app/Player.d.ts.map +1 -0
- package/lib/app/Player.js +375 -0
- package/lib/app/Project.d.ts +145 -0
- package/lib/app/Project.d.ts.map +1 -0
- package/lib/app/Project.js +10 -0
- package/lib/app/Renderer.d.ts +90 -0
- package/lib/app/Renderer.d.ts.map +1 -0
- package/lib/app/Renderer.js +318 -0
- package/lib/app/SharedWebGLContext.d.ts +24 -0
- package/lib/app/SharedWebGLContext.d.ts.map +1 -0
- package/lib/app/SharedWebGLContext.js +200 -0
- package/lib/app/Stage.d.ts +30 -0
- package/lib/app/Stage.d.ts.map +1 -0
- package/lib/app/Stage.js +75 -0
- package/lib/app/TimeEstimator.d.ts +53 -0
- package/lib/app/TimeEstimator.d.ts.map +1 -0
- package/lib/app/TimeEstimator.js +70 -0
- package/lib/app/index.d.ts +16 -0
- package/lib/app/index.d.ts.map +1 -0
- package/lib/app/index.js +16 -0
- package/lib/app/makeProject.d.ts +15 -0
- package/lib/app/makeProject.d.ts.map +1 -0
- package/lib/app/makeProject.js +72 -0
- package/lib/app/project-settings.d.ts +8 -0
- package/lib/app/project-settings.d.ts.map +1 -0
- package/lib/app/project-settings.js +13 -0
- package/lib/decorators/decorate.d.ts +2 -0
- package/lib/decorators/decorate.d.ts.map +1 -0
- package/lib/decorators/decorate.js +10 -0
- package/lib/decorators/deprecated.d.ts +5 -0
- package/lib/decorators/deprecated.d.ts.map +1 -0
- package/lib/decorators/deprecated.js +23 -0
- package/lib/decorators/index.d.ts +9 -0
- package/lib/decorators/index.d.ts.map +1 -0
- package/lib/decorators/index.js +9 -0
- package/lib/decorators/lazy.d.ts +14 -0
- package/lib/decorators/lazy.d.ts.map +1 -0
- package/lib/decorators/lazy.js +27 -0
- package/lib/decorators/threadable.d.ts +2 -0
- package/lib/decorators/threadable.d.ts.map +1 -0
- package/lib/decorators/threadable.js +7 -0
- package/lib/events/AsyncEventDispatcher.d.ts +45 -0
- package/lib/events/AsyncEventDispatcher.d.ts.map +1 -0
- package/lib/events/AsyncEventDispatcher.js +33 -0
- package/lib/events/EventDispatcher.d.ts +38 -0
- package/lib/events/EventDispatcher.d.ts.map +1 -0
- package/lib/events/EventDispatcher.js +29 -0
- package/lib/events/EventDispatcherBase.d.ts +55 -0
- package/lib/events/EventDispatcherBase.d.ts.map +1 -0
- package/lib/events/EventDispatcherBase.js +68 -0
- package/lib/events/FlagDispatcher.d.ts +54 -0
- package/lib/events/FlagDispatcher.d.ts.map +1 -0
- package/lib/events/FlagDispatcher.js +63 -0
- package/lib/events/ValueDispatcher.d.ts +81 -0
- package/lib/events/ValueDispatcher.d.ts.map +1 -0
- package/lib/events/ValueDispatcher.js +97 -0
- package/lib/events/index.d.ts +11 -0
- package/lib/events/index.d.ts.map +1 -0
- package/lib/events/index.js +11 -0
- package/lib/exporter/Exporter.d.ts +101 -0
- package/lib/exporter/Exporter.d.ts.map +1 -0
- package/lib/exporter/Exporter.js +2 -0
- package/lib/exporter/FFmpegExporter.d.ts +50 -0
- package/lib/exporter/FFmpegExporter.d.ts.map +1 -0
- package/lib/exporter/FFmpegExporter.js +140 -0
- package/lib/exporter/ImageExporter.d.ts +34 -0
- package/lib/exporter/ImageExporter.d.ts.map +1 -0
- package/lib/exporter/ImageExporter.js +80 -0
- package/lib/exporter/WasmExporter.d.ts +19 -0
- package/lib/exporter/WasmExporter.d.ts.map +1 -0
- package/lib/exporter/WasmExporter.js +78 -0
- package/lib/exporter/download-videos.d.ts +3 -0
- package/lib/exporter/download-videos.d.ts.map +1 -0
- package/lib/exporter/download-videos.js +45 -0
- package/lib/exporter/index.d.ts +5 -0
- package/lib/exporter/index.d.ts.map +1 -0
- package/lib/exporter/index.js +5 -0
- package/lib/flow/all.d.ts +18 -0
- package/lib/flow/all.d.ts.map +1 -0
- package/lib/flow/all.js +25 -0
- package/lib/flow/any.d.ts +18 -0
- package/lib/flow/any.d.ts.map +1 -0
- package/lib/flow/any.js +25 -0
- package/lib/flow/chain.d.ts +36 -0
- package/lib/flow/chain.d.ts.map +1 -0
- package/lib/flow/chain.js +46 -0
- package/lib/flow/delay.d.ts +29 -0
- package/lib/flow/delay.d.ts.map +1 -0
- package/lib/flow/delay.js +39 -0
- package/lib/flow/every.d.ts +41 -0
- package/lib/flow/every.d.ts.map +1 -0
- package/lib/flow/every.js +61 -0
- package/lib/flow/index.d.ts +17 -0
- package/lib/flow/index.d.ts.map +1 -0
- package/lib/flow/index.js +17 -0
- package/lib/flow/join.d.ts +35 -0
- package/lib/flow/join.d.ts.map +1 -0
- package/lib/flow/join.js +33 -0
- package/lib/flow/loop.d.ts +58 -0
- package/lib/flow/loop.d.ts.map +1 -0
- package/lib/flow/loop.js +51 -0
- package/lib/flow/loopFor.d.ts +25 -0
- package/lib/flow/loopFor.d.ts.map +1 -0
- package/lib/flow/loopFor.js +42 -0
- package/lib/flow/names.d.ts +3 -0
- package/lib/flow/names.d.ts.map +1 -0
- package/lib/flow/names.js +11 -0
- package/lib/flow/run.d.ts +45 -0
- package/lib/flow/run.d.ts.map +1 -0
- package/lib/flow/run.js +14 -0
- package/lib/flow/scheduling.d.ts +18 -0
- package/lib/flow/scheduling.d.ts.map +1 -0
- package/lib/flow/scheduling.js +33 -0
- package/lib/flow/sequence.d.ts +22 -0
- package/lib/flow/sequence.d.ts.map +1 -0
- package/lib/flow/sequence.js +31 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +16 -0
- package/lib/media/index.d.ts +7 -0
- package/lib/media/index.d.ts.map +1 -0
- package/lib/media/index.js +7 -0
- package/lib/media/loadImage.d.ts +8 -0
- package/lib/media/loadImage.d.ts.map +1 -0
- package/lib/media/loadImage.js +29 -0
- package/lib/plugin/DefaultPlugin.d.ts +10 -0
- package/lib/plugin/DefaultPlugin.d.ts.map +1 -0
- package/lib/plugin/DefaultPlugin.js +17 -0
- package/lib/plugin/Plugin.d.ts +53 -0
- package/lib/plugin/Plugin.d.ts.map +1 -0
- package/lib/plugin/Plugin.js +2 -0
- package/lib/plugin/index.d.ts +3 -0
- package/lib/plugin/index.d.ts.map +1 -0
- package/lib/plugin/index.js +3 -0
- package/lib/plugin/makePlugin.d.ts +15 -0
- package/lib/plugin/makePlugin.d.ts.map +1 -0
- package/lib/plugin/makePlugin.js +16 -0
- package/lib/scenes/GeneratorScene.d.ts +95 -0
- package/lib/scenes/GeneratorScene.d.ts.map +1 -0
- package/lib/scenes/GeneratorScene.js +273 -0
- package/lib/scenes/Inspectable.d.ts +71 -0
- package/lib/scenes/Inspectable.d.ts.map +1 -0
- package/lib/scenes/Inspectable.js +4 -0
- package/lib/scenes/LifecycleEvents.d.ts +18 -0
- package/lib/scenes/LifecycleEvents.d.ts.map +1 -0
- package/lib/scenes/LifecycleEvents.js +45 -0
- package/lib/scenes/Random.d.ts +66 -0
- package/lib/scenes/Random.d.ts.map +1 -0
- package/lib/scenes/Random.js +101 -0
- package/lib/scenes/Scene.d.ts +298 -0
- package/lib/scenes/Scene.d.ts.map +1 -0
- package/lib/scenes/Scene.js +25 -0
- package/lib/scenes/SceneState.d.ts +34 -0
- package/lib/scenes/SceneState.d.ts.map +1 -0
- package/lib/scenes/SceneState.js +35 -0
- package/lib/scenes/Shaders.d.ts +63 -0
- package/lib/scenes/Shaders.d.ts.map +1 -0
- package/lib/scenes/Shaders.js +158 -0
- package/lib/scenes/Slides.d.ts +33 -0
- package/lib/scenes/Slides.d.ts.map +1 -0
- package/lib/scenes/Slides.js +115 -0
- package/lib/scenes/Threadable.d.ts +19 -0
- package/lib/scenes/Threadable.d.ts.map +1 -0
- package/lib/scenes/Threadable.js +4 -0
- package/lib/scenes/Variables.d.ts +24 -0
- package/lib/scenes/Variables.d.ts.map +1 -0
- package/lib/scenes/Variables.js +39 -0
- package/lib/scenes/index.d.ts +16 -0
- package/lib/scenes/index.d.ts.map +1 -0
- package/lib/scenes/index.js +16 -0
- package/lib/signals/CompoundSignalContext.d.ts +21 -0
- package/lib/signals/CompoundSignalContext.d.ts.map +1 -0
- package/lib/signals/CompoundSignalContext.js +73 -0
- package/lib/signals/ComputedContext.d.ts +14 -0
- package/lib/signals/ComputedContext.d.ts.map +1 -0
- package/lib/signals/ComputedContext.js +36 -0
- package/lib/signals/DependencyContext.d.ts +32 -0
- package/lib/signals/DependencyContext.d.ts.map +1 -0
- package/lib/signals/DependencyContext.js +87 -0
- package/lib/signals/SignalContext.d.ts +120 -0
- package/lib/signals/SignalContext.d.ts.map +1 -0
- package/lib/signals/SignalContext.js +245 -0
- package/lib/signals/createComputed.d.ts +3 -0
- package/lib/signals/createComputed.d.ts.map +1 -0
- package/lib/signals/createComputed.js +5 -0
- package/lib/signals/createComputedAsync.d.ts +4 -0
- package/lib/signals/createComputedAsync.d.ts.map +1 -0
- package/lib/signals/createComputedAsync.js +15 -0
- package/lib/signals/createSignal.d.ts +5 -0
- package/lib/signals/createSignal.d.ts.map +1 -0
- package/lib/signals/createSignal.js +6 -0
- package/lib/signals/index.d.ts +16 -0
- package/lib/signals/index.d.ts.map +1 -0
- package/lib/signals/index.js +16 -0
- package/lib/signals/symbols.d.ts +2 -0
- package/lib/signals/symbols.d.ts.map +1 -0
- package/lib/signals/symbols.js +2 -0
- package/lib/signals/types.d.ts +51 -0
- package/lib/signals/types.d.ts.map +1 -0
- package/lib/signals/types.js +2 -0
- package/lib/signals/utils.d.ts +5 -0
- package/lib/signals/utils.d.ts.map +1 -0
- package/lib/signals/utils.js +10 -0
- package/lib/threading/Thread.d.ts +77 -0
- package/lib/threading/Thread.d.ts.map +1 -0
- package/lib/threading/Thread.js +169 -0
- package/lib/threading/ThreadGenerator.d.ts +39 -0
- package/lib/threading/ThreadGenerator.d.ts.map +1 -0
- package/lib/threading/ThreadGenerator.js +17 -0
- package/lib/threading/cancel.d.ts +17 -0
- package/lib/threading/cancel.d.ts.map +1 -0
- package/lib/threading/cancel.js +26 -0
- package/lib/threading/index.d.ts +11 -0
- package/lib/threading/index.d.ts.map +1 -0
- package/lib/threading/index.js +11 -0
- package/lib/threading/spawn.d.ts +28 -0
- package/lib/threading/spawn.d.ts.map +1 -0
- package/lib/threading/spawn.js +30 -0
- package/lib/threading/threads.d.ts +46 -0
- package/lib/threading/threads.d.ts.map +1 -0
- package/lib/threading/threads.js +89 -0
- package/lib/transitions/fadeTransition.d.ts +8 -0
- package/lib/transitions/fadeTransition.d.ts.map +1 -0
- package/lib/transitions/fadeTransition.js +16 -0
- package/lib/transitions/index.d.ts +11 -0
- package/lib/transitions/index.d.ts.map +1 -0
- package/lib/transitions/index.js +11 -0
- package/lib/transitions/slideTransition.d.ts +18 -0
- package/lib/transitions/slideTransition.d.ts.map +1 -0
- package/lib/transitions/slideTransition.js +14 -0
- package/lib/transitions/useTransition.d.ts +10 -0
- package/lib/transitions/useTransition.d.ts.map +1 -0
- package/lib/transitions/useTransition.js +27 -0
- package/lib/transitions/zoomInTransition.d.ts +10 -0
- package/lib/transitions/zoomInTransition.d.ts.map +1 -0
- package/lib/transitions/zoomInTransition.js +33 -0
- package/lib/transitions/zoomOutTransition.d.ts +10 -0
- package/lib/transitions/zoomOutTransition.d.ts.map +1 -0
- package/lib/transitions/zoomOutTransition.js +33 -0
- package/lib/tsconfig.build.tsbuildinfo +1 -0
- package/lib/tweening/helpers.d.ts +5 -0
- package/lib/tweening/helpers.d.ts.map +1 -0
- package/lib/tweening/helpers.js +16 -0
- package/lib/tweening/index.d.ts +11 -0
- package/lib/tweening/index.d.ts.map +1 -0
- package/lib/tweening/index.js +11 -0
- package/lib/tweening/interpolationFunctions.d.ts +38 -0
- package/lib/tweening/interpolationFunctions.d.ts.map +1 -0
- package/lib/tweening/interpolationFunctions.js +107 -0
- package/lib/tweening/spring.d.ts +20 -0
- package/lib/tweening/spring.d.ts.map +1 -0
- package/lib/tweening/spring.js +103 -0
- package/lib/tweening/timingFunctions.d.ts +46 -0
- package/lib/tweening/timingFunctions.d.ts.map +1 -0
- package/lib/tweening/timingFunctions.js +233 -0
- package/lib/tweening/tween.d.ts +3 -0
- package/lib/tweening/tween.d.ts.map +1 -0
- package/lib/tweening/tween.js +21 -0
- package/lib/types/BBox.d.ts +73 -0
- package/lib/types/BBox.d.ts.map +1 -0
- package/lib/types/BBox.js +249 -0
- package/lib/types/Canvas.d.ts +3 -0
- package/lib/types/Canvas.d.ts.map +1 -0
- package/lib/types/Canvas.js +2 -0
- package/lib/types/Color.d.ts +65 -0
- package/lib/types/Color.d.ts.map +1 -0
- package/lib/types/Color.js +185 -0
- package/lib/types/Matrix.d.ts +3 -0
- package/lib/types/Matrix.d.ts.map +1 -0
- package/lib/types/Matrix.js +10 -0
- package/lib/types/Matrix2D.d.ts +363 -0
- package/lib/types/Matrix2D.d.ts.map +1 -0
- package/lib/types/Matrix2D.js +554 -0
- package/lib/types/Origin.d.ts +17 -0
- package/lib/types/Origin.d.ts.map +1 -0
- package/lib/types/Origin.js +53 -0
- package/lib/types/Spacing.d.ts +36 -0
- package/lib/types/Spacing.d.ts.map +1 -0
- package/lib/types/Spacing.js +70 -0
- package/lib/types/Type.d.ts +9 -0
- package/lib/types/Type.d.ts.map +1 -0
- package/lib/types/Type.js +5 -0
- package/lib/types/Vector.d.ts +203 -0
- package/lib/types/Vector.d.ts.map +1 -0
- package/lib/types/Vector.js +355 -0
- package/lib/types/alignment-enums.d.ts +22 -0
- package/lib/types/alignment-enums.d.ts.map +1 -0
- package/lib/types/alignment-enums.js +25 -0
- package/lib/types/index.d.ts +17 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +17 -0
- package/lib/types/vector-transformations.d.ts +20 -0
- package/lib/types/vector-transformations.d.ts.map +1 -0
- package/lib/types/vector-transformations.js +31 -0
- package/lib/utils/DetailedError.d.ts +24 -0
- package/lib/utils/DetailedError.d.ts.map +1 -0
- package/lib/utils/DetailedError.js +16 -0
- package/lib/utils/ExperimentalError.d.ts +10 -0
- package/lib/utils/ExperimentalError.d.ts.map +1 -0
- package/lib/utils/ExperimentalError.js +32 -0
- package/lib/utils/Semaphore.d.ts +12 -0
- package/lib/utils/Semaphore.d.ts.map +1 -0
- package/lib/utils/Semaphore.js +25 -0
- package/lib/utils/beginSlide.d.ts +3 -0
- package/lib/utils/beginSlide.d.ts.map +1 -0
- package/lib/utils/beginSlide.js +12 -0
- package/lib/utils/capitalize.d.ts +2 -0
- package/lib/utils/capitalize.d.ts.map +1 -0
- package/lib/utils/capitalize.js +4 -0
- package/lib/utils/createRef.d.ts +15 -0
- package/lib/utils/createRef.d.ts.map +1 -0
- package/lib/utils/createRef.js +21 -0
- package/lib/utils/createRefArray.d.ts +27 -0
- package/lib/utils/createRefArray.d.ts.map +1 -0
- package/lib/utils/createRefArray.js +49 -0
- package/lib/utils/createRefMap.d.ts +50 -0
- package/lib/utils/createRefMap.d.ts.map +1 -0
- package/lib/utils/createRefMap.js +77 -0
- package/lib/utils/debug.d.ts +24 -0
- package/lib/utils/debug.d.ts.map +1 -0
- package/lib/utils/debug.js +47 -0
- package/lib/utils/deprecate.d.ts +9 -0
- package/lib/utils/deprecate.d.ts.map +1 -0
- package/lib/utils/deprecate.js +15 -0
- package/lib/utils/errorToLog.d.ts +3 -0
- package/lib/utils/errorToLog.d.ts.map +1 -0
- package/lib/utils/errorToLog.js +8 -0
- package/lib/utils/experimentalLog.d.ts +3 -0
- package/lib/utils/experimentalLog.d.ts.map +1 -0
- package/lib/utils/experimentalLog.js +10 -0
- package/lib/utils/getContext.d.ts +2 -0
- package/lib/utils/getContext.d.ts.map +1 -0
- package/lib/utils/getContext.js +8 -0
- package/lib/utils/index.d.ts +26 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/math.d.ts +15 -0
- package/lib/utils/math.d.ts.map +1 -0
- package/lib/utils/math.js +15 -0
- package/lib/utils/range.d.ts +40 -0
- package/lib/utils/range.d.ts.map +1 -0
- package/lib/utils/range.js +18 -0
- package/lib/utils/useContext.d.ts +13 -0
- package/lib/utils/useContext.d.ts.map +1 -0
- package/lib/utils/useContext.js +18 -0
- package/lib/utils/usePlayback.d.ts +8 -0
- package/lib/utils/usePlayback.d.ts.map +1 -0
- package/lib/utils/usePlayback.js +20 -0
- package/lib/utils/useScene.d.ts +17 -0
- package/lib/utils/useScene.d.ts.map +1 -0
- package/lib/utils/useScene.js +33 -0
- package/lib/utils/useThread.d.ts +8 -0
- package/lib/utils/useThread.d.ts.map +1 -0
- package/lib/utils/useThread.js +24 -0
- package/lib/utils/useTime.d.ts +19 -0
- package/lib/utils/useTime.d.ts.map +1 -0
- package/lib/utils/useTime.js +22 -0
- package/package.json +36 -0
- package/project.d.ts +24 -0
- package/shaders/common.glsl +15 -0
- package/shaders/fragment.glsl +8 -0
- package/tsconfig.project.json +14 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ThreadGenerator } from './ThreadGenerator';
|
|
2
|
+
export declare function noop(): ThreadGenerator;
|
|
3
|
+
/**
|
|
4
|
+
* A class representing an individual thread.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Thread is a wrapper for a generator that can be executed concurrently.
|
|
8
|
+
*
|
|
9
|
+
* Aside from the main thread, all threads need to have a parent.
|
|
10
|
+
* If a parent finishes execution, all of its child threads are terminated.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Thread {
|
|
13
|
+
/**
|
|
14
|
+
* The generator wrapped by this thread.
|
|
15
|
+
*/
|
|
16
|
+
readonly runner: ThreadGenerator & {
|
|
17
|
+
task?: Thread;
|
|
18
|
+
};
|
|
19
|
+
children: Thread[];
|
|
20
|
+
/**
|
|
21
|
+
* The next value to be passed to the wrapped generator.
|
|
22
|
+
*/
|
|
23
|
+
value: unknown;
|
|
24
|
+
/**
|
|
25
|
+
* The current time of this thread.
|
|
26
|
+
*
|
|
27
|
+
* @remarks
|
|
28
|
+
* Used by {@link flow.waitFor} and other time-based functions to properly
|
|
29
|
+
* support durations shorter than one frame.
|
|
30
|
+
*/
|
|
31
|
+
readonly time: import("../signals").SimpleSignal<number, void>;
|
|
32
|
+
/**
|
|
33
|
+
* The fixed time of this thread.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Fixed time is a multiple of the frame duration. It can be used to account
|
|
37
|
+
* for the difference between this thread's {@link time} and the time of the
|
|
38
|
+
* current animation frame.
|
|
39
|
+
*/
|
|
40
|
+
get fixed(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Check if this thread or any of its ancestors has been canceled.
|
|
43
|
+
*/
|
|
44
|
+
get canceled(): boolean;
|
|
45
|
+
get paused(): boolean;
|
|
46
|
+
parent: Thread | null;
|
|
47
|
+
private isCanceled;
|
|
48
|
+
private isPaused;
|
|
49
|
+
private fixedTime;
|
|
50
|
+
private queue;
|
|
51
|
+
constructor(
|
|
52
|
+
/**
|
|
53
|
+
* The generator wrapped by this thread.
|
|
54
|
+
*/
|
|
55
|
+
runner: ThreadGenerator & {
|
|
56
|
+
task?: Thread;
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Progress the wrapped generator once.
|
|
60
|
+
*/
|
|
61
|
+
next(): IteratorYieldResult<void | Promise<any> | ThreadGenerator | import("./ThreadGenerator").Promisable<any>> | IteratorReturnResult<void> | {
|
|
62
|
+
value: null;
|
|
63
|
+
done: boolean;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Prepare the thread for the next update cycle.
|
|
67
|
+
*
|
|
68
|
+
* @param dt - The delta time of the next cycle.
|
|
69
|
+
*/
|
|
70
|
+
update(dt: number): void;
|
|
71
|
+
spawn(child: ThreadGenerator | (() => ThreadGenerator)): ThreadGenerator;
|
|
72
|
+
add(child: Thread): void;
|
|
73
|
+
drain(callback: (task: ThreadGenerator) => void): void;
|
|
74
|
+
cancel(): void;
|
|
75
|
+
pause(value: boolean): void;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=Thread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Thread.d.ts","sourceRoot":"","sources":["../../src/threading/Thread.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAgDvD,wBAAiB,IAAI,IAAI,eAAe,CAEvC;AAED;;;;;;;;GAQG;AACH,qBAAa,MAAM;IA8Cf;;OAEG;aACa,MAAM,EAAE,eAAe,GAAG;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC;IAhDpD,QAAQ,EAAE,MAAM,EAAE,CAAM;IAC/B;;OAEG;IACI,KAAK,EAAE,OAAO,CAAC;IAEtB;;;;;;OAMG;IACH,SAAgB,IAAI,kDAAmB;IAEvC;;;;;;;OAOG;IACH,IAAW,KAAK,WAEf;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAEM,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAyB;;IAGpC;;OAEG;IACa,MAAM,EAAE,eAAe,GAAG;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC;IAc3D;;OAEG;IACI,IAAI;;;;IAeX;;;;OAIG;IACI,MAAM,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CACV,KAAK,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,GAC/C,eAAe;IAQX,GAAG,CAAC,KAAK,EAAE,MAAM;IAUjB,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;IAK/C,MAAM;IAON,KAAK,CAAC,KAAK,EAAE,OAAO;CAG5B"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { decorate, threadable } from '../decorators';
|
|
2
|
+
import { getTaskName, setTaskName } from '../flow';
|
|
3
|
+
import { createSignal } from '../signals';
|
|
4
|
+
import { endThread, startThread, useLogger } from '../utils';
|
|
5
|
+
import { isThreadGenerator } from './ThreadGenerator';
|
|
6
|
+
const reusedGenerator = `
|
|
7
|
+
This usually happens when you mistakenly reuse a generator that is already
|
|
8
|
+
running.
|
|
9
|
+
|
|
10
|
+
For example, using \`yield\` here will run the opacity generator concurrently and
|
|
11
|
+
store it in the \`task\` variable (in case you want to cancel or await it later):
|
|
12
|
+
|
|
13
|
+
\`\`\`ts
|
|
14
|
+
const task = yield rect().opacity(1, 1);
|
|
15
|
+
\`\`\`
|
|
16
|
+
|
|
17
|
+
Trying to \`yield\` this task again will cause the current error:
|
|
18
|
+
|
|
19
|
+
\`\`\`ts
|
|
20
|
+
yield task;
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
Passing it to other flow functions will also cause the error:
|
|
24
|
+
|
|
25
|
+
\`\`\`ts
|
|
26
|
+
// prettier-ignore
|
|
27
|
+
yield* all(task);
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
Try to investigate your code looking for \`yield\` statements whose return value
|
|
31
|
+
is reused in this way. Here's an example of a common mistake:
|
|
32
|
+
|
|
33
|
+
\`\`\`ts wrong
|
|
34
|
+
// prettier-ignore
|
|
35
|
+
yield* all(
|
|
36
|
+
yield rect().opacity(1, 1),
|
|
37
|
+
yield rect().x(200, 1),
|
|
38
|
+
);
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
\`\`\`ts correct
|
|
42
|
+
// prettier-ignore
|
|
43
|
+
yield* all(
|
|
44
|
+
rect().opacity(1, 1),
|
|
45
|
+
rect().x(200, 1),
|
|
46
|
+
);
|
|
47
|
+
\`\`\`
|
|
48
|
+
`;
|
|
49
|
+
decorate(noop, threadable());
|
|
50
|
+
export function* noop() {
|
|
51
|
+
// do nothing
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A class representing an individual thread.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* Thread is a wrapper for a generator that can be executed concurrently.
|
|
58
|
+
*
|
|
59
|
+
* Aside from the main thread, all threads need to have a parent.
|
|
60
|
+
* If a parent finishes execution, all of its child threads are terminated.
|
|
61
|
+
*/
|
|
62
|
+
export class Thread {
|
|
63
|
+
/**
|
|
64
|
+
* The fixed time of this thread.
|
|
65
|
+
*
|
|
66
|
+
* @remarks
|
|
67
|
+
* Fixed time is a multiple of the frame duration. It can be used to account
|
|
68
|
+
* for the difference between this thread's {@link time} and the time of the
|
|
69
|
+
* current animation frame.
|
|
70
|
+
*/
|
|
71
|
+
get fixed() {
|
|
72
|
+
return this.fixedTime;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if this thread or any of its ancestors has been canceled.
|
|
76
|
+
*/
|
|
77
|
+
get canceled() {
|
|
78
|
+
return this.isCanceled || (this.parent?.canceled ?? false);
|
|
79
|
+
}
|
|
80
|
+
get paused() {
|
|
81
|
+
return this.isPaused || (this.parent?.paused ?? false);
|
|
82
|
+
}
|
|
83
|
+
constructor(
|
|
84
|
+
/**
|
|
85
|
+
* The generator wrapped by this thread.
|
|
86
|
+
*/
|
|
87
|
+
runner) {
|
|
88
|
+
this.runner = runner;
|
|
89
|
+
this.children = [];
|
|
90
|
+
/**
|
|
91
|
+
* The current time of this thread.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* Used by {@link flow.waitFor} and other time-based functions to properly
|
|
95
|
+
* support durations shorter than one frame.
|
|
96
|
+
*/
|
|
97
|
+
this.time = createSignal(0);
|
|
98
|
+
this.parent = null;
|
|
99
|
+
this.isCanceled = false;
|
|
100
|
+
this.isPaused = false;
|
|
101
|
+
this.fixedTime = 0;
|
|
102
|
+
this.queue = [];
|
|
103
|
+
if (this.runner.task) {
|
|
104
|
+
useLogger().error({
|
|
105
|
+
message: `The generator "${getTaskName(this.runner)}" is already being executed by another thread.`,
|
|
106
|
+
remarks: reusedGenerator,
|
|
107
|
+
});
|
|
108
|
+
this.runner = noop();
|
|
109
|
+
}
|
|
110
|
+
this.runner.task = this;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Progress the wrapped generator once.
|
|
114
|
+
*/
|
|
115
|
+
next() {
|
|
116
|
+
if (this.paused) {
|
|
117
|
+
return {
|
|
118
|
+
value: null,
|
|
119
|
+
done: false,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
startThread(this);
|
|
123
|
+
const result = this.runner.next(this.value);
|
|
124
|
+
endThread(this);
|
|
125
|
+
this.value = null;
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Prepare the thread for the next update cycle.
|
|
130
|
+
*
|
|
131
|
+
* @param dt - The delta time of the next cycle.
|
|
132
|
+
*/
|
|
133
|
+
update(dt) {
|
|
134
|
+
if (!this.paused) {
|
|
135
|
+
this.time(this.time() + dt);
|
|
136
|
+
this.fixedTime += dt;
|
|
137
|
+
}
|
|
138
|
+
this.children = this.children.filter(child => !child.canceled);
|
|
139
|
+
}
|
|
140
|
+
spawn(child) {
|
|
141
|
+
if (!isThreadGenerator(child)) {
|
|
142
|
+
child = child();
|
|
143
|
+
}
|
|
144
|
+
this.queue.push(child);
|
|
145
|
+
return child;
|
|
146
|
+
}
|
|
147
|
+
add(child) {
|
|
148
|
+
child.parent = this;
|
|
149
|
+
child.isCanceled = false;
|
|
150
|
+
child.time(this.time());
|
|
151
|
+
child.fixedTime = this.fixedTime;
|
|
152
|
+
this.children.push(child);
|
|
153
|
+
setTaskName(child.runner, `unknown ${this.children.length}`);
|
|
154
|
+
}
|
|
155
|
+
drain(callback) {
|
|
156
|
+
this.queue.forEach(callback);
|
|
157
|
+
this.queue = [];
|
|
158
|
+
}
|
|
159
|
+
cancel() {
|
|
160
|
+
this.runner.return();
|
|
161
|
+
this.isCanceled = true;
|
|
162
|
+
this.parent = null;
|
|
163
|
+
this.drain(task => task.return());
|
|
164
|
+
}
|
|
165
|
+
pause(value) {
|
|
166
|
+
this.isPaused = value;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9UaHJlYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBDdkIsQ0FBQztBQUVGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM3QixNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUk7SUFDbkIsYUFBYTtBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBZ0JqQjs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQVFEO0lBQ0U7O09BRUc7SUFDYSxNQUF5QztRQUF6QyxXQUFNLEdBQU4sTUFBTSxDQUFtQztRQWhEcEQsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQU0vQjs7Ozs7O1dBTUc7UUFDYSxTQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBeUJoQyxXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM1QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLFVBQUssR0FBc0IsRUFBRSxDQUFDO1FBUXBDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLE9BQU8sRUFBRSxrQkFBa0IsV0FBVyxDQUNwQyxJQUFJLENBQUMsTUFBTSxDQUNaLGdEQUFnRDtnQkFDakQsT0FBTyxFQUFFLGVBQWU7YUFDekIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNMLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxFQUFVO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sS0FBSyxDQUNWLEtBQWdEO1FBRWhELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQWE7UUFDdEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDcEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4QixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUF5QztRQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Thread } from './Thread';
|
|
2
|
+
export interface Promisable<T> {
|
|
3
|
+
toPromise(): Promise<T>;
|
|
4
|
+
}
|
|
5
|
+
export declare function isPromisable(value: any): value is Promisable<any>;
|
|
6
|
+
/**
|
|
7
|
+
* The main generator type produced by all generator functions in Motion Canvas.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* Yielded values can be used to control the flow of animation:
|
|
11
|
+
*
|
|
12
|
+
* Progress to the next frame:
|
|
13
|
+
* ```ts
|
|
14
|
+
* yield;
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Run another generator synchronously:
|
|
18
|
+
* ```ts
|
|
19
|
+
* yield* generatorFunction();
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Run another generator concurrently:
|
|
23
|
+
* ```ts
|
|
24
|
+
* const task = yield generatorFunction();
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Await a Promise:
|
|
28
|
+
* ```ts
|
|
29
|
+
* const result = yield asyncFunction();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export type ThreadGenerator = Generator<ThreadGenerator | Promise<any> | Promisable<any> | void, void, Thread | any>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if the given value is a {@link ThreadGenerator}.
|
|
35
|
+
*
|
|
36
|
+
* @param value - A possible thread {@link ThreadGenerator}.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isThreadGenerator(value: unknown): value is ThreadGenerator;
|
|
39
|
+
//# sourceMappingURL=ThreadGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadGenerator.d.ts","sourceRoot":"","sources":["../../src/threading/ThreadGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAMjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,CACrC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,EACvD,IAAI,EACJ,MAAM,GAAG,GAAG,CACb,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function isPromisable(value) {
|
|
2
|
+
return (value &&
|
|
3
|
+
(typeof value === 'object' || typeof value === 'function') &&
|
|
4
|
+
'toPromise' in value);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Check if the given value is a {@link ThreadGenerator}.
|
|
8
|
+
*
|
|
9
|
+
* @param value - A possible thread {@link ThreadGenerator}.
|
|
10
|
+
*/
|
|
11
|
+
export function isThreadGenerator(value) {
|
|
12
|
+
return (value !== null &&
|
|
13
|
+
typeof value === 'object' &&
|
|
14
|
+
Symbol.iterator in value &&
|
|
15
|
+
'next' in value);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9UaHJlYWRHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sQ0FDTCxLQUFLO1FBQ0wsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDO1FBQzFELFdBQVcsSUFBSSxLQUFLLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBa0NEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxPQUFPLENBQ0wsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSztRQUN4QixNQUFNLElBQUksS0FBSyxDQUNoQixDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ThreadGenerator } from './ThreadGenerator';
|
|
2
|
+
/**
|
|
3
|
+
* Cancel all listed tasks.
|
|
4
|
+
*
|
|
5
|
+
* Example:
|
|
6
|
+
* ```ts
|
|
7
|
+
* const task = yield generatorFunction();
|
|
8
|
+
*
|
|
9
|
+
* // do something concurrently
|
|
10
|
+
*
|
|
11
|
+
* yield* cancel(task);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @param tasks - A list of tasks to cancel.
|
|
15
|
+
*/
|
|
16
|
+
export declare function cancel(...tasks: ThreadGenerator[]): void;
|
|
17
|
+
//# sourceMappingURL=cancel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/threading/cancel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,QASjD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useThread } from '../utils';
|
|
2
|
+
/**
|
|
3
|
+
* Cancel all listed tasks.
|
|
4
|
+
*
|
|
5
|
+
* Example:
|
|
6
|
+
* ```ts
|
|
7
|
+
* const task = yield generatorFunction();
|
|
8
|
+
*
|
|
9
|
+
* // do something concurrently
|
|
10
|
+
*
|
|
11
|
+
* yield* cancel(task);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @param tasks - A list of tasks to cancel.
|
|
15
|
+
*/
|
|
16
|
+
export function cancel(...tasks) {
|
|
17
|
+
const thread = useThread();
|
|
18
|
+
for (const task of tasks) {
|
|
19
|
+
const child = thread.children.find(thread => thread.runner === task);
|
|
20
|
+
if (child && !child.canceled) {
|
|
21
|
+
child.cancel();
|
|
22
|
+
child.time(thread.time());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9jYW5jZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUduQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQXdCO0lBQ2hELE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/threading/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thread management.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export * from './cancel';
|
|
7
|
+
export * from './spawn';
|
|
8
|
+
export * from './Thread';
|
|
9
|
+
export * from './ThreadGenerator';
|
|
10
|
+
export * from './threads';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZWFkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsV0FBVyxDQUFDIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ThreadGenerator } from './ThreadGenerator';
|
|
2
|
+
/**
|
|
3
|
+
* Run the given task concurrently.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* Using an existing task:
|
|
7
|
+
* ```ts
|
|
8
|
+
* spawn(rect().opacity(1, 1));
|
|
9
|
+
* ```
|
|
10
|
+
* Using a generator function:
|
|
11
|
+
* ```ts
|
|
12
|
+
* spawn(function* () {
|
|
13
|
+
* yield* rect().opacity(1, 1);
|
|
14
|
+
* yield* waitFor('click');
|
|
15
|
+
* yield* rect().opacity(0, 1);
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
* Await the spawned task:
|
|
19
|
+
* ```ts
|
|
20
|
+
* const task = spawn(rect().opacity(1, 1));
|
|
21
|
+
* // do some other things
|
|
22
|
+
* yield* join(task); // await the task
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param task - Either a generator function or a task to run.
|
|
26
|
+
*/
|
|
27
|
+
export declare function spawn(task: ThreadGenerator | (() => ThreadGenerator)): ThreadGenerator;
|
|
28
|
+
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/threading/spawn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CACnB,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,GAC9C,eAAe,CAEjB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useThread } from '../utils';
|
|
2
|
+
/**
|
|
3
|
+
* Run the given task concurrently.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* Using an existing task:
|
|
7
|
+
* ```ts
|
|
8
|
+
* spawn(rect().opacity(1, 1));
|
|
9
|
+
* ```
|
|
10
|
+
* Using a generator function:
|
|
11
|
+
* ```ts
|
|
12
|
+
* spawn(function* () {
|
|
13
|
+
* yield* rect().opacity(1, 1);
|
|
14
|
+
* yield* waitFor('click');
|
|
15
|
+
* yield* rect().opacity(0, 1);
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
* Await the spawned task:
|
|
19
|
+
* ```ts
|
|
20
|
+
* const task = spawn(rect().opacity(1, 1));
|
|
21
|
+
* // do some other things
|
|
22
|
+
* yield* join(task); // await the task
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param task - Either a generator function or a task to run.
|
|
26
|
+
*/
|
|
27
|
+
export function spawn(task) {
|
|
28
|
+
return useThread().spawn(task);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZWFkaW5nL3NwYXduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLElBQStDO0lBRS9DLE9BQU8sU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUMifQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Thread } from './Thread';
|
|
2
|
+
import type { ThreadGenerator } from './ThreadGenerator';
|
|
3
|
+
/**
|
|
4
|
+
* Check if the given value is a [Promise][promise].
|
|
5
|
+
*
|
|
6
|
+
* @param value - A possible [Promise][promise].
|
|
7
|
+
*
|
|
8
|
+
* [promise]: https://developer.mozilla.org/en-US/docs/web/javascript/reference/global_objects/promise
|
|
9
|
+
*/
|
|
10
|
+
export declare function isPromise(value: any): value is Promise<any>;
|
|
11
|
+
/**
|
|
12
|
+
* A generator function or a normal function that returns a generator.
|
|
13
|
+
*/
|
|
14
|
+
export interface ThreadsFactory {
|
|
15
|
+
(): ThreadGenerator;
|
|
16
|
+
}
|
|
17
|
+
export interface ThreadsCallback {
|
|
18
|
+
(root: Thread): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a context in which generators can be run concurrently.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* From the perspective of the external generator, `threads` is executed
|
|
25
|
+
* synchronously. By default, each scene generator is wrapped in its own
|
|
26
|
+
* `threads` generator.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // first
|
|
31
|
+
*
|
|
32
|
+
* yield* threads(function* () {
|
|
33
|
+
* const task = yield generatorFunction();
|
|
34
|
+
* // second
|
|
35
|
+
* }); // <- `task` will be terminated here because the scope
|
|
36
|
+
* // of this `threads` generator has ended
|
|
37
|
+
*
|
|
38
|
+
* // third
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param factory - A function that returns the generator to run.
|
|
42
|
+
* @param callback - Called whenever threads are created, canceled or finished.
|
|
43
|
+
* Used for debugging purposes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function threads(factory: ThreadsFactory, callback?: ThreadsCallback): ThreadGenerator;
|
|
46
|
+
//# sourceMappingURL=threads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/threading/threads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGvD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAE3D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,eAAe,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAGD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAiB,OAAO,CACtB,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,eAAe,GACzB,eAAe,CAkDjB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { decorate, threadable } from '../decorators';
|
|
2
|
+
import { setTaskName } from '../flow';
|
|
3
|
+
import { usePlayback } from '../utils';
|
|
4
|
+
import { Thread } from './Thread';
|
|
5
|
+
import { isThreadGenerator } from './ThreadGenerator';
|
|
6
|
+
/**
|
|
7
|
+
* Check if the given value is a [Promise][promise].
|
|
8
|
+
*
|
|
9
|
+
* @param value - A possible [Promise][promise].
|
|
10
|
+
*
|
|
11
|
+
* [promise]: https://developer.mozilla.org/en-US/docs/web/javascript/reference/global_objects/promise
|
|
12
|
+
*/
|
|
13
|
+
export function isPromise(value) {
|
|
14
|
+
return typeof value?.then === 'function';
|
|
15
|
+
}
|
|
16
|
+
decorate(threads, threadable());
|
|
17
|
+
/**
|
|
18
|
+
* Create a context in which generators can be run concurrently.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* From the perspective of the external generator, `threads` is executed
|
|
22
|
+
* synchronously. By default, each scene generator is wrapped in its own
|
|
23
|
+
* `threads` generator.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* // first
|
|
28
|
+
*
|
|
29
|
+
* yield* threads(function* () {
|
|
30
|
+
* const task = yield generatorFunction();
|
|
31
|
+
* // second
|
|
32
|
+
* }); // <- `task` will be terminated here because the scope
|
|
33
|
+
* // of this `threads` generator has ended
|
|
34
|
+
*
|
|
35
|
+
* // third
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param factory - A function that returns the generator to run.
|
|
39
|
+
* @param callback - Called whenever threads are created, canceled or finished.
|
|
40
|
+
* Used for debugging purposes.
|
|
41
|
+
*/
|
|
42
|
+
export function* threads(factory, callback) {
|
|
43
|
+
const playback = usePlayback();
|
|
44
|
+
const root = factory();
|
|
45
|
+
setTaskName(root, 'root');
|
|
46
|
+
const rootThread = new Thread(root);
|
|
47
|
+
callback?.(rootThread);
|
|
48
|
+
let threads = [rootThread];
|
|
49
|
+
while (threads.length > 0) {
|
|
50
|
+
const newThreads = [];
|
|
51
|
+
const queue = [...threads];
|
|
52
|
+
const dt = playback.deltaTime;
|
|
53
|
+
while (queue.length > 0) {
|
|
54
|
+
const thread = queue.pop();
|
|
55
|
+
if (!thread || thread.canceled) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const result = thread.next();
|
|
59
|
+
if (result.done) {
|
|
60
|
+
thread.cancel();
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (isThreadGenerator(result.value)) {
|
|
64
|
+
const child = new Thread(result.value);
|
|
65
|
+
thread.value = result.value;
|
|
66
|
+
thread.add(child);
|
|
67
|
+
queue.push(thread);
|
|
68
|
+
queue.push(child);
|
|
69
|
+
}
|
|
70
|
+
else if (result.value) {
|
|
71
|
+
thread.value = yield result.value;
|
|
72
|
+
queue.push(thread);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
thread.update(dt);
|
|
76
|
+
thread.drain(task => {
|
|
77
|
+
const child = new Thread(task);
|
|
78
|
+
thread.add(child);
|
|
79
|
+
newThreads.unshift(child);
|
|
80
|
+
});
|
|
81
|
+
newThreads.unshift(thread);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
threads = newThreads.filter(thread => !thread.canceled);
|
|
85
|
+
if (threads.length > 0)
|
|
86
|
+
yield;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aHJlYWRpbmcvdGhyZWFkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssRUFBRSxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQzNDLENBQUM7QUFhRCxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsT0FBTyxDQUN0QixPQUF1QixFQUN2QixRQUEwQjtJQUUxQixNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZCLElBQUksT0FBTyxHQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUU5QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVsQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUM7SUFDaEMsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ThreadGenerator } from '../threading';
|
|
2
|
+
/**
|
|
3
|
+
* Perform a transition that fades between the scenes.
|
|
4
|
+
*
|
|
5
|
+
* @param duration - The duration of the transition.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fadeTransition(duration?: number): ThreadGenerator;
|
|
8
|
+
//# sourceMappingURL=fadeTransition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fadeTransition.d.ts","sourceRoot":"","sources":["../../src/transitions/fadeTransition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAGlD;;;;GAIG;AACH,wBAAiB,cAAc,CAAC,QAAQ,SAAM,GAAG,eAAe,CAQ/D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createSignal } from '../signals';
|
|
2
|
+
import { useTransition } from './useTransition';
|
|
3
|
+
/**
|
|
4
|
+
* Perform a transition that fades between the scenes.
|
|
5
|
+
*
|
|
6
|
+
* @param duration - The duration of the transition.
|
|
7
|
+
*/
|
|
8
|
+
export function* fadeTransition(duration = 0.6) {
|
|
9
|
+
const progress = createSignal(0);
|
|
10
|
+
const endTransition = useTransition(ctx => {
|
|
11
|
+
ctx.globalAlpha = progress();
|
|
12
|
+
});
|
|
13
|
+
yield* progress(1, duration);
|
|
14
|
+
endTransition();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFkZVRyYW5zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNpdGlvbnMvZmFkZVRyYW5zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUM7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxHQUFHO0lBQzVDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0IsYUFBYSxFQUFFLENBQUM7QUFDbEIsQ0FBQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitions between scenes.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export * from './fadeTransition';
|
|
7
|
+
export * from './slideTransition';
|
|
8
|
+
export * from './useTransition';
|
|
9
|
+
export * from './zoomInTransition';
|
|
10
|
+
export * from './zoomOutTransition';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transitions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitions between scenes.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export * from './fadeTransition';
|
|
7
|
+
export * from './slideTransition';
|
|
8
|
+
export * from './useTransition';
|
|
9
|
+
export * from './zoomInTransition';
|
|
10
|
+
export * from './zoomOutTransition';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNpdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxxQkFBcUIsQ0FBQyJ9
|