@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,273 @@
|
|
|
1
|
+
import { decorate, threadable } from '../decorators';
|
|
2
|
+
import { EventDispatcher, ValueDispatcher } from '../events';
|
|
3
|
+
import { DependencyContext } from '../signals';
|
|
4
|
+
import { isPromisable, isPromise, threads } from '../threading';
|
|
5
|
+
import { endPlayback, endScene, startPlayback, startScene } from '../utils';
|
|
6
|
+
import { LifecycleEvents } from './LifecycleEvents';
|
|
7
|
+
import { SceneState } from './SceneState';
|
|
8
|
+
import { Shaders } from './Shaders';
|
|
9
|
+
import { Slides } from './Slides';
|
|
10
|
+
import { Variables } from './Variables';
|
|
11
|
+
/**
|
|
12
|
+
* The default implementation of the {@link Scene} interface.
|
|
13
|
+
*
|
|
14
|
+
* Uses generators to control the animation.
|
|
15
|
+
*/
|
|
16
|
+
export class GeneratorScene {
|
|
17
|
+
get firstFrame() {
|
|
18
|
+
return this.cache.current.firstFrame;
|
|
19
|
+
}
|
|
20
|
+
get lastFrame() {
|
|
21
|
+
return this.firstFrame + this.cache.current.duration;
|
|
22
|
+
}
|
|
23
|
+
get onCacheChanged() {
|
|
24
|
+
return this.cache.subscribable;
|
|
25
|
+
}
|
|
26
|
+
get onReloaded() {
|
|
27
|
+
return this.reloaded.subscribable;
|
|
28
|
+
}
|
|
29
|
+
get onRecalculated() {
|
|
30
|
+
return this.recalculated.subscribable;
|
|
31
|
+
}
|
|
32
|
+
get onThreadChanged() {
|
|
33
|
+
return this.thread.subscribable;
|
|
34
|
+
}
|
|
35
|
+
get onRenderLifecycle() {
|
|
36
|
+
return this.renderLifecycle.subscribable;
|
|
37
|
+
}
|
|
38
|
+
get onReset() {
|
|
39
|
+
return this.afterReset.subscribable;
|
|
40
|
+
}
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
42
|
+
get LifecycleEvents() {
|
|
43
|
+
this.logger.warn('LifecycleEvents is deprecated. Use lifecycleEvents instead.');
|
|
44
|
+
return this.lifecycleEvents;
|
|
45
|
+
}
|
|
46
|
+
get previous() {
|
|
47
|
+
return this.previousScene;
|
|
48
|
+
}
|
|
49
|
+
getMediaAssets() {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
stopAllMedia() { }
|
|
53
|
+
constructor(description) {
|
|
54
|
+
this.cache = new ValueDispatcher({
|
|
55
|
+
firstFrame: 0,
|
|
56
|
+
transitionDuration: 0,
|
|
57
|
+
duration: 0,
|
|
58
|
+
lastFrame: 0,
|
|
59
|
+
});
|
|
60
|
+
this.reloaded = new EventDispatcher();
|
|
61
|
+
this.recalculated = new EventDispatcher();
|
|
62
|
+
this.thread = new ValueDispatcher(null);
|
|
63
|
+
this.renderLifecycle = new EventDispatcher();
|
|
64
|
+
this.afterReset = new EventDispatcher();
|
|
65
|
+
this.lifecycleEvents = new LifecycleEvents(this);
|
|
66
|
+
this.previousScene = null;
|
|
67
|
+
this.runner = null;
|
|
68
|
+
this.state = SceneState.Initial;
|
|
69
|
+
this.cached = false;
|
|
70
|
+
// TODO(refactor): seems to be unused
|
|
71
|
+
this.counters = {};
|
|
72
|
+
this.name = description.name;
|
|
73
|
+
this.size = description.size;
|
|
74
|
+
this.resolutionScale = description.resolutionScale;
|
|
75
|
+
this.logger = description.logger;
|
|
76
|
+
this.playback = description.playback;
|
|
77
|
+
this.runnerFactory = description.config;
|
|
78
|
+
this.creationStack = description.stack;
|
|
79
|
+
this.experimentalFeatures = description.experimentalFeatures ?? false;
|
|
80
|
+
decorate(this.runnerFactory, threadable(this.name));
|
|
81
|
+
this.variables = new Variables(this);
|
|
82
|
+
this.shaders = new Shaders(this, description.sharedWebGLContext);
|
|
83
|
+
this.slides = new Slides(this);
|
|
84
|
+
this.previousOnTop = false;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Update the view.
|
|
88
|
+
*
|
|
89
|
+
* Invoked after each step of the main generator.
|
|
90
|
+
* Can be used for calculating layout.
|
|
91
|
+
*
|
|
92
|
+
* Can modify the state of the view.
|
|
93
|
+
*/
|
|
94
|
+
update() {
|
|
95
|
+
// do nothing
|
|
96
|
+
}
|
|
97
|
+
async render(context) {
|
|
98
|
+
let iterations = 0;
|
|
99
|
+
do {
|
|
100
|
+
iterations++;
|
|
101
|
+
await DependencyContext.consumePromises();
|
|
102
|
+
context.save();
|
|
103
|
+
context.clearRect(0, 0, context.canvas.width, context.canvas.height);
|
|
104
|
+
await this.draw(context);
|
|
105
|
+
context.restore();
|
|
106
|
+
} while (DependencyContext.hasPromises() && iterations < 10);
|
|
107
|
+
if (iterations > 1) {
|
|
108
|
+
this.logger.debug(`render iterations: ${iterations}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
reload({ config, size, stack, resolutionScale, } = {}) {
|
|
112
|
+
if (config) {
|
|
113
|
+
this.runnerFactory = config;
|
|
114
|
+
}
|
|
115
|
+
if (size) {
|
|
116
|
+
this.size = size;
|
|
117
|
+
}
|
|
118
|
+
if (resolutionScale) {
|
|
119
|
+
this.resolutionScale = resolutionScale;
|
|
120
|
+
}
|
|
121
|
+
if (stack) {
|
|
122
|
+
this.creationStack = stack;
|
|
123
|
+
}
|
|
124
|
+
this.cached = false;
|
|
125
|
+
this.reloaded.dispatch();
|
|
126
|
+
}
|
|
127
|
+
async recalculate(setFrame) {
|
|
128
|
+
const cached = this.cache.current;
|
|
129
|
+
cached.firstFrame = this.playback.frame;
|
|
130
|
+
cached.lastFrame = cached.firstFrame + cached.duration;
|
|
131
|
+
if (this.isCached()) {
|
|
132
|
+
setFrame(cached.lastFrame);
|
|
133
|
+
this.cache.current = { ...cached };
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
cached.transitionDuration = -1;
|
|
137
|
+
await this.reset();
|
|
138
|
+
while (!this.canTransitionOut()) {
|
|
139
|
+
if (cached.transitionDuration < 0 &&
|
|
140
|
+
this.state === SceneState.AfterTransitionIn) {
|
|
141
|
+
cached.transitionDuration = this.playback.frame - cached.firstFrame;
|
|
142
|
+
}
|
|
143
|
+
setFrame(this.playback.frame + 1);
|
|
144
|
+
await this.next();
|
|
145
|
+
}
|
|
146
|
+
if (cached.transitionDuration === -1) {
|
|
147
|
+
cached.transitionDuration = 0;
|
|
148
|
+
}
|
|
149
|
+
cached.lastFrame = this.playback.frame;
|
|
150
|
+
cached.duration = cached.lastFrame - cached.firstFrame;
|
|
151
|
+
// Prevent the page from becoming unresponsive.
|
|
152
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
153
|
+
this.cached = true;
|
|
154
|
+
this.cache.current = { ...cached };
|
|
155
|
+
this.recalculated.dispatch();
|
|
156
|
+
}
|
|
157
|
+
async next() {
|
|
158
|
+
if (!this.runner) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
let result = this.execute(() => this.runner.next());
|
|
162
|
+
this.update();
|
|
163
|
+
while (result.value) {
|
|
164
|
+
if (isPromisable(result.value)) {
|
|
165
|
+
const value = await result.value.toPromise();
|
|
166
|
+
result = this.execute(() => this.runner.next(value));
|
|
167
|
+
}
|
|
168
|
+
else if (isPromise(result.value)) {
|
|
169
|
+
const value = await result.value;
|
|
170
|
+
result = this.execute(() => this.runner.next(value));
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.logger.warn({
|
|
174
|
+
message: 'Invalid value yielded by the scene.',
|
|
175
|
+
object: result.value,
|
|
176
|
+
});
|
|
177
|
+
result = this.execute(() => this.runner.next(result.value));
|
|
178
|
+
}
|
|
179
|
+
this.update();
|
|
180
|
+
}
|
|
181
|
+
if (DependencyContext.hasPromises()) {
|
|
182
|
+
const promises = await DependencyContext.consumePromises();
|
|
183
|
+
this.logger.warn({
|
|
184
|
+
message: 'Tried to access an asynchronous property before the node was ready. ' +
|
|
185
|
+
'Make sure to yield the node before accessing the property.',
|
|
186
|
+
stack: promises[0].stack,
|
|
187
|
+
inspect: promises[0].owner?.key ?? undefined,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (result.done) {
|
|
191
|
+
this.state = SceneState.Finished;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async reset(previousScene = null) {
|
|
195
|
+
this.counters = {};
|
|
196
|
+
this.previousScene = previousScene;
|
|
197
|
+
this.previousOnTop = false;
|
|
198
|
+
this.runner = threads(() => this.runnerFactory(this.getView()), thread => {
|
|
199
|
+
this.thread.current = thread;
|
|
200
|
+
});
|
|
201
|
+
this.state = SceneState.AfterTransitionIn;
|
|
202
|
+
this.afterReset.dispatch();
|
|
203
|
+
await this.next();
|
|
204
|
+
}
|
|
205
|
+
getSize() {
|
|
206
|
+
return this.size;
|
|
207
|
+
}
|
|
208
|
+
getRealSize() {
|
|
209
|
+
return this.size.mul(this.resolutionScale);
|
|
210
|
+
}
|
|
211
|
+
isAfterTransitionIn() {
|
|
212
|
+
return this.state === SceneState.AfterTransitionIn;
|
|
213
|
+
}
|
|
214
|
+
canTransitionOut() {
|
|
215
|
+
return (this.state === SceneState.CanTransitionOut ||
|
|
216
|
+
this.state === SceneState.Finished);
|
|
217
|
+
}
|
|
218
|
+
isFinished() {
|
|
219
|
+
return this.state === SceneState.Finished;
|
|
220
|
+
}
|
|
221
|
+
enterInitial() {
|
|
222
|
+
if (this.state === SceneState.AfterTransitionIn) {
|
|
223
|
+
this.state = SceneState.Initial;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.logger.warn(`Scene ${this.name} entered initial in an unexpected state: ${this.state}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
enterAfterTransitionIn() {
|
|
230
|
+
if (this.state === SceneState.Initial) {
|
|
231
|
+
this.state = SceneState.AfterTransitionIn;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.logger.warn(`Scene ${this.name} transitioned in an unexpected state: ${this.state}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
enterCanTransitionOut() {
|
|
238
|
+
if (this.state === SceneState.AfterTransitionIn ||
|
|
239
|
+
this.state === SceneState.Initial // only on recalculate
|
|
240
|
+
) {
|
|
241
|
+
this.state = SceneState.CanTransitionOut;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
this.logger.warn(`Scene ${this.name} was marked as finished in an unexpected state: ${this.state}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
isCached() {
|
|
248
|
+
return this.cached;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Invoke the given callback in the context of this scene.
|
|
252
|
+
*
|
|
253
|
+
* @remarks
|
|
254
|
+
* This method makes sure that the context of this scene is globally available
|
|
255
|
+
* during the execution of the callback.
|
|
256
|
+
*
|
|
257
|
+
* @param callback - The callback to invoke.
|
|
258
|
+
*/
|
|
259
|
+
execute(callback) {
|
|
260
|
+
let result;
|
|
261
|
+
startScene(this);
|
|
262
|
+
startPlayback(this.playback);
|
|
263
|
+
try {
|
|
264
|
+
result = callback();
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
endPlayback(this.playback);
|
|
268
|
+
endScene(this);
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuZXJhdG9yU2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NlbmVzL0dlbmVyYXRvclNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTNELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFRbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQU10Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFnQixjQUFjO0lBWWxDLElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFRRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBR0QsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQUdELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ2xDLENBQUM7SUFHRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQzNDLENBQUM7SUFLRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBSUQsZ0VBQWdFO0lBQ2hFLElBQVcsZUFBZTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCw2REFBNkQsQ0FDOUQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxZQUFZLEtBQVUsQ0FBQztJQWdCOUIsWUFDRSxXQUE0RDtRQXBFN0MsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFrQjtZQUM1RCxVQUFVLEVBQUUsQ0FBQztZQUNiLGtCQUFrQixFQUFFLENBQUM7WUFDckIsUUFBUSxFQUFFLENBQUM7WUFDWCxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztRQUtjLGFBQVEsR0FBRyxJQUFJLGVBQWUsRUFBUSxDQUFDO1FBS3ZDLGlCQUFZLEdBQUcsSUFBSSxlQUFlLEVBQVEsQ0FBQztRQUszQyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBS2hELG9CQUFlLEdBQUcsSUFBSSxlQUFlLEVBRXJELENBQUM7UUFLYSxlQUFVLEdBQUcsSUFBSSxlQUFlLEVBQVEsQ0FBQztRQUUxQyxvQkFBZSxHQUFvQixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQXlCckUsa0JBQWEsR0FBaUIsSUFBSSxDQUFDO1FBQ25DLFdBQU0sR0FBMkIsSUFBSSxDQUFDO1FBQ3RDLFVBQUssR0FBZSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDdkIscUNBQXFDO1FBQzdCLGFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBTTVDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUV0RSxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFJRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTTtRQUNYLGFBQWE7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFpQztRQUNuRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsR0FBRyxDQUFDO1lBQ0YsVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxRQUFRLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUU7UUFFN0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFJTSxNQUFNLENBQUMsRUFDWixNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssRUFDTCxlQUFlLE1BQ3NDLEVBQUU7UUFDdkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFpQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRXZELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFDRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsaUJBQWlCLEVBQzNDLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDdEUsQ0FBQztZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZELCtDQUErQztRQUMvQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7aUJBQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDakMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFFLHFDQUFxQztvQkFDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO2lCQUNyQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0saUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxFQUNMLHNFQUFzRTtvQkFDdEUsNERBQTREO2dCQUM5RCxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxTQUFTO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUE4QixJQUFJO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUNuQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvQixDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQ3JELENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLGdCQUFnQjtZQUMxQyxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxTQUFTLElBQUksQ0FBQyxJQUFJLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQzNFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsU0FBUyxJQUFJLENBQUMsSUFBSSx5Q0FBeUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsSUFDRSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxpQkFBaUI7WUFDM0MsSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLHNCQUFzQjtVQUN4RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxTQUFTLElBQUksQ0FBQyxJQUFJLG1EQUFtRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQ2xGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sT0FBTyxDQUFJLFFBQWlCO1FBQ3BDLElBQUksTUFBUyxDQUFDO1FBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLENBQUM7Z0JBQVMsQ0FBQztZQUNULFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Vector2 } from '../types/Vector';
|
|
2
|
+
/**
|
|
3
|
+
* Represents an element to inspect.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The type is not important because the UI does not interact with it.
|
|
7
|
+
* It serves as a key that will be passed back to an Inspectable scene to
|
|
8
|
+
* receive more information about said element.
|
|
9
|
+
*/
|
|
10
|
+
export type InspectedElement = unknown;
|
|
11
|
+
/**
|
|
12
|
+
* Represents attributes of an inspected element.
|
|
13
|
+
*/
|
|
14
|
+
export type InspectedAttributes = {
|
|
15
|
+
stack?: string;
|
|
16
|
+
[K: string]: any;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Scenes can implement this interface to make their components
|
|
20
|
+
* inspectable through the UI.
|
|
21
|
+
*/
|
|
22
|
+
export interface Inspectable {
|
|
23
|
+
/**
|
|
24
|
+
* Get a possible element to inspect at a given position.
|
|
25
|
+
*
|
|
26
|
+
* @param x - The x coordinate.
|
|
27
|
+
* @param y - The y coordinate.
|
|
28
|
+
*/
|
|
29
|
+
inspectPosition(x: number, y: number): InspectedElement | null;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the inspected element is still valid.
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* If a scene destroys and recreates its components upon every reset, the
|
|
35
|
+
* reference may no longer be valid. Even though the component is still
|
|
36
|
+
* present. This method should check that and return a new reference.
|
|
37
|
+
*
|
|
38
|
+
* @param element - The element to validate.
|
|
39
|
+
*/
|
|
40
|
+
validateInspection(element: InspectedElement | null): InspectedElement | null;
|
|
41
|
+
/**
|
|
42
|
+
* Return the attributes of the inspected element.
|
|
43
|
+
*
|
|
44
|
+
* @remarks
|
|
45
|
+
* This information will be displayed in the "Properties" panel.
|
|
46
|
+
*
|
|
47
|
+
* @param element - The element to inspect.
|
|
48
|
+
*/
|
|
49
|
+
inspectAttributes(element: InspectedElement): InspectedAttributes | null;
|
|
50
|
+
/**
|
|
51
|
+
* Draw an overlay for the inspected element.
|
|
52
|
+
*
|
|
53
|
+
* @remarks
|
|
54
|
+
* This method can be used to overlay additional information about an
|
|
55
|
+
* element on top of the animation.
|
|
56
|
+
*
|
|
57
|
+
* @param element - The element for which to draw an overlay.
|
|
58
|
+
* @param matrix - A local-to-screen matrix.
|
|
59
|
+
* @param context - The context to draw with.
|
|
60
|
+
*/
|
|
61
|
+
drawOverlay(element: InspectedElement, matrix: DOMMatrix, context: CanvasRenderingContext2D): void;
|
|
62
|
+
/**
|
|
63
|
+
* Transform the absolute mouse coordinates into the scene's coordinate system.
|
|
64
|
+
*
|
|
65
|
+
* @param x - The x coordinate.
|
|
66
|
+
* @param y - The y coordinate.
|
|
67
|
+
*/
|
|
68
|
+
transformMousePosition(x: number, y: number): Vector2 | null;
|
|
69
|
+
}
|
|
70
|
+
export declare function isInspectable(value: any): value is Inspectable;
|
|
71
|
+
//# sourceMappingURL=Inspectable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inspectable.d.ts","sourceRoot":"","sources":["../../src/scenes/Inspectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAE/D;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAE9E;;;;;;;OAOG;IACH,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAEzE;;;;;;;;;;OAUG;IACH,WAAW,CACT,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,wBAAwB,GAChC,IAAI,CAAC;IAER;;;;;OAKG;IACH,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,WAAW,CAE9D"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function isInspectable(value) {
|
|
2
|
+
return value && typeof value === 'object' && 'validateInspection' in value;
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zcGVjdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NlbmVzL0luc3BlY3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlGQSxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQVU7SUFDdEMsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLG9CQUFvQixJQUFJLEtBQUssQ0FBQztBQUM3RSxDQUFDIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventDispatcher } from '../events';
|
|
2
|
+
import type { Scene } from './Scene';
|
|
3
|
+
/**
|
|
4
|
+
* Lifecycle events for {@link Scene} that are cleared on every reset.
|
|
5
|
+
*/
|
|
6
|
+
export declare class LifecycleEvents {
|
|
7
|
+
private readonly scene;
|
|
8
|
+
get onBeforeRender(): import("../events").Subscribable<CanvasRenderingContext2D, import("../events").EventHandler<CanvasRenderingContext2D>>;
|
|
9
|
+
protected readonly beforeRender: EventDispatcher<CanvasRenderingContext2D>;
|
|
10
|
+
get onBeginRender(): import("../events").Subscribable<CanvasRenderingContext2D, import("../events").EventHandler<CanvasRenderingContext2D>>;
|
|
11
|
+
protected readonly beginRender: EventDispatcher<CanvasRenderingContext2D>;
|
|
12
|
+
get onFinishRender(): import("../events").Subscribable<CanvasRenderingContext2D, import("../events").EventHandler<CanvasRenderingContext2D>>;
|
|
13
|
+
protected readonly finishRender: EventDispatcher<CanvasRenderingContext2D>;
|
|
14
|
+
get onAfterRender(): import("../events").Subscribable<CanvasRenderingContext2D, import("../events").EventHandler<CanvasRenderingContext2D>>;
|
|
15
|
+
protected readonly afterRender: EventDispatcher<CanvasRenderingContext2D>;
|
|
16
|
+
constructor(scene: Scene);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=LifecycleEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LifecycleEvents.d.ts","sourceRoot":"","sources":["../../src/scenes/LifecycleEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAGnC;;GAEG;AACH,qBAAa,eAAe;IAyBP,OAAO,CAAC,QAAQ,CAAC,KAAK;IAxBzC,IAAW,cAAc,2HAExB;IACD,SAAS,CAAC,QAAQ,CAAC,YAAY,4CACmB;IAElD,IAAW,aAAa,2HAEvB;IACD,SAAS,CAAC,QAAQ,CAAC,WAAW,4CACoB;IAElD,IAAW,cAAc,2HAExB;IACD,SAAS,CAAC,QAAQ,CAAC,YAAY,4CACmB;IAElD,IAAW,aAAa,2HAEvB;IACD,SAAS,CAAC,QAAQ,CAAC,WAAW,4CACoB;gBAEd,KAAK,EAAE,KAAK;CAoBjD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EventDispatcher } from '../events';
|
|
2
|
+
import { SceneRenderEvent } from './Scene';
|
|
3
|
+
/**
|
|
4
|
+
* Lifecycle events for {@link Scene} that are cleared on every reset.
|
|
5
|
+
*/
|
|
6
|
+
export class LifecycleEvents {
|
|
7
|
+
get onBeforeRender() {
|
|
8
|
+
return this.beforeRender.subscribable;
|
|
9
|
+
}
|
|
10
|
+
get onBeginRender() {
|
|
11
|
+
return this.beginRender.subscribable;
|
|
12
|
+
}
|
|
13
|
+
get onFinishRender() {
|
|
14
|
+
return this.finishRender.subscribable;
|
|
15
|
+
}
|
|
16
|
+
get onAfterRender() {
|
|
17
|
+
return this.afterRender.subscribable;
|
|
18
|
+
}
|
|
19
|
+
constructor(scene) {
|
|
20
|
+
this.scene = scene;
|
|
21
|
+
this.beforeRender = new EventDispatcher();
|
|
22
|
+
this.beginRender = new EventDispatcher();
|
|
23
|
+
this.finishRender = new EventDispatcher();
|
|
24
|
+
this.afterRender = new EventDispatcher();
|
|
25
|
+
this.scene.onRenderLifecycle.subscribe(([event, ctx]) => {
|
|
26
|
+
switch (event) {
|
|
27
|
+
case SceneRenderEvent.BeforeRender:
|
|
28
|
+
return this.beforeRender.dispatch(ctx);
|
|
29
|
+
case SceneRenderEvent.BeginRender:
|
|
30
|
+
return this.beginRender.dispatch(ctx);
|
|
31
|
+
case SceneRenderEvent.FinishRender:
|
|
32
|
+
return this.finishRender.dispatch(ctx);
|
|
33
|
+
case SceneRenderEvent.AfterRender:
|
|
34
|
+
return this.afterRender.dispatch(ctx);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
this.scene.onReset.subscribe(() => {
|
|
38
|
+
this.beforeRender.clear();
|
|
39
|
+
this.beginRender.clear();
|
|
40
|
+
this.finishRender.clear();
|
|
41
|
+
this.afterRender.clear();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlmZWN5Y2xlRXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjZW5lcy9MaWZlY3ljbGVFdmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUUxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFekM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBSUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUlELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUM7SUFJRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBSUQsWUFBb0MsS0FBWTtRQUFaLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQjdCLGlCQUFZLEdBQzdCLElBQUksZUFBZSxFQUE0QixDQUFDO1FBSy9CLGdCQUFXLEdBQzVCLElBQUksZUFBZSxFQUE0QixDQUFDO1FBSy9CLGlCQUFZLEdBQzdCLElBQUksZUFBZSxFQUE0QixDQUFDO1FBSy9CLGdCQUFXLEdBQzVCLElBQUksZUFBZSxFQUE0QixDQUFDO1FBR2hELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUN0RCxRQUFRLEtBQUssRUFBRSxDQUFDO2dCQUNkLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtvQkFDaEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO29CQUMvQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLGdCQUFnQixDQUFDLFlBQVk7b0JBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssZ0JBQWdCLENBQUMsV0FBVztvQkFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* // TODO(refactor): maybe we can delete this
|
|
3
|
+
*
|
|
4
|
+
* A random number generator based on
|
|
5
|
+
* {@link https://gist.github.com/tommyettinger/46a874533244883189143505d203312c | Mulberry32}.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Random {
|
|
8
|
+
private state;
|
|
9
|
+
/**
|
|
10
|
+
* Previously generated Gaussian random number.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* This is an optimization.
|
|
14
|
+
* Since {@link gauss} generates a pair of independent Gaussian random
|
|
15
|
+
* numbers, it returns one immediately and stores the other for the next call
|
|
16
|
+
* to {@link gauss}.
|
|
17
|
+
*/
|
|
18
|
+
private nextGauss;
|
|
19
|
+
constructor(state: number);
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
static createSeed(): number;
|
|
24
|
+
/**
|
|
25
|
+
* Get the next random float in the given range.
|
|
26
|
+
*
|
|
27
|
+
* @param from - The start of the range.
|
|
28
|
+
* @param to - The end of the range.
|
|
29
|
+
*/
|
|
30
|
+
nextFloat(from?: number, to?: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* Get the next random integer in the given range.
|
|
33
|
+
*
|
|
34
|
+
* @param from - The start of the range.
|
|
35
|
+
* @param to - The end of the range. Exclusive.
|
|
36
|
+
*/
|
|
37
|
+
nextInt(from?: number, to?: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Get a random float from a gaussian distribution.
|
|
40
|
+
* @param mean - The mean of the distribution.
|
|
41
|
+
* @param stdev - The standard deviation of the distribution.
|
|
42
|
+
*/
|
|
43
|
+
gauss(mean?: number, stdev?: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get an array filled with random floats in the given range.
|
|
46
|
+
*
|
|
47
|
+
* @param size - The size of the array.
|
|
48
|
+
* @param from - The start of the range.
|
|
49
|
+
* @param to - The end of the range.
|
|
50
|
+
*/
|
|
51
|
+
floatArray(size: number, from?: number, to?: number): number[];
|
|
52
|
+
/**
|
|
53
|
+
Get an array filled with random integers in the given range.
|
|
54
|
+
*
|
|
55
|
+
* @param size - The size of the array.
|
|
56
|
+
* @param from - The start of the range.
|
|
57
|
+
* @param to - The end of the range. Exclusive.
|
|
58
|
+
*/
|
|
59
|
+
intArray(size: number, from?: number, to?: number): number[];
|
|
60
|
+
/**
|
|
61
|
+
* Create a new independent generator.
|
|
62
|
+
*/
|
|
63
|
+
spawn(): Random;
|
|
64
|
+
private next;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=Random.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Random.d.ts","sourceRoot":"","sources":["../../src/scenes/Random.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,qBAAa,MAAM;IAYE,OAAO,CAAC,KAAK;IAXhC;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS,CAAuB;gBAEb,KAAK,EAAE,MAAM;IAExC;;OAEG;WACW,UAAU;IAIxB;;;;;OAKG;IACI,SAAS,CAAC,IAAI,SAAI,EAAE,EAAE,SAAI;IAIjC;;;;;OAKG;IACI,OAAO,CAAC,IAAI,SAAI,EAAE,EAAE,SAAa;IASxC;;;;OAIG;IACI,KAAK,CAAC,IAAI,SAAI,EAAE,KAAK,SAAI,GAAG,MAAM;IAYzC;;;;;;OAMG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,EAAE,SAAI,GAAG,MAAM,EAAE;IAI3D;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,EAAE,SAAa,GAAG,MAAM,EAAE;IAIlE;;OAEG;IACI,KAAK;IAIZ,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { map } from '../tweening';
|
|
2
|
+
import { range } from '../utils';
|
|
3
|
+
/**
|
|
4
|
+
* // TODO(refactor): maybe we can delete this
|
|
5
|
+
*
|
|
6
|
+
* A random number generator based on
|
|
7
|
+
* {@link https://gist.github.com/tommyettinger/46a874533244883189143505d203312c | Mulberry32}.
|
|
8
|
+
*/
|
|
9
|
+
export class Random {
|
|
10
|
+
constructor(state) {
|
|
11
|
+
this.state = state;
|
|
12
|
+
/**
|
|
13
|
+
* Previously generated Gaussian random number.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* This is an optimization.
|
|
17
|
+
* Since {@link gauss} generates a pair of independent Gaussian random
|
|
18
|
+
* numbers, it returns one immediately and stores the other for the next call
|
|
19
|
+
* to {@link gauss}.
|
|
20
|
+
*/
|
|
21
|
+
this.nextGauss = null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
static createSeed() {
|
|
27
|
+
return Math.floor(Math.random() * 4294967296);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the next random float in the given range.
|
|
31
|
+
*
|
|
32
|
+
* @param from - The start of the range.
|
|
33
|
+
* @param to - The end of the range.
|
|
34
|
+
*/
|
|
35
|
+
nextFloat(from = 0, to = 1) {
|
|
36
|
+
return map(from, to, this.next());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the next random integer in the given range.
|
|
40
|
+
*
|
|
41
|
+
* @param from - The start of the range.
|
|
42
|
+
* @param to - The end of the range. Exclusive.
|
|
43
|
+
*/
|
|
44
|
+
nextInt(from = 0, to = 4294967296) {
|
|
45
|
+
let value = Math.floor(map(from, to, this.next()));
|
|
46
|
+
if (value === to) {
|
|
47
|
+
value = from;
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get a random float from a gaussian distribution.
|
|
53
|
+
* @param mean - The mean of the distribution.
|
|
54
|
+
* @param stdev - The standard deviation of the distribution.
|
|
55
|
+
*/
|
|
56
|
+
gauss(mean = 0, stdev = 1) {
|
|
57
|
+
let z = this.nextGauss;
|
|
58
|
+
this.nextGauss = null;
|
|
59
|
+
if (z === null) {
|
|
60
|
+
const x2pi = this.next() * 2 * Math.PI;
|
|
61
|
+
const g2rad = Math.sqrt(-2 * Math.log(1 - this.next()));
|
|
62
|
+
z = Math.cos(x2pi) * g2rad;
|
|
63
|
+
this.nextGauss = Math.sin(x2pi) * g2rad;
|
|
64
|
+
}
|
|
65
|
+
return mean + z * stdev;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get an array filled with random floats in the given range.
|
|
69
|
+
*
|
|
70
|
+
* @param size - The size of the array.
|
|
71
|
+
* @param from - The start of the range.
|
|
72
|
+
* @param to - The end of the range.
|
|
73
|
+
*/
|
|
74
|
+
floatArray(size, from = 0, to = 1) {
|
|
75
|
+
return range(size).map(() => this.nextFloat(from, to));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
Get an array filled with random integers in the given range.
|
|
79
|
+
*
|
|
80
|
+
* @param size - The size of the array.
|
|
81
|
+
* @param from - The start of the range.
|
|
82
|
+
* @param to - The end of the range. Exclusive.
|
|
83
|
+
*/
|
|
84
|
+
intArray(size, from = 0, to = 4294967296) {
|
|
85
|
+
return range(size).map(() => this.nextInt(from, to));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a new independent generator.
|
|
89
|
+
*/
|
|
90
|
+
spawn() {
|
|
91
|
+
return new Random(this.nextInt());
|
|
92
|
+
}
|
|
93
|
+
next() {
|
|
94
|
+
this.state |= 0;
|
|
95
|
+
this.state = (this.state + 0x6d2b79f5) | 0;
|
|
96
|
+
let t = Math.imul(this.state ^ (this.state >>> 15), 1 | this.state);
|
|
97
|
+
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
|
98
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjZW5lcy9SYW5kb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLE1BQU07SUFZakIsWUFBMkIsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFYeEM7Ozs7Ozs7O1dBUUc7UUFDSyxjQUFTLEdBQWtCLElBQUksQ0FBQztJQUVHLENBQUM7SUFFNUM7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVU7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsSUFBWSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsVUFBVTtRQUNyRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1YsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDL0MsQ0FBQztDQUNGIn0=
|