@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.
Files changed (373) hide show
  1. package/LICENSE +21 -0
  2. package/lib/app/Logger.d.ts +105 -0
  3. package/lib/app/Logger.d.ts.map +1 -0
  4. package/lib/app/Logger.js +77 -0
  5. package/lib/app/PlaybackManager.d.ts +55 -0
  6. package/lib/app/PlaybackManager.d.ts.map +1 -0
  7. package/lib/app/PlaybackManager.js +179 -0
  8. package/lib/app/PlaybackStatus.d.ts +30 -0
  9. package/lib/app/PlaybackStatus.d.ts.map +1 -0
  10. package/lib/app/PlaybackStatus.js +46 -0
  11. package/lib/app/Player.d.ts +130 -0
  12. package/lib/app/Player.d.ts.map +1 -0
  13. package/lib/app/Player.js +375 -0
  14. package/lib/app/Project.d.ts +145 -0
  15. package/lib/app/Project.d.ts.map +1 -0
  16. package/lib/app/Project.js +10 -0
  17. package/lib/app/Renderer.d.ts +90 -0
  18. package/lib/app/Renderer.d.ts.map +1 -0
  19. package/lib/app/Renderer.js +318 -0
  20. package/lib/app/SharedWebGLContext.d.ts +24 -0
  21. package/lib/app/SharedWebGLContext.d.ts.map +1 -0
  22. package/lib/app/SharedWebGLContext.js +200 -0
  23. package/lib/app/Stage.d.ts +30 -0
  24. package/lib/app/Stage.d.ts.map +1 -0
  25. package/lib/app/Stage.js +75 -0
  26. package/lib/app/TimeEstimator.d.ts +53 -0
  27. package/lib/app/TimeEstimator.d.ts.map +1 -0
  28. package/lib/app/TimeEstimator.js +70 -0
  29. package/lib/app/index.d.ts +16 -0
  30. package/lib/app/index.d.ts.map +1 -0
  31. package/lib/app/index.js +16 -0
  32. package/lib/app/makeProject.d.ts +15 -0
  33. package/lib/app/makeProject.d.ts.map +1 -0
  34. package/lib/app/makeProject.js +72 -0
  35. package/lib/app/project-settings.d.ts +8 -0
  36. package/lib/app/project-settings.d.ts.map +1 -0
  37. package/lib/app/project-settings.js +13 -0
  38. package/lib/decorators/decorate.d.ts +2 -0
  39. package/lib/decorators/decorate.d.ts.map +1 -0
  40. package/lib/decorators/decorate.js +10 -0
  41. package/lib/decorators/deprecated.d.ts +5 -0
  42. package/lib/decorators/deprecated.d.ts.map +1 -0
  43. package/lib/decorators/deprecated.js +23 -0
  44. package/lib/decorators/index.d.ts +9 -0
  45. package/lib/decorators/index.d.ts.map +1 -0
  46. package/lib/decorators/index.js +9 -0
  47. package/lib/decorators/lazy.d.ts +14 -0
  48. package/lib/decorators/lazy.d.ts.map +1 -0
  49. package/lib/decorators/lazy.js +27 -0
  50. package/lib/decorators/threadable.d.ts +2 -0
  51. package/lib/decorators/threadable.d.ts.map +1 -0
  52. package/lib/decorators/threadable.js +7 -0
  53. package/lib/events/AsyncEventDispatcher.d.ts +45 -0
  54. package/lib/events/AsyncEventDispatcher.d.ts.map +1 -0
  55. package/lib/events/AsyncEventDispatcher.js +33 -0
  56. package/lib/events/EventDispatcher.d.ts +38 -0
  57. package/lib/events/EventDispatcher.d.ts.map +1 -0
  58. package/lib/events/EventDispatcher.js +29 -0
  59. package/lib/events/EventDispatcherBase.d.ts +55 -0
  60. package/lib/events/EventDispatcherBase.d.ts.map +1 -0
  61. package/lib/events/EventDispatcherBase.js +68 -0
  62. package/lib/events/FlagDispatcher.d.ts +54 -0
  63. package/lib/events/FlagDispatcher.d.ts.map +1 -0
  64. package/lib/events/FlagDispatcher.js +63 -0
  65. package/lib/events/ValueDispatcher.d.ts +81 -0
  66. package/lib/events/ValueDispatcher.d.ts.map +1 -0
  67. package/lib/events/ValueDispatcher.js +97 -0
  68. package/lib/events/index.d.ts +11 -0
  69. package/lib/events/index.d.ts.map +1 -0
  70. package/lib/events/index.js +11 -0
  71. package/lib/exporter/Exporter.d.ts +101 -0
  72. package/lib/exporter/Exporter.d.ts.map +1 -0
  73. package/lib/exporter/Exporter.js +2 -0
  74. package/lib/exporter/FFmpegExporter.d.ts +50 -0
  75. package/lib/exporter/FFmpegExporter.d.ts.map +1 -0
  76. package/lib/exporter/FFmpegExporter.js +140 -0
  77. package/lib/exporter/ImageExporter.d.ts +34 -0
  78. package/lib/exporter/ImageExporter.d.ts.map +1 -0
  79. package/lib/exporter/ImageExporter.js +80 -0
  80. package/lib/exporter/WasmExporter.d.ts +19 -0
  81. package/lib/exporter/WasmExporter.d.ts.map +1 -0
  82. package/lib/exporter/WasmExporter.js +78 -0
  83. package/lib/exporter/download-videos.d.ts +3 -0
  84. package/lib/exporter/download-videos.d.ts.map +1 -0
  85. package/lib/exporter/download-videos.js +45 -0
  86. package/lib/exporter/index.d.ts +5 -0
  87. package/lib/exporter/index.d.ts.map +1 -0
  88. package/lib/exporter/index.js +5 -0
  89. package/lib/flow/all.d.ts +18 -0
  90. package/lib/flow/all.d.ts.map +1 -0
  91. package/lib/flow/all.js +25 -0
  92. package/lib/flow/any.d.ts +18 -0
  93. package/lib/flow/any.d.ts.map +1 -0
  94. package/lib/flow/any.js +25 -0
  95. package/lib/flow/chain.d.ts +36 -0
  96. package/lib/flow/chain.d.ts.map +1 -0
  97. package/lib/flow/chain.js +46 -0
  98. package/lib/flow/delay.d.ts +29 -0
  99. package/lib/flow/delay.d.ts.map +1 -0
  100. package/lib/flow/delay.js +39 -0
  101. package/lib/flow/every.d.ts +41 -0
  102. package/lib/flow/every.d.ts.map +1 -0
  103. package/lib/flow/every.js +61 -0
  104. package/lib/flow/index.d.ts +17 -0
  105. package/lib/flow/index.d.ts.map +1 -0
  106. package/lib/flow/index.js +17 -0
  107. package/lib/flow/join.d.ts +35 -0
  108. package/lib/flow/join.d.ts.map +1 -0
  109. package/lib/flow/join.js +33 -0
  110. package/lib/flow/loop.d.ts +58 -0
  111. package/lib/flow/loop.d.ts.map +1 -0
  112. package/lib/flow/loop.js +51 -0
  113. package/lib/flow/loopFor.d.ts +25 -0
  114. package/lib/flow/loopFor.d.ts.map +1 -0
  115. package/lib/flow/loopFor.js +42 -0
  116. package/lib/flow/names.d.ts +3 -0
  117. package/lib/flow/names.d.ts.map +1 -0
  118. package/lib/flow/names.js +11 -0
  119. package/lib/flow/run.d.ts +45 -0
  120. package/lib/flow/run.d.ts.map +1 -0
  121. package/lib/flow/run.js +14 -0
  122. package/lib/flow/scheduling.d.ts +18 -0
  123. package/lib/flow/scheduling.d.ts.map +1 -0
  124. package/lib/flow/scheduling.js +33 -0
  125. package/lib/flow/sequence.d.ts +22 -0
  126. package/lib/flow/sequence.d.ts.map +1 -0
  127. package/lib/flow/sequence.js +31 -0
  128. package/lib/index.d.ts +16 -0
  129. package/lib/index.d.ts.map +1 -0
  130. package/lib/index.js +16 -0
  131. package/lib/media/index.d.ts +7 -0
  132. package/lib/media/index.d.ts.map +1 -0
  133. package/lib/media/index.js +7 -0
  134. package/lib/media/loadImage.d.ts +8 -0
  135. package/lib/media/loadImage.d.ts.map +1 -0
  136. package/lib/media/loadImage.js +29 -0
  137. package/lib/plugin/DefaultPlugin.d.ts +10 -0
  138. package/lib/plugin/DefaultPlugin.d.ts.map +1 -0
  139. package/lib/plugin/DefaultPlugin.js +17 -0
  140. package/lib/plugin/Plugin.d.ts +53 -0
  141. package/lib/plugin/Plugin.d.ts.map +1 -0
  142. package/lib/plugin/Plugin.js +2 -0
  143. package/lib/plugin/index.d.ts +3 -0
  144. package/lib/plugin/index.d.ts.map +1 -0
  145. package/lib/plugin/index.js +3 -0
  146. package/lib/plugin/makePlugin.d.ts +15 -0
  147. package/lib/plugin/makePlugin.d.ts.map +1 -0
  148. package/lib/plugin/makePlugin.js +16 -0
  149. package/lib/scenes/GeneratorScene.d.ts +95 -0
  150. package/lib/scenes/GeneratorScene.d.ts.map +1 -0
  151. package/lib/scenes/GeneratorScene.js +273 -0
  152. package/lib/scenes/Inspectable.d.ts +71 -0
  153. package/lib/scenes/Inspectable.d.ts.map +1 -0
  154. package/lib/scenes/Inspectable.js +4 -0
  155. package/lib/scenes/LifecycleEvents.d.ts +18 -0
  156. package/lib/scenes/LifecycleEvents.d.ts.map +1 -0
  157. package/lib/scenes/LifecycleEvents.js +45 -0
  158. package/lib/scenes/Random.d.ts +66 -0
  159. package/lib/scenes/Random.d.ts.map +1 -0
  160. package/lib/scenes/Random.js +101 -0
  161. package/lib/scenes/Scene.d.ts +298 -0
  162. package/lib/scenes/Scene.d.ts.map +1 -0
  163. package/lib/scenes/Scene.js +25 -0
  164. package/lib/scenes/SceneState.d.ts +34 -0
  165. package/lib/scenes/SceneState.d.ts.map +1 -0
  166. package/lib/scenes/SceneState.js +35 -0
  167. package/lib/scenes/Shaders.d.ts +63 -0
  168. package/lib/scenes/Shaders.d.ts.map +1 -0
  169. package/lib/scenes/Shaders.js +158 -0
  170. package/lib/scenes/Slides.d.ts +33 -0
  171. package/lib/scenes/Slides.d.ts.map +1 -0
  172. package/lib/scenes/Slides.js +115 -0
  173. package/lib/scenes/Threadable.d.ts +19 -0
  174. package/lib/scenes/Threadable.d.ts.map +1 -0
  175. package/lib/scenes/Threadable.js +4 -0
  176. package/lib/scenes/Variables.d.ts +24 -0
  177. package/lib/scenes/Variables.d.ts.map +1 -0
  178. package/lib/scenes/Variables.js +39 -0
  179. package/lib/scenes/index.d.ts +16 -0
  180. package/lib/scenes/index.d.ts.map +1 -0
  181. package/lib/scenes/index.js +16 -0
  182. package/lib/signals/CompoundSignalContext.d.ts +21 -0
  183. package/lib/signals/CompoundSignalContext.d.ts.map +1 -0
  184. package/lib/signals/CompoundSignalContext.js +73 -0
  185. package/lib/signals/ComputedContext.d.ts +14 -0
  186. package/lib/signals/ComputedContext.d.ts.map +1 -0
  187. package/lib/signals/ComputedContext.js +36 -0
  188. package/lib/signals/DependencyContext.d.ts +32 -0
  189. package/lib/signals/DependencyContext.d.ts.map +1 -0
  190. package/lib/signals/DependencyContext.js +87 -0
  191. package/lib/signals/SignalContext.d.ts +120 -0
  192. package/lib/signals/SignalContext.d.ts.map +1 -0
  193. package/lib/signals/SignalContext.js +245 -0
  194. package/lib/signals/createComputed.d.ts +3 -0
  195. package/lib/signals/createComputed.d.ts.map +1 -0
  196. package/lib/signals/createComputed.js +5 -0
  197. package/lib/signals/createComputedAsync.d.ts +4 -0
  198. package/lib/signals/createComputedAsync.d.ts.map +1 -0
  199. package/lib/signals/createComputedAsync.js +15 -0
  200. package/lib/signals/createSignal.d.ts +5 -0
  201. package/lib/signals/createSignal.d.ts.map +1 -0
  202. package/lib/signals/createSignal.js +6 -0
  203. package/lib/signals/index.d.ts +16 -0
  204. package/lib/signals/index.d.ts.map +1 -0
  205. package/lib/signals/index.js +16 -0
  206. package/lib/signals/symbols.d.ts +2 -0
  207. package/lib/signals/symbols.d.ts.map +1 -0
  208. package/lib/signals/symbols.js +2 -0
  209. package/lib/signals/types.d.ts +51 -0
  210. package/lib/signals/types.d.ts.map +1 -0
  211. package/lib/signals/types.js +2 -0
  212. package/lib/signals/utils.d.ts +5 -0
  213. package/lib/signals/utils.d.ts.map +1 -0
  214. package/lib/signals/utils.js +10 -0
  215. package/lib/threading/Thread.d.ts +77 -0
  216. package/lib/threading/Thread.d.ts.map +1 -0
  217. package/lib/threading/Thread.js +169 -0
  218. package/lib/threading/ThreadGenerator.d.ts +39 -0
  219. package/lib/threading/ThreadGenerator.d.ts.map +1 -0
  220. package/lib/threading/ThreadGenerator.js +17 -0
  221. package/lib/threading/cancel.d.ts +17 -0
  222. package/lib/threading/cancel.d.ts.map +1 -0
  223. package/lib/threading/cancel.js +26 -0
  224. package/lib/threading/index.d.ts +11 -0
  225. package/lib/threading/index.d.ts.map +1 -0
  226. package/lib/threading/index.js +11 -0
  227. package/lib/threading/spawn.d.ts +28 -0
  228. package/lib/threading/spawn.d.ts.map +1 -0
  229. package/lib/threading/spawn.js +30 -0
  230. package/lib/threading/threads.d.ts +46 -0
  231. package/lib/threading/threads.d.ts.map +1 -0
  232. package/lib/threading/threads.js +89 -0
  233. package/lib/transitions/fadeTransition.d.ts +8 -0
  234. package/lib/transitions/fadeTransition.d.ts.map +1 -0
  235. package/lib/transitions/fadeTransition.js +16 -0
  236. package/lib/transitions/index.d.ts +11 -0
  237. package/lib/transitions/index.d.ts.map +1 -0
  238. package/lib/transitions/index.js +11 -0
  239. package/lib/transitions/slideTransition.d.ts +18 -0
  240. package/lib/transitions/slideTransition.d.ts.map +1 -0
  241. package/lib/transitions/slideTransition.js +14 -0
  242. package/lib/transitions/useTransition.d.ts +10 -0
  243. package/lib/transitions/useTransition.d.ts.map +1 -0
  244. package/lib/transitions/useTransition.js +27 -0
  245. package/lib/transitions/zoomInTransition.d.ts +10 -0
  246. package/lib/transitions/zoomInTransition.d.ts.map +1 -0
  247. package/lib/transitions/zoomInTransition.js +33 -0
  248. package/lib/transitions/zoomOutTransition.d.ts +10 -0
  249. package/lib/transitions/zoomOutTransition.d.ts.map +1 -0
  250. package/lib/transitions/zoomOutTransition.js +33 -0
  251. package/lib/tsconfig.build.tsbuildinfo +1 -0
  252. package/lib/tweening/helpers.d.ts +5 -0
  253. package/lib/tweening/helpers.d.ts.map +1 -0
  254. package/lib/tweening/helpers.js +16 -0
  255. package/lib/tweening/index.d.ts +11 -0
  256. package/lib/tweening/index.d.ts.map +1 -0
  257. package/lib/tweening/index.js +11 -0
  258. package/lib/tweening/interpolationFunctions.d.ts +38 -0
  259. package/lib/tweening/interpolationFunctions.d.ts.map +1 -0
  260. package/lib/tweening/interpolationFunctions.js +107 -0
  261. package/lib/tweening/spring.d.ts +20 -0
  262. package/lib/tweening/spring.d.ts.map +1 -0
  263. package/lib/tweening/spring.js +103 -0
  264. package/lib/tweening/timingFunctions.d.ts +46 -0
  265. package/lib/tweening/timingFunctions.d.ts.map +1 -0
  266. package/lib/tweening/timingFunctions.js +233 -0
  267. package/lib/tweening/tween.d.ts +3 -0
  268. package/lib/tweening/tween.d.ts.map +1 -0
  269. package/lib/tweening/tween.js +21 -0
  270. package/lib/types/BBox.d.ts +73 -0
  271. package/lib/types/BBox.d.ts.map +1 -0
  272. package/lib/types/BBox.js +249 -0
  273. package/lib/types/Canvas.d.ts +3 -0
  274. package/lib/types/Canvas.d.ts.map +1 -0
  275. package/lib/types/Canvas.js +2 -0
  276. package/lib/types/Color.d.ts +65 -0
  277. package/lib/types/Color.d.ts.map +1 -0
  278. package/lib/types/Color.js +185 -0
  279. package/lib/types/Matrix.d.ts +3 -0
  280. package/lib/types/Matrix.d.ts.map +1 -0
  281. package/lib/types/Matrix.js +10 -0
  282. package/lib/types/Matrix2D.d.ts +363 -0
  283. package/lib/types/Matrix2D.d.ts.map +1 -0
  284. package/lib/types/Matrix2D.js +554 -0
  285. package/lib/types/Origin.d.ts +17 -0
  286. package/lib/types/Origin.d.ts.map +1 -0
  287. package/lib/types/Origin.js +53 -0
  288. package/lib/types/Spacing.d.ts +36 -0
  289. package/lib/types/Spacing.d.ts.map +1 -0
  290. package/lib/types/Spacing.js +70 -0
  291. package/lib/types/Type.d.ts +9 -0
  292. package/lib/types/Type.d.ts.map +1 -0
  293. package/lib/types/Type.js +5 -0
  294. package/lib/types/Vector.d.ts +203 -0
  295. package/lib/types/Vector.d.ts.map +1 -0
  296. package/lib/types/Vector.js +355 -0
  297. package/lib/types/alignment-enums.d.ts +22 -0
  298. package/lib/types/alignment-enums.d.ts.map +1 -0
  299. package/lib/types/alignment-enums.js +25 -0
  300. package/lib/types/index.d.ts +17 -0
  301. package/lib/types/index.d.ts.map +1 -0
  302. package/lib/types/index.js +17 -0
  303. package/lib/types/vector-transformations.d.ts +20 -0
  304. package/lib/types/vector-transformations.d.ts.map +1 -0
  305. package/lib/types/vector-transformations.js +31 -0
  306. package/lib/utils/DetailedError.d.ts +24 -0
  307. package/lib/utils/DetailedError.d.ts.map +1 -0
  308. package/lib/utils/DetailedError.js +16 -0
  309. package/lib/utils/ExperimentalError.d.ts +10 -0
  310. package/lib/utils/ExperimentalError.d.ts.map +1 -0
  311. package/lib/utils/ExperimentalError.js +32 -0
  312. package/lib/utils/Semaphore.d.ts +12 -0
  313. package/lib/utils/Semaphore.d.ts.map +1 -0
  314. package/lib/utils/Semaphore.js +25 -0
  315. package/lib/utils/beginSlide.d.ts +3 -0
  316. package/lib/utils/beginSlide.d.ts.map +1 -0
  317. package/lib/utils/beginSlide.js +12 -0
  318. package/lib/utils/capitalize.d.ts +2 -0
  319. package/lib/utils/capitalize.d.ts.map +1 -0
  320. package/lib/utils/capitalize.js +4 -0
  321. package/lib/utils/createRef.d.ts +15 -0
  322. package/lib/utils/createRef.d.ts.map +1 -0
  323. package/lib/utils/createRef.js +21 -0
  324. package/lib/utils/createRefArray.d.ts +27 -0
  325. package/lib/utils/createRefArray.d.ts.map +1 -0
  326. package/lib/utils/createRefArray.js +49 -0
  327. package/lib/utils/createRefMap.d.ts +50 -0
  328. package/lib/utils/createRefMap.d.ts.map +1 -0
  329. package/lib/utils/createRefMap.js +77 -0
  330. package/lib/utils/debug.d.ts +24 -0
  331. package/lib/utils/debug.d.ts.map +1 -0
  332. package/lib/utils/debug.js +47 -0
  333. package/lib/utils/deprecate.d.ts +9 -0
  334. package/lib/utils/deprecate.d.ts.map +1 -0
  335. package/lib/utils/deprecate.js +15 -0
  336. package/lib/utils/errorToLog.d.ts +3 -0
  337. package/lib/utils/errorToLog.d.ts.map +1 -0
  338. package/lib/utils/errorToLog.js +8 -0
  339. package/lib/utils/experimentalLog.d.ts +3 -0
  340. package/lib/utils/experimentalLog.d.ts.map +1 -0
  341. package/lib/utils/experimentalLog.js +10 -0
  342. package/lib/utils/getContext.d.ts +2 -0
  343. package/lib/utils/getContext.d.ts.map +1 -0
  344. package/lib/utils/getContext.js +8 -0
  345. package/lib/utils/index.d.ts +26 -0
  346. package/lib/utils/index.d.ts.map +1 -0
  347. package/lib/utils/index.js +26 -0
  348. package/lib/utils/math.d.ts +15 -0
  349. package/lib/utils/math.d.ts.map +1 -0
  350. package/lib/utils/math.js +15 -0
  351. package/lib/utils/range.d.ts +40 -0
  352. package/lib/utils/range.d.ts.map +1 -0
  353. package/lib/utils/range.js +18 -0
  354. package/lib/utils/useContext.d.ts +13 -0
  355. package/lib/utils/useContext.d.ts.map +1 -0
  356. package/lib/utils/useContext.js +18 -0
  357. package/lib/utils/usePlayback.d.ts +8 -0
  358. package/lib/utils/usePlayback.d.ts.map +1 -0
  359. package/lib/utils/usePlayback.js +20 -0
  360. package/lib/utils/useScene.d.ts +17 -0
  361. package/lib/utils/useScene.d.ts.map +1 -0
  362. package/lib/utils/useScene.js +33 -0
  363. package/lib/utils/useThread.d.ts +8 -0
  364. package/lib/utils/useThread.d.ts.map +1 -0
  365. package/lib/utils/useThread.js +24 -0
  366. package/lib/utils/useTime.d.ts +19 -0
  367. package/lib/utils/useTime.d.ts.map +1 -0
  368. package/lib/utils/useTime.js +22 -0
  369. package/package.json +36 -0
  370. package/project.d.ts +24 -0
  371. package/shaders/common.glsl +15 -0
  372. package/shaders/fragment.glsl +8 -0
  373. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuZXJhdG9yU2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NlbmVzL0dlbmVyYXRvclNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTNELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFRbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQU10Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFnQixjQUFjO0lBWWxDLElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFRRCxJQUFXLFVB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
@@ -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=