@twick/core 0.14.19 → 0.14.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/lib/app/Logger.d.ts +105 -0
  2. package/lib/app/Logger.d.ts.map +1 -0
  3. package/lib/app/Logger.js +77 -0
  4. package/lib/app/PlaybackManager.d.ts +55 -0
  5. package/lib/app/PlaybackManager.d.ts.map +1 -0
  6. package/lib/app/PlaybackManager.js +179 -0
  7. package/lib/app/PlaybackStatus.d.ts +30 -0
  8. package/lib/app/PlaybackStatus.d.ts.map +1 -0
  9. package/lib/app/PlaybackStatus.js +46 -0
  10. package/lib/app/Player.d.ts +130 -0
  11. package/lib/app/Player.d.ts.map +1 -0
  12. package/lib/app/Player.js +375 -0
  13. package/lib/app/Project.d.ts +145 -0
  14. package/lib/app/Project.d.ts.map +1 -0
  15. package/lib/app/Project.js +10 -0
  16. package/lib/app/Renderer.d.ts +90 -0
  17. package/lib/app/Renderer.d.ts.map +1 -0
  18. package/lib/app/Renderer.js +318 -0
  19. package/lib/app/SharedWebGLContext.d.ts +24 -0
  20. package/lib/app/SharedWebGLContext.d.ts.map +1 -0
  21. package/lib/app/SharedWebGLContext.js +200 -0
  22. package/lib/app/Stage.d.ts +30 -0
  23. package/lib/app/Stage.d.ts.map +1 -0
  24. package/lib/app/Stage.js +75 -0
  25. package/lib/app/TimeEstimator.d.ts +53 -0
  26. package/lib/app/TimeEstimator.d.ts.map +1 -0
  27. package/lib/app/TimeEstimator.js +70 -0
  28. package/lib/app/index.d.ts +16 -0
  29. package/lib/app/index.d.ts.map +1 -0
  30. package/lib/app/index.js +16 -0
  31. package/lib/app/makeProject.d.ts +15 -0
  32. package/lib/app/makeProject.d.ts.map +1 -0
  33. package/lib/app/makeProject.js +72 -0
  34. package/lib/app/project-settings.d.ts +8 -0
  35. package/lib/app/project-settings.d.ts.map +1 -0
  36. package/lib/app/project-settings.js +13 -0
  37. package/lib/decorators/decorate.d.ts +2 -0
  38. package/lib/decorators/decorate.d.ts.map +1 -0
  39. package/lib/decorators/decorate.js +10 -0
  40. package/lib/decorators/deprecated.d.ts +5 -0
  41. package/lib/decorators/deprecated.d.ts.map +1 -0
  42. package/lib/decorators/deprecated.js +23 -0
  43. package/lib/decorators/index.d.ts +9 -0
  44. package/lib/decorators/index.d.ts.map +1 -0
  45. package/lib/decorators/index.js +9 -0
  46. package/lib/decorators/lazy.d.ts +14 -0
  47. package/lib/decorators/lazy.d.ts.map +1 -0
  48. package/lib/decorators/lazy.js +27 -0
  49. package/lib/decorators/threadable.d.ts +2 -0
  50. package/lib/decorators/threadable.d.ts.map +1 -0
  51. package/lib/decorators/threadable.js +9 -0
  52. package/lib/events/AsyncEventDispatcher.d.ts +45 -0
  53. package/lib/events/AsyncEventDispatcher.d.ts.map +1 -0
  54. package/lib/events/AsyncEventDispatcher.js +33 -0
  55. package/lib/events/EventDispatcher.d.ts +38 -0
  56. package/lib/events/EventDispatcher.d.ts.map +1 -0
  57. package/lib/events/EventDispatcher.js +29 -0
  58. package/lib/events/EventDispatcherBase.d.ts +55 -0
  59. package/lib/events/EventDispatcherBase.d.ts.map +1 -0
  60. package/lib/events/EventDispatcherBase.js +68 -0
  61. package/lib/events/FlagDispatcher.d.ts +54 -0
  62. package/lib/events/FlagDispatcher.d.ts.map +1 -0
  63. package/lib/events/FlagDispatcher.js +63 -0
  64. package/lib/events/ValueDispatcher.d.ts +81 -0
  65. package/lib/events/ValueDispatcher.d.ts.map +1 -0
  66. package/lib/events/ValueDispatcher.js +97 -0
  67. package/lib/events/index.d.ts +11 -0
  68. package/lib/events/index.d.ts.map +1 -0
  69. package/lib/events/index.js +11 -0
  70. package/lib/exporter/Exporter.d.ts +101 -0
  71. package/lib/exporter/Exporter.d.ts.map +1 -0
  72. package/lib/exporter/Exporter.js +2 -0
  73. package/lib/exporter/FFmpegExporter.d.ts +50 -0
  74. package/lib/exporter/FFmpegExporter.d.ts.map +1 -0
  75. package/lib/exporter/FFmpegExporter.js +140 -0
  76. package/lib/exporter/ImageExporter.d.ts +34 -0
  77. package/lib/exporter/ImageExporter.d.ts.map +1 -0
  78. package/lib/exporter/ImageExporter.js +80 -0
  79. package/lib/exporter/WasmExporter.d.ts +19 -0
  80. package/lib/exporter/WasmExporter.d.ts.map +1 -0
  81. package/lib/exporter/WasmExporter.js +78 -0
  82. package/lib/exporter/download-videos.d.ts +3 -0
  83. package/lib/exporter/download-videos.d.ts.map +1 -0
  84. package/lib/exporter/download-videos.js +45 -0
  85. package/lib/exporter/index.d.ts +5 -0
  86. package/lib/exporter/index.d.ts.map +1 -0
  87. package/lib/exporter/index.js +5 -0
  88. package/lib/flow/all.d.ts +18 -0
  89. package/lib/flow/all.d.ts.map +1 -0
  90. package/lib/flow/all.js +25 -0
  91. package/lib/flow/any.d.ts +18 -0
  92. package/lib/flow/any.d.ts.map +1 -0
  93. package/lib/flow/any.js +25 -0
  94. package/lib/flow/chain.d.ts +36 -0
  95. package/lib/flow/chain.d.ts.map +1 -0
  96. package/lib/flow/chain.js +46 -0
  97. package/lib/flow/delay.d.ts +29 -0
  98. package/lib/flow/delay.d.ts.map +1 -0
  99. package/lib/flow/delay.js +39 -0
  100. package/lib/flow/every.d.ts +41 -0
  101. package/lib/flow/every.d.ts.map +1 -0
  102. package/lib/flow/every.js +61 -0
  103. package/lib/flow/index.d.ts +17 -0
  104. package/lib/flow/index.d.ts.map +1 -0
  105. package/lib/flow/index.js +17 -0
  106. package/lib/flow/join.d.ts +35 -0
  107. package/lib/flow/join.d.ts.map +1 -0
  108. package/lib/flow/join.js +33 -0
  109. package/lib/flow/loop.d.ts +58 -0
  110. package/lib/flow/loop.d.ts.map +1 -0
  111. package/lib/flow/loop.js +51 -0
  112. package/lib/flow/loopFor.d.ts +25 -0
  113. package/lib/flow/loopFor.d.ts.map +1 -0
  114. package/lib/flow/loopFor.js +42 -0
  115. package/lib/flow/names.d.ts +3 -0
  116. package/lib/flow/names.d.ts.map +1 -0
  117. package/lib/flow/names.js +11 -0
  118. package/lib/flow/run.d.ts +45 -0
  119. package/lib/flow/run.d.ts.map +1 -0
  120. package/lib/flow/run.js +14 -0
  121. package/lib/flow/scheduling.d.ts +18 -0
  122. package/lib/flow/scheduling.d.ts.map +1 -0
  123. package/lib/flow/scheduling.js +33 -0
  124. package/lib/flow/sequence.d.ts +22 -0
  125. package/lib/flow/sequence.d.ts.map +1 -0
  126. package/lib/flow/sequence.js +31 -0
  127. package/lib/index.d.ts +16 -0
  128. package/lib/index.d.ts.map +1 -0
  129. package/lib/index.js +16 -0
  130. package/lib/media/index.d.ts +7 -0
  131. package/lib/media/index.d.ts.map +1 -0
  132. package/lib/media/index.js +7 -0
  133. package/lib/media/loadImage.d.ts +8 -0
  134. package/lib/media/loadImage.d.ts.map +1 -0
  135. package/lib/media/loadImage.js +29 -0
  136. package/lib/plugin/DefaultPlugin.d.ts +10 -0
  137. package/lib/plugin/DefaultPlugin.d.ts.map +1 -0
  138. package/lib/plugin/DefaultPlugin.js +17 -0
  139. package/lib/plugin/Plugin.d.ts +53 -0
  140. package/lib/plugin/Plugin.d.ts.map +1 -0
  141. package/lib/plugin/Plugin.js +2 -0
  142. package/lib/plugin/index.d.ts +3 -0
  143. package/lib/plugin/index.d.ts.map +1 -0
  144. package/lib/plugin/index.js +3 -0
  145. package/lib/plugin/makePlugin.d.ts +15 -0
  146. package/lib/plugin/makePlugin.d.ts.map +1 -0
  147. package/lib/plugin/makePlugin.js +16 -0
  148. package/lib/scenes/GeneratorScene.d.ts +95 -0
  149. package/lib/scenes/GeneratorScene.d.ts.map +1 -0
  150. package/lib/scenes/GeneratorScene.js +273 -0
  151. package/lib/scenes/Inspectable.d.ts +71 -0
  152. package/lib/scenes/Inspectable.d.ts.map +1 -0
  153. package/lib/scenes/Inspectable.js +4 -0
  154. package/lib/scenes/LifecycleEvents.d.ts +18 -0
  155. package/lib/scenes/LifecycleEvents.d.ts.map +1 -0
  156. package/lib/scenes/LifecycleEvents.js +45 -0
  157. package/lib/scenes/Random.d.ts +66 -0
  158. package/lib/scenes/Random.d.ts.map +1 -0
  159. package/lib/scenes/Random.js +101 -0
  160. package/lib/scenes/Scene.d.ts +298 -0
  161. package/lib/scenes/Scene.d.ts.map +1 -0
  162. package/lib/scenes/Scene.js +25 -0
  163. package/lib/scenes/SceneState.d.ts +34 -0
  164. package/lib/scenes/SceneState.d.ts.map +1 -0
  165. package/lib/scenes/SceneState.js +35 -0
  166. package/lib/scenes/Shaders.d.ts +63 -0
  167. package/lib/scenes/Shaders.d.ts.map +1 -0
  168. package/lib/scenes/Shaders.js +158 -0
  169. package/lib/scenes/Slides.d.ts +33 -0
  170. package/lib/scenes/Slides.d.ts.map +1 -0
  171. package/lib/scenes/Slides.js +115 -0
  172. package/lib/scenes/Threadable.d.ts +19 -0
  173. package/lib/scenes/Threadable.d.ts.map +1 -0
  174. package/lib/scenes/Threadable.js +4 -0
  175. package/lib/scenes/Variables.d.ts +24 -0
  176. package/lib/scenes/Variables.d.ts.map +1 -0
  177. package/lib/scenes/Variables.js +39 -0
  178. package/lib/scenes/index.d.ts +16 -0
  179. package/lib/scenes/index.d.ts.map +1 -0
  180. package/lib/scenes/index.js +16 -0
  181. package/lib/signals/CompoundSignalContext.d.ts +21 -0
  182. package/lib/signals/CompoundSignalContext.d.ts.map +1 -0
  183. package/lib/signals/CompoundSignalContext.js +73 -0
  184. package/lib/signals/ComputedContext.d.ts +14 -0
  185. package/lib/signals/ComputedContext.d.ts.map +1 -0
  186. package/lib/signals/ComputedContext.js +36 -0
  187. package/lib/signals/DependencyContext.d.ts +32 -0
  188. package/lib/signals/DependencyContext.d.ts.map +1 -0
  189. package/lib/signals/DependencyContext.js +87 -0
  190. package/lib/signals/SignalContext.d.ts +120 -0
  191. package/lib/signals/SignalContext.d.ts.map +1 -0
  192. package/lib/signals/SignalContext.js +245 -0
  193. package/lib/signals/createComputed.d.ts +3 -0
  194. package/lib/signals/createComputed.d.ts.map +1 -0
  195. package/lib/signals/createComputed.js +5 -0
  196. package/lib/signals/createComputedAsync.d.ts +4 -0
  197. package/lib/signals/createComputedAsync.d.ts.map +1 -0
  198. package/lib/signals/createComputedAsync.js +15 -0
  199. package/lib/signals/createSignal.d.ts +5 -0
  200. package/lib/signals/createSignal.d.ts.map +1 -0
  201. package/lib/signals/createSignal.js +6 -0
  202. package/lib/signals/index.d.ts +16 -0
  203. package/lib/signals/index.d.ts.map +1 -0
  204. package/lib/signals/index.js +16 -0
  205. package/lib/signals/symbols.d.ts +2 -0
  206. package/lib/signals/symbols.d.ts.map +1 -0
  207. package/lib/signals/symbols.js +2 -0
  208. package/lib/signals/types.d.ts +51 -0
  209. package/lib/signals/types.d.ts.map +1 -0
  210. package/lib/signals/types.js +2 -0
  211. package/lib/signals/utils.d.ts +5 -0
  212. package/lib/signals/utils.d.ts.map +1 -0
  213. package/lib/signals/utils.js +10 -0
  214. package/lib/threading/Thread.d.ts +77 -0
  215. package/lib/threading/Thread.d.ts.map +1 -0
  216. package/lib/threading/Thread.js +169 -0
  217. package/lib/threading/ThreadGenerator.d.ts +39 -0
  218. package/lib/threading/ThreadGenerator.d.ts.map +1 -0
  219. package/lib/threading/ThreadGenerator.js +17 -0
  220. package/lib/threading/cancel.d.ts +17 -0
  221. package/lib/threading/cancel.d.ts.map +1 -0
  222. package/lib/threading/cancel.js +26 -0
  223. package/lib/threading/index.d.ts +11 -0
  224. package/lib/threading/index.d.ts.map +1 -0
  225. package/lib/threading/index.js +11 -0
  226. package/lib/threading/spawn.d.ts +28 -0
  227. package/lib/threading/spawn.d.ts.map +1 -0
  228. package/lib/threading/spawn.js +30 -0
  229. package/lib/threading/threads.d.ts +46 -0
  230. package/lib/threading/threads.d.ts.map +1 -0
  231. package/lib/threading/threads.js +89 -0
  232. package/lib/transitions/fadeTransition.d.ts +8 -0
  233. package/lib/transitions/fadeTransition.d.ts.map +1 -0
  234. package/lib/transitions/fadeTransition.js +16 -0
  235. package/lib/transitions/index.d.ts +11 -0
  236. package/lib/transitions/index.d.ts.map +1 -0
  237. package/lib/transitions/index.js +11 -0
  238. package/lib/transitions/slideTransition.d.ts +18 -0
  239. package/lib/transitions/slideTransition.d.ts.map +1 -0
  240. package/lib/transitions/slideTransition.js +14 -0
  241. package/lib/transitions/useTransition.d.ts +10 -0
  242. package/lib/transitions/useTransition.d.ts.map +1 -0
  243. package/lib/transitions/useTransition.js +27 -0
  244. package/lib/transitions/zoomInTransition.d.ts +10 -0
  245. package/lib/transitions/zoomInTransition.d.ts.map +1 -0
  246. package/lib/transitions/zoomInTransition.js +33 -0
  247. package/lib/transitions/zoomOutTransition.d.ts +10 -0
  248. package/lib/transitions/zoomOutTransition.d.ts.map +1 -0
  249. package/lib/transitions/zoomOutTransition.js +33 -0
  250. package/lib/tsconfig.build.tsbuildinfo +1 -0
  251. package/lib/tweening/helpers.d.ts +5 -0
  252. package/lib/tweening/helpers.d.ts.map +1 -0
  253. package/lib/tweening/helpers.js +16 -0
  254. package/lib/tweening/index.d.ts +11 -0
  255. package/lib/tweening/index.d.ts.map +1 -0
  256. package/lib/tweening/index.js +11 -0
  257. package/lib/tweening/interpolationFunctions.d.ts +38 -0
  258. package/lib/tweening/interpolationFunctions.d.ts.map +1 -0
  259. package/lib/tweening/interpolationFunctions.js +107 -0
  260. package/lib/tweening/spring.d.ts +20 -0
  261. package/lib/tweening/spring.d.ts.map +1 -0
  262. package/lib/tweening/spring.js +103 -0
  263. package/lib/tweening/timingFunctions.d.ts +46 -0
  264. package/lib/tweening/timingFunctions.d.ts.map +1 -0
  265. package/lib/tweening/timingFunctions.js +233 -0
  266. package/lib/tweening/tween.d.ts +3 -0
  267. package/lib/tweening/tween.d.ts.map +1 -0
  268. package/lib/tweening/tween.js +21 -0
  269. package/lib/types/BBox.d.ts +73 -0
  270. package/lib/types/BBox.d.ts.map +1 -0
  271. package/lib/types/BBox.js +249 -0
  272. package/lib/types/Canvas.d.ts +3 -0
  273. package/lib/types/Canvas.d.ts.map +1 -0
  274. package/lib/types/Canvas.js +2 -0
  275. package/lib/types/Color.d.ts +65 -0
  276. package/lib/types/Color.d.ts.map +1 -0
  277. package/lib/types/Color.js +185 -0
  278. package/lib/types/Matrix.d.ts +3 -0
  279. package/lib/types/Matrix.d.ts.map +1 -0
  280. package/lib/types/Matrix.js +10 -0
  281. package/lib/types/Matrix2D.d.ts +363 -0
  282. package/lib/types/Matrix2D.d.ts.map +1 -0
  283. package/lib/types/Matrix2D.js +554 -0
  284. package/lib/types/Origin.d.ts +17 -0
  285. package/lib/types/Origin.d.ts.map +1 -0
  286. package/lib/types/Origin.js +53 -0
  287. package/lib/types/Spacing.d.ts +36 -0
  288. package/lib/types/Spacing.d.ts.map +1 -0
  289. package/lib/types/Spacing.js +70 -0
  290. package/lib/types/Type.d.ts +9 -0
  291. package/lib/types/Type.d.ts.map +1 -0
  292. package/lib/types/Type.js +5 -0
  293. package/lib/types/Vector.d.ts +203 -0
  294. package/lib/types/Vector.d.ts.map +1 -0
  295. package/lib/types/Vector.js +355 -0
  296. package/lib/types/alignment-enums.d.ts +22 -0
  297. package/lib/types/alignment-enums.d.ts.map +1 -0
  298. package/lib/types/alignment-enums.js +25 -0
  299. package/lib/types/index.d.ts +17 -0
  300. package/lib/types/index.d.ts.map +1 -0
  301. package/lib/types/index.js +17 -0
  302. package/lib/types/vector-transformations.d.ts +20 -0
  303. package/lib/types/vector-transformations.d.ts.map +1 -0
  304. package/lib/types/vector-transformations.js +31 -0
  305. package/lib/utils/DetailedError.d.ts +24 -0
  306. package/lib/utils/DetailedError.d.ts.map +1 -0
  307. package/lib/utils/DetailedError.js +16 -0
  308. package/lib/utils/ExperimentalError.d.ts +10 -0
  309. package/lib/utils/ExperimentalError.d.ts.map +1 -0
  310. package/lib/utils/ExperimentalError.js +32 -0
  311. package/lib/utils/Semaphore.d.ts +12 -0
  312. package/lib/utils/Semaphore.d.ts.map +1 -0
  313. package/lib/utils/Semaphore.js +25 -0
  314. package/lib/utils/beginSlide.d.ts +3 -0
  315. package/lib/utils/beginSlide.d.ts.map +1 -0
  316. package/lib/utils/beginSlide.js +12 -0
  317. package/lib/utils/capitalize.d.ts +2 -0
  318. package/lib/utils/capitalize.d.ts.map +1 -0
  319. package/lib/utils/capitalize.js +4 -0
  320. package/lib/utils/createRef.d.ts +15 -0
  321. package/lib/utils/createRef.d.ts.map +1 -0
  322. package/lib/utils/createRef.js +21 -0
  323. package/lib/utils/createRefArray.d.ts +27 -0
  324. package/lib/utils/createRefArray.d.ts.map +1 -0
  325. package/lib/utils/createRefArray.js +49 -0
  326. package/lib/utils/createRefMap.d.ts +50 -0
  327. package/lib/utils/createRefMap.d.ts.map +1 -0
  328. package/lib/utils/createRefMap.js +77 -0
  329. package/lib/utils/debug.d.ts +24 -0
  330. package/lib/utils/debug.d.ts.map +1 -0
  331. package/lib/utils/debug.js +47 -0
  332. package/lib/utils/deprecate.d.ts +9 -0
  333. package/lib/utils/deprecate.d.ts.map +1 -0
  334. package/lib/utils/deprecate.js +15 -0
  335. package/lib/utils/errorToLog.d.ts +3 -0
  336. package/lib/utils/errorToLog.d.ts.map +1 -0
  337. package/lib/utils/errorToLog.js +8 -0
  338. package/lib/utils/experimentalLog.d.ts +3 -0
  339. package/lib/utils/experimentalLog.d.ts.map +1 -0
  340. package/lib/utils/experimentalLog.js +10 -0
  341. package/lib/utils/getContext.d.ts +2 -0
  342. package/lib/utils/getContext.d.ts.map +1 -0
  343. package/lib/utils/getContext.js +8 -0
  344. package/lib/utils/index.d.ts +26 -0
  345. package/lib/utils/index.d.ts.map +1 -0
  346. package/lib/utils/index.js +26 -0
  347. package/lib/utils/math.d.ts +15 -0
  348. package/lib/utils/math.d.ts.map +1 -0
  349. package/lib/utils/math.js +15 -0
  350. package/lib/utils/range.d.ts +40 -0
  351. package/lib/utils/range.d.ts.map +1 -0
  352. package/lib/utils/range.js +18 -0
  353. package/lib/utils/useContext.d.ts +13 -0
  354. package/lib/utils/useContext.d.ts.map +1 -0
  355. package/lib/utils/useContext.js +18 -0
  356. package/lib/utils/usePlayback.d.ts +8 -0
  357. package/lib/utils/usePlayback.d.ts.map +1 -0
  358. package/lib/utils/usePlayback.js +20 -0
  359. package/lib/utils/useScene.d.ts +17 -0
  360. package/lib/utils/useScene.d.ts.map +1 -0
  361. package/lib/utils/useScene.js +33 -0
  362. package/lib/utils/useThread.d.ts +8 -0
  363. package/lib/utils/useThread.d.ts.map +1 -0
  364. package/lib/utils/useThread.js +24 -0
  365. package/lib/utils/useTime.d.ts +19 -0
  366. package/lib/utils/useTime.d.ts.map +1 -0
  367. package/lib/utils/useTime.js +22 -0
  368. package/package.json +2 -2
@@ -0,0 +1,375 @@
1
+ import { AsyncEventDispatcher, EventDispatcher, ValueDispatcher, } from '../events';
2
+ import { clamp } from '../tweening';
3
+ import { Vector2 } from '../types';
4
+ import { Semaphore } from '../utils';
5
+ import { PlaybackManager, PlaybackState } from './PlaybackManager';
6
+ import { PlaybackStatus } from './PlaybackStatus';
7
+ import { SharedWebGLContext } from './SharedWebGLContext';
8
+ /**
9
+ * The player logic used by the editor and embeddable player.
10
+ *
11
+ * @remarks
12
+ * This class builds on top of the `PlaybackManager` to provide a simple
13
+ * interface similar to other media players. It plays through the animation
14
+ * using a real-time update loop.
15
+ */
16
+ export class Player {
17
+ /**
18
+ * Triggered during each iteration of the update loop when the frame is ready
19
+ * to be rendered.
20
+ *
21
+ * @remarks
22
+ * Player does not perform any rendering on its own. For the animation to be
23
+ * visible, another class must subscribe to this event and perform the
24
+ * rendering itself. {@link Stage} can be used to display the animation.
25
+ *
26
+ * @eventProperty
27
+ */
28
+ get onRender() {
29
+ return this.render.subscribable;
30
+ }
31
+ get onStateChanged() {
32
+ return this.playerState.subscribable;
33
+ }
34
+ get onFrameChanged() {
35
+ return this.frame.subscribable;
36
+ }
37
+ get onDurationChanged() {
38
+ return this.duration.subscribable;
39
+ }
40
+ /**
41
+ * Triggered right after recalculation finishes.
42
+ *
43
+ * @remarks
44
+ * Can be used to provide visual feedback.
45
+ *
46
+ * @eventProperty
47
+ */
48
+ get onRecalculated() {
49
+ return this.recalculated.subscribable;
50
+ }
51
+ get startFrame() {
52
+ return Math.min(this.playback.duration, this.status.secondsToFrames(this.startTime));
53
+ }
54
+ get endFrame() {
55
+ return Math.min(this.playback.duration, this.status.secondsToFrames(this.endTime));
56
+ }
57
+ get finished() {
58
+ return this.playback.finished || this.playback.frame >= this.endFrame;
59
+ }
60
+ constructor(project, settings = {}, initialState = {}, initialFrame = -1) {
61
+ this.project = project;
62
+ this.settings = settings;
63
+ this.initialState = initialState;
64
+ this.initialFrame = initialFrame;
65
+ this.render = new AsyncEventDispatcher();
66
+ this.frame = new ValueDispatcher(0);
67
+ this.duration = new ValueDispatcher(0);
68
+ this.recalculated = new EventDispatcher();
69
+ this.lock = new Semaphore();
70
+ this.startTime = 0;
71
+ this.endTime = Infinity;
72
+ this.requestId = null;
73
+ this.renderTime = 0;
74
+ this.requestedSeek = -1;
75
+ this.requestedRender = false;
76
+ this.requestedRecalculation = true;
77
+ this.active = false;
78
+ this.playerState = new ValueDispatcher({
79
+ loop: true,
80
+ muted: true,
81
+ volume: 1,
82
+ speed: 1,
83
+ ...initialState,
84
+ paused: true,
85
+ });
86
+ this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);
87
+ this.requestedSeek = initialFrame;
88
+ this.logger = this.project.logger;
89
+ this.playback = new PlaybackManager();
90
+ this.status = new PlaybackStatus(this.playback);
91
+ this.size = settings.size ?? new Vector2(1920, 1080);
92
+ this.resolutionScale = settings.resolutionScale ?? 1;
93
+ this.startTime = settings.range?.[0] ?? 0;
94
+ this.endTime = settings.range?.[1] ?? Infinity;
95
+ this.playback.fps = settings.fps ?? 60;
96
+ const scenes = [];
97
+ for (const description of project.scenes) {
98
+ const scene = new description.klass({
99
+ ...description,
100
+ playback: this.status,
101
+ logger: this.project.logger,
102
+ size: this.size,
103
+ resolutionScale: this.resolutionScale,
104
+ sharedWebGLContext: this.sharedWebGLContext,
105
+ experimentalFeatures: project.experimentalFeatures,
106
+ });
107
+ scene.onReloaded.subscribe(() => this.requestRecalculation());
108
+ scene.variables.updateSignals(project.variables ?? {});
109
+ scenes.push(scene);
110
+ }
111
+ this.playback.setup(scenes);
112
+ this.activate();
113
+ }
114
+ async configure(settings) {
115
+ await this.lock.acquire();
116
+ let frame = this.playback.frame;
117
+ let recalculate = false;
118
+ this.startTime = settings.range[0];
119
+ this.endTime = settings.range[1];
120
+ const newFps = Math.max(1, settings.fps);
121
+ if (this.playback.fps !== newFps) {
122
+ const ratio = newFps / this.playback.fps;
123
+ this.playback.fps = newFps;
124
+ frame = Math.floor(frame * ratio);
125
+ recalculate = true;
126
+ }
127
+ if (!settings.size.exactlyEquals(this.size) ||
128
+ settings.resolutionScale !== this.resolutionScale) {
129
+ this.size = settings.size;
130
+ this.resolutionScale = settings.resolutionScale;
131
+ this.playback.reload({
132
+ size: this.size,
133
+ resolutionScale: this.resolutionScale,
134
+ });
135
+ }
136
+ this.lock.release();
137
+ if (recalculate) {
138
+ this.playback.reload();
139
+ this.frame.current = frame;
140
+ this.requestRecalculation();
141
+ this.requestedSeek = frame;
142
+ }
143
+ }
144
+ /**
145
+ * Whether the given frame is inside the animation range.
146
+ *
147
+ * @param frame - The frame to check.
148
+ */
149
+ isInRange(frame) {
150
+ return frame >= 0 && frame <= this.playback.duration;
151
+ }
152
+ /**
153
+ * Whether the given frame is inside the user-defined range.
154
+ *
155
+ * @param frame - The frame to check.
156
+ */
157
+ isInUserRange(frame) {
158
+ return frame >= this.startFrame && frame <= this.endFrame;
159
+ }
160
+ requestSeek(value) {
161
+ this.requestedSeek = this.clampRange(value);
162
+ }
163
+ requestPreviousFrame() {
164
+ this.requestedSeek = this.frame.current - this.playback.speed;
165
+ }
166
+ requestNextFrame() {
167
+ this.requestedSeek = this.frame.current + this.playback.speed;
168
+ }
169
+ requestReset() {
170
+ this.requestedSeek = 0;
171
+ }
172
+ requestRender() {
173
+ this.requestedRender = true;
174
+ }
175
+ toggleLoop(value = !this.playerState.current.loop) {
176
+ if (value !== this.playerState.current.loop) {
177
+ this.playerState.current = {
178
+ ...this.playerState.current,
179
+ loop: value,
180
+ };
181
+ }
182
+ }
183
+ togglePlayback(value = this.playerState.current.paused) {
184
+ if (value === this.playerState.current.paused) {
185
+ this.playerState.current = {
186
+ ...this.playerState.current,
187
+ paused: !value,
188
+ };
189
+ // hitting play after the animation has finished should reset the
190
+ // playback, even if looping is disabled.
191
+ if (value &&
192
+ !this.playerState.current.loop &&
193
+ this.playback.frame === this.playback.duration) {
194
+ this.requestReset();
195
+ }
196
+ }
197
+ }
198
+ toggleAudio(value = this.playerState.current.muted) {
199
+ if (value === this.playerState.current.muted) {
200
+ this.playerState.current = {
201
+ ...this.playerState.current,
202
+ muted: !value,
203
+ };
204
+ }
205
+ }
206
+ setAudioVolume(value) {
207
+ const clampedValue = clamp(0, 1, value);
208
+ if (clampedValue !== this.playerState.current.volume) {
209
+ this.playerState.current = {
210
+ ...this.playerState.current,
211
+ volume: clampedValue,
212
+ };
213
+ }
214
+ }
215
+ addAudioVolume(value) {
216
+ this.setAudioVolume(this.playerState.current.volume + value);
217
+ }
218
+ setSpeed(value) {
219
+ if (value !== this.playerState.current.speed) {
220
+ this.playback.speed = value;
221
+ this.playback.reload();
222
+ this.playerState.current = {
223
+ ...this.playerState.current,
224
+ speed: value,
225
+ };
226
+ this.requestRecalculation();
227
+ }
228
+ }
229
+ setVariables(variables) {
230
+ for (const scene of this.playback.onScenesRecalculated.current) {
231
+ scene.variables.updateSignals(variables);
232
+ }
233
+ }
234
+ /**
235
+ * Activate the player.
236
+ *
237
+ * @remarks
238
+ * A player needs to be active in order for the update loop to run. Each
239
+ * player is active by default.
240
+ */
241
+ activate() {
242
+ this.active = true;
243
+ this.request();
244
+ }
245
+ /**
246
+ * Deactivate the player.
247
+ *
248
+ * @remarks
249
+ * Deactivating the player prevents its update loop from running. This should
250
+ * be done before disposing the player, to prevent it from running in the
251
+ * background.
252
+ *
253
+ * Just pausing the player does not stop the loop.
254
+ */
255
+ deactivate() {
256
+ this.active = false;
257
+ this.sharedWebGLContext.dispose();
258
+ this.playback.currentScene.stopAllMedia();
259
+ if (this.requestId !== null) {
260
+ cancelAnimationFrame(this.requestId);
261
+ this.requestId = null;
262
+ }
263
+ }
264
+ requestRecalculation() {
265
+ this.requestedRecalculation = true;
266
+ this.request();
267
+ }
268
+ async prepare() {
269
+ const state = {
270
+ ...this.playerState.current,
271
+ seek: this.requestedSeek,
272
+ render: this.requestedRender,
273
+ };
274
+ this.requestedSeek = -1;
275
+ this.requestedRender = false;
276
+ // Recalculate the project if necessary
277
+ if (this.requestedRecalculation) {
278
+ if (state.seek < 0) {
279
+ state.seek = this.playback.frame;
280
+ }
281
+ try {
282
+ await this.playback.recalculate();
283
+ this.duration.current = this.playback.frame;
284
+ this.recalculated.dispatch();
285
+ }
286
+ catch (e) {
287
+ this.requestSeek(state.seek);
288
+ throw e;
289
+ }
290
+ finally {
291
+ this.requestedRecalculation = false;
292
+ }
293
+ }
294
+ // Pause if reached the end or the range is 0
295
+ // Seek to the beginning for non-empty scenes
296
+ if ((!state.loop && this.finished && !state.paused && state.seek < 0) ||
297
+ this.endFrame === this.startFrame) {
298
+ this.togglePlayback(false);
299
+ state.paused = true;
300
+ state.seek =
301
+ this.endFrame === this.startFrame ? state.seek : this.startFrame;
302
+ }
303
+ // Seek to the beginning if looping is enabled
304
+ if (state.loop &&
305
+ (state.seek > this.endFrame || (this.finished && !state.paused)) &&
306
+ this.startFrame !== this.endTime) {
307
+ state.seek = this.startFrame;
308
+ }
309
+ return state;
310
+ }
311
+ async run() {
312
+ const state = await this.prepare();
313
+ const previousState = this.playback.state;
314
+ this.playback.state = state.paused
315
+ ? PlaybackState.Paused
316
+ : PlaybackState.Playing;
317
+ // Seek to the given frame
318
+ if (state.seek >= 0 || !this.isInUserRange(this.status.frame)) {
319
+ const seekFrame = state.seek < 0 ? this.status.frame : state.seek;
320
+ const clampedFrame = this.clampRange(seekFrame);
321
+ this.logger.profile('seek time');
322
+ await this.playback.seek(clampedFrame);
323
+ this.logger.profile('seek time');
324
+ }
325
+ // Do nothing if paused
326
+ else if (state.paused) {
327
+ if (state.render ||
328
+ (state.paused && previousState !== PlaybackState.Paused)) {
329
+ // Tells the stage to render the current frame
330
+ await this.render.dispatch();
331
+ }
332
+ this.request();
333
+ return;
334
+ }
335
+ // Simply move forward one frame
336
+ else if (this.status.frame < this.endFrame) {
337
+ await this.playback.progress();
338
+ }
339
+ // Pause if a new slide has just started.
340
+ if (!state.paused && this.playback.currentScene.slides.isWaiting()) {
341
+ this.togglePlayback(false);
342
+ state.paused = true;
343
+ }
344
+ // Draw the project
345
+ await this.render.dispatch();
346
+ this.frame.current = this.playback.frame;
347
+ this.request();
348
+ }
349
+ request() {
350
+ if (!this.active)
351
+ return;
352
+ // TODO(konsti): make this loop not run when player is paused
353
+ this.requestId ?? (this.requestId = requestAnimationFrame(async (time) => {
354
+ this.requestId = null;
355
+ if (time - this.renderTime >= 1000 / (this.status.fps + 5)) {
356
+ this.renderTime = time;
357
+ await this.lock.acquire();
358
+ try {
359
+ await this.run();
360
+ }
361
+ catch (e) {
362
+ this.logger.error(e);
363
+ }
364
+ this.lock.release();
365
+ }
366
+ else {
367
+ this.request();
368
+ }
369
+ }));
370
+ }
371
+ clampRange(frame) {
372
+ return clamp(this.startFrame, this.endFrame, frame);
373
+ }
374
+ }
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQWlCeEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQ2pCOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBR0QsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUdELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQW9CRCxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLElBQUks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
@@ -0,0 +1,145 @@
1
+ import type { FfmpegExporterOptions, ImageExporterOptions } from '../exporter';
2
+ import type { Plugin } from '../plugin';
3
+ import type { SceneDescription } from '../scenes';
4
+ import type { CanvasColorSpace, Color, Vector2 } from '../types';
5
+ import type { Logger } from './Logger';
6
+ export interface Versions {
7
+ core: string;
8
+ two: string | null;
9
+ ui: string | null;
10
+ vitePlugin: string | null;
11
+ }
12
+ export declare function createVersionObject(version: string): {
13
+ core: string;
14
+ two: string;
15
+ ui: string;
16
+ vitePlugin: string;
17
+ };
18
+ export type ExporterSettings = {
19
+ name: '@twick/core/image-sequence';
20
+ options: ImageExporterOptions;
21
+ } | {
22
+ name: '@twick/core/ffmpeg';
23
+ options: FfmpegExporterOptions;
24
+ } | {
25
+ name: '@twick/core/wasm';
26
+ };
27
+ export interface ProjectSettings {
28
+ shared: {
29
+ background: Color;
30
+ range: [number, number];
31
+ size: Vector2;
32
+ };
33
+ rendering: {
34
+ exporter: ExporterSettings;
35
+ fps: number;
36
+ resolutionScale: number;
37
+ colorSpace: CanvasColorSpace;
38
+ };
39
+ preview: {
40
+ fps: number;
41
+ resolutionScale: number;
42
+ };
43
+ }
44
+ export interface UserProjectSettings {
45
+ shared: {
46
+ range: [number, number];
47
+ background: string | null;
48
+ size: {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ };
53
+ rendering: {
54
+ exporter: ExporterSettings;
55
+ fps: number;
56
+ resolutionScale: number;
57
+ colorSpace: CanvasColorSpace;
58
+ };
59
+ preview: {
60
+ fps: number;
61
+ resolutionScale: number;
62
+ };
63
+ }
64
+ /**
65
+ * Settings that can be passed to the renderVideo / renderPartialVideo functions
66
+ */
67
+ export type RenderVideoUserProjectSettings = {
68
+ range?: UserProjectSettings['shared']['range'];
69
+ background?: UserProjectSettings['shared']['background'];
70
+ size?: UserProjectSettings['shared']['size'];
71
+ exporter?: UserProjectSettings['rendering']['exporter'];
72
+ };
73
+ /**
74
+ * Settings that can be passed to the createProject function
75
+ */
76
+ export type PartialUserProjectSettings = {
77
+ shared?: Partial<UserProjectSettings['shared']>;
78
+ rendering?: Partial<UserProjectSettings['rendering']>;
79
+ preview?: Partial<UserProjectSettings['preview']>;
80
+ };
81
+ export interface UserProject {
82
+ /**
83
+ * The name of the project.
84
+ */
85
+ name?: string;
86
+ /**
87
+ * A list of scene descriptions that make up the project.
88
+ */
89
+ scenes: SceneDescription<any>[];
90
+ /**
91
+ * Default values for project variables.
92
+ *
93
+ * @see https://motioncanvas.io/docs/project-variables
94
+ */
95
+ variables?: Record<string, unknown>;
96
+ /**
97
+ * Enable experimental features.
98
+ *
99
+ * @see https://motioncanvas.io/docs/experimental
100
+ *
101
+ * @experimental
102
+ */
103
+ experimentalFeatures?: boolean;
104
+ /**
105
+ * Settings for the project. This includes shared settings, rendering settings
106
+ * and preview settings.
107
+ *
108
+ * Includes things like the background color, the resolution, the frame rate,
109
+ * and the exporter to use.
110
+ */
111
+ settings?: PartialUserProjectSettings;
112
+ }
113
+ /**
114
+ * Internal project that includes legacy properties that can't be changed by the user
115
+ * as well as defaulted properties in case the user didn't provide them.
116
+ */
117
+ export interface Project extends Omit<UserProject, 'settings'> {
118
+ name: string;
119
+ settings: ProjectSettings;
120
+ /**
121
+ * @deprecated Not exposed in the public API. We set the exporters as plugins
122
+ * which is why we can't delete this yet.
123
+ *
124
+ * // TODO(konsti): get rid of plugins
125
+ *
126
+ * A list of plugins to include in the project.
127
+ *
128
+ * @remarks
129
+ * When a string is provided, the plugin will be imported dynamically using
130
+ * the string as the module specifier. This is the preferred way to include
131
+ * editor plugins because it makes sure that the plugin's source code gets
132
+ * excluded from the production build.
133
+ */
134
+ plugins: Plugin[];
135
+ /**
136
+ * Not exposed in the public API.
137
+ */
138
+ logger: Logger;
139
+ /**
140
+ * Manually set via a constant. This should be automated by reading the
141
+ * package.json files of the packages.
142
+ */
143
+ versions: Versions;
144
+ }
145
+ //# sourceMappingURL=Project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/app/Project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAE,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAC,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAGD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;;;EAOlD;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,4BAA4B,CAAC;IACnC,OAAO,EAAE,oBAAoB,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,qBAAqB,CAAC;CAChC,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAGN,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QACN,UAAU,EAAE,KAAK,CAAC;QAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,gBAAgB,CAAC;KAC9B,CAAC;IACF,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAGD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,IAAI,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;KAC9B,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,gBAAgB,CAAC;KAC9B,CAAC;IACF,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AAEH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,KAAK,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7C,QAAQ,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC;CACzD,CAAC;AAEF;;GAEG;AAEH,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAEhC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,OAAQ,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAE1B;;;;;;;;;;;;;OAaG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
@@ -0,0 +1,10 @@
1
+ // TODO(refactor): check if we can get rid of this
2
+ export function createVersionObject(version) {
3
+ return {
4
+ core: version,
5
+ two: version,
6
+ ui: version,
7
+ vitePlugin: version,
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvUHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxrREFBa0Q7QUFDbEQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWU7SUFDakQsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsR0FBRyxFQUFFLE9BQU87UUFDWixFQUFFLEVBQUUsT0FBTztRQUNYLFVBQVUsRUFBRSxPQUFPO0tBQ3BCLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,90 @@
1
+ import type { ExporterSettings, Project } from './Project';
2
+ import type { StageSettings } from './Stage';
3
+ import { Stage } from './Stage';
4
+ import { TimeEstimator } from './TimeEstimator';
5
+ export interface RendererSettings extends StageSettings {
6
+ name: string;
7
+ range: [number, number];
8
+ fps: number;
9
+ exporter: ExporterSettings;
10
+ hiddenFolderId?: string;
11
+ }
12
+ export interface AssetInfo {
13
+ key: string;
14
+ type: 'video' | 'audio';
15
+ src: string;
16
+ playbackRate: number;
17
+ volume: number;
18
+ currentTime: number;
19
+ duration: number;
20
+ decoder?: string | null;
21
+ }
22
+ export declare enum RendererState {
23
+ Initial = 0,
24
+ Working = 1,
25
+ Aborting = 2
26
+ }
27
+ export declare enum RendererResult {
28
+ Success = 0,
29
+ Error = 1,
30
+ Aborted = 2
31
+ }
32
+ /**
33
+ * The rendering logic used by the editor to export animations.
34
+ *
35
+ * @remarks
36
+ * This class uses the `PlaybackManager` to render animations. In contrast to a
37
+ * player, a renderer does not use an update loop. It plays through the
38
+ * animation as fast as it can, occasionally pausing to keep the UI responsive.
39
+ *
40
+ * The actual exporting is outsourced to an Exporter.
41
+ */
42
+ export declare class Renderer {
43
+ private project;
44
+ get onStateChanged(): import("../events").SubscribableValueEvent<RendererState>;
45
+ private readonly state;
46
+ get onFinished(): import("../events").Subscribable<RendererResult, import("../events").EventHandler<RendererResult>>;
47
+ private readonly finished;
48
+ get onFrameChanged(): import("../events").SubscribableValueEvent<number>;
49
+ private readonly frame;
50
+ readonly stage: Stage;
51
+ readonly estimator: TimeEstimator;
52
+ private readonly lock;
53
+ private readonly playback;
54
+ private readonly status;
55
+ private readonly sharedWebGLContext;
56
+ private exporter;
57
+ private abortController;
58
+ constructor(project: Project);
59
+ /**
60
+ * Returns number of frames that a project will have.
61
+ */
62
+ getNumberOfFrames(settings: RendererSettings): Promise<number>;
63
+ frameToTime(frame: number): number;
64
+ timeToFrame(second: number): number;
65
+ /**
66
+ * Render the animation using the provided settings.
67
+ *
68
+ * @param settings - The rendering settings.
69
+ */
70
+ render(settings: RendererSettings): Promise<void>;
71
+ /**
72
+ * Abort the ongoing render process.
73
+ */
74
+ abort(): void;
75
+ /**
76
+ * Export an individual frame.
77
+ *
78
+ * @remarks
79
+ * This method always uses the default `ImageExporter`.
80
+ *
81
+ * @param settings - The rendering settings.
82
+ * @param time - The timestamp to export.
83
+ */
84
+ renderFrame(settings: RendererSettings, time: number): Promise<void>;
85
+ private run;
86
+ private reloadScenes;
87
+ private exportFrame;
88
+ private getMediaByFrames;
89
+ }
90
+ //# sourceMappingURL=Renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../src/app/Renderer.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAC,gBAAgB,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,oBAAY,aAAa;IACvB,OAAO,IAAA;IACP,OAAO,IAAA;IACP,QAAQ,IAAA;CACT;AAED,oBAAY,cAAc;IACxB,OAAO,IAAA;IACP,KAAK,IAAA;IACL,OAAO,IAAA;CACR;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IA0BA,OAAO,CAAC,OAAO;IAzBlC,IAAW,cAAc,8DAExB;IACD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IAEpE,IAAW,UAAU,uGAEpB;IACD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAElE,IAAW,cAAc,uDAExB;IACD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,SAAgB,KAAK,QAAe;IACpC,SAAgB,SAAS,gBAAuB;IAEhD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,eAAe,CAAgC;gBAE5B,OAAO,EAAE,OAAO;IAqB3C;;OAEG;IACU,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB;IAkBlD,WAAW,CAAC,KAAK,EAAE,MAAM;IAIzB,WAAW,CAAC,MAAM,EAAE,MAAM;IAIjC;;;;OAIG;IACU,MAAM,CAAC,QAAQ,EAAE,gBAAgB;IA8B9C;;OAEG;IACI,KAAK;IAMZ;;;;;;;;OAQG;IACU,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;YAgCnD,GAAG;YAkIH,YAAY;YAWZ,WAAW;YAmBX,gBAAgB;CAqC/B"}