@caperjs/core 0.1.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 (600) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +62 -0
  3. package/cli/add.mjs +197 -0
  4. package/cli/audio/cc.mjs +128 -0
  5. package/cli/audio/index.mjs +42 -0
  6. package/cli/audio/utils.mjs +56 -0
  7. package/cli/create-caper.mjs +8 -0
  8. package/cli/create.mjs +351 -0
  9. package/cli/install-peerdeps.mjs +57 -0
  10. package/cli/update.mjs +9 -0
  11. package/cli/utils.mjs +81 -0
  12. package/cli/vite.mjs +55 -0
  13. package/cli/voiceover/generateVoiceoverCSV.mjs +158 -0
  14. package/cli/voiceover/index.mjs +1 -0
  15. package/cli.mjs +157 -0
  16. package/client.d.ts +7 -0
  17. package/config/assetpack.mjs +212 -0
  18. package/config/tsconfig.base.json +28 -0
  19. package/config/vite.mjs +2464 -0
  20. package/extras/css/accessibility.css +9 -0
  21. package/extras/css/fullscreen.css +28 -0
  22. package/extras/css/loader.css +67 -0
  23. package/extras/llms.txt +1602 -0
  24. package/lib/CaptionsPlugin-Dc8fIrjy.js +277 -0
  25. package/lib/CaptionsPlugin-Dc8fIrjy.js.map +1 -0
  26. package/lib/DataAdapter-BY2114sp.js +84 -0
  27. package/lib/DataAdapter-BY2114sp.js.map +1 -0
  28. package/lib/DebugRenderer-BJMLILqI.js +1385 -0
  29. package/lib/DebugRenderer-BJMLILqI.js.map +1 -0
  30. package/lib/DevToolsPlugin-wQ5rOkn0.js +31 -0
  31. package/lib/DevToolsPlugin-wQ5rOkn0.js.map +1 -0
  32. package/lib/GSAPPlugin-DHhSZKv8.js +350 -0
  33. package/lib/GSAPPlugin-DHhSZKv8.js.map +1 -0
  34. package/lib/LayoutPlugin-B-DF9SYM.js +1271 -0
  35. package/lib/LayoutPlugin-B-DF9SYM.js.map +1 -0
  36. package/lib/SpinePlugin-Dz_3dljz.js +6077 -0
  37. package/lib/SpinePlugin-Dz_3dljz.js.map +1 -0
  38. package/lib/StatsPlugin-Cg82JMBD.js +70 -0
  39. package/lib/StatsPlugin-Cg82JMBD.js.map +1 -0
  40. package/lib/VoiceOverPlugin-BR3ImT8C.js +114 -0
  41. package/lib/VoiceOverPlugin-BR3ImT8C.js.map +1 -0
  42. package/lib/caper.mjs +1233 -0
  43. package/lib/caper.mjs.map +1 -0
  44. package/lib/core/Application.d.ts +268 -0
  45. package/lib/core/Application.d.ts.map +1 -0
  46. package/lib/core/config.d.ts +39 -0
  47. package/lib/core/config.d.ts.map +1 -0
  48. package/lib/core/create.d.ts +41 -0
  49. package/lib/core/create.d.ts.map +1 -0
  50. package/lib/core/globals.d.ts +51 -0
  51. package/lib/core/globals.d.ts.map +1 -0
  52. package/lib/core/index.d.ts +7 -0
  53. package/lib/core/index.d.ts.map +1 -0
  54. package/lib/core/interfaces/IApplication.d.ts +566 -0
  55. package/lib/core/interfaces/IApplication.d.ts.map +1 -0
  56. package/lib/core/interfaces/IApplicationOptions.d.ts +65 -0
  57. package/lib/core/interfaces/IApplicationOptions.d.ts.map +1 -0
  58. package/lib/core/interfaces/ICoreFunctions.d.ts +49 -0
  59. package/lib/core/interfaces/ICoreFunctions.d.ts.map +1 -0
  60. package/lib/core/interfaces/ICoreSignals.d.ts +57 -0
  61. package/lib/core/interfaces/ICoreSignals.d.ts.map +1 -0
  62. package/lib/core/interfaces/IStorageCapability.d.ts +20 -0
  63. package/lib/core/interfaces/IStorageCapability.d.ts.map +1 -0
  64. package/lib/core/interfaces/IStorageCapability.test.d.ts +2 -0
  65. package/lib/core/interfaces/IStorageCapability.test.d.ts.map +1 -0
  66. package/lib/core/interfaces/index.d.ts +7 -0
  67. package/lib/core/interfaces/index.d.ts.map +1 -0
  68. package/lib/core/registries.d.ts +8 -0
  69. package/lib/core/registries.d.ts.map +1 -0
  70. package/lib/core/types.d.ts +12 -0
  71. package/lib/core/types.d.ts.map +1 -0
  72. package/lib/display/AnimatedSprite.d.ts +40 -0
  73. package/lib/display/AnimatedSprite.d.ts.map +1 -0
  74. package/lib/display/Camera.d.ts +102 -0
  75. package/lib/display/Camera.d.ts.map +1 -0
  76. package/lib/display/Container.d.ts +115 -0
  77. package/lib/display/Container.d.ts.map +1 -0
  78. package/lib/display/Entity.d.ts +46 -0
  79. package/lib/display/Entity.d.ts.map +1 -0
  80. package/lib/display/ParticleContainer.d.ts +58 -0
  81. package/lib/display/ParticleContainer.d.ts.map +1 -0
  82. package/lib/display/Scene.d.ts +250 -0
  83. package/lib/display/Scene.d.ts.map +1 -0
  84. package/lib/display/SceneTransition.d.ts +41 -0
  85. package/lib/display/SceneTransition.d.ts.map +1 -0
  86. package/lib/display/SpineAnimation.d.ts +76 -0
  87. package/lib/display/SpineAnimation.d.ts.map +1 -0
  88. package/lib/display/Svg.d.ts +5 -0
  89. package/lib/display/Svg.d.ts.map +1 -0
  90. package/lib/display/index.d.ts +10 -0
  91. package/lib/display/index.d.ts.map +1 -0
  92. package/lib/env.d.ts +6 -0
  93. package/lib/hello.d.ts +2 -0
  94. package/lib/hello.d.ts.map +1 -0
  95. package/lib/index.d.ts +15 -0
  96. package/lib/index.d.ts.map +1 -0
  97. package/lib/mixins/animated.d.ts +53 -0
  98. package/lib/mixins/animated.d.ts.map +1 -0
  99. package/lib/mixins/factory/Factory.d.ts +8 -0
  100. package/lib/mixins/factory/Factory.d.ts.map +1 -0
  101. package/lib/mixins/factory/const.d.ts +67 -0
  102. package/lib/mixins/factory/const.d.ts.map +1 -0
  103. package/lib/mixins/factory/index.d.ts +8 -0
  104. package/lib/mixins/factory/index.d.ts.map +1 -0
  105. package/lib/mixins/factory/methods.d.ts +3 -0
  106. package/lib/mixins/factory/methods.d.ts.map +1 -0
  107. package/lib/mixins/factory/props.d.ts +160 -0
  108. package/lib/mixins/factory/props.d.ts.map +1 -0
  109. package/lib/mixins/factory/registry.d.ts +27 -0
  110. package/lib/mixins/factory/registry.d.ts.map +1 -0
  111. package/lib/mixins/factory/registry.test.d.ts +2 -0
  112. package/lib/mixins/factory/registry.test.d.ts.map +1 -0
  113. package/lib/mixins/factory/schema.d.ts +71 -0
  114. package/lib/mixins/factory/schema.d.ts.map +1 -0
  115. package/lib/mixins/factory/ui-registry.d.ts +20 -0
  116. package/lib/mixins/factory/ui-registry.d.ts.map +1 -0
  117. package/lib/mixins/factory/utils.d.ts +11 -0
  118. package/lib/mixins/factory/utils.d.ts.map +1 -0
  119. package/lib/mixins/focus.d.ts +15 -0
  120. package/lib/mixins/focus.d.ts.map +1 -0
  121. package/lib/mixins/index.d.ts +6 -0
  122. package/lib/mixins/index.d.ts.map +1 -0
  123. package/lib/mixins/interaction.d.ts +20 -0
  124. package/lib/mixins/interaction.d.ts.map +1 -0
  125. package/lib/mixins/signals.d.ts +15 -0
  126. package/lib/mixins/signals.d.ts.map +1 -0
  127. package/lib/plugins/AssetsPlugin.d.ts +79 -0
  128. package/lib/plugins/AssetsPlugin.d.ts.map +1 -0
  129. package/lib/plugins/DataAdapter.d.ts +95 -0
  130. package/lib/plugins/DataAdapter.d.ts.map +1 -0
  131. package/lib/plugins/DevToolsPlugin.d.ts +97 -0
  132. package/lib/plugins/DevToolsPlugin.d.ts.map +1 -0
  133. package/lib/plugins/FullScreenPlugin.d.ts +240 -0
  134. package/lib/plugins/FullScreenPlugin.d.ts.map +1 -0
  135. package/lib/plugins/GSAPPlugin.d.ts +634 -0
  136. package/lib/plugins/GSAPPlugin.d.ts.map +1 -0
  137. package/lib/plugins/KeyboardPlugin.d.ts +53 -0
  138. package/lib/plugins/KeyboardPlugin.d.ts.map +1 -0
  139. package/lib/plugins/LayoutPlugin.d.ts +100 -0
  140. package/lib/plugins/LayoutPlugin.d.ts.map +1 -0
  141. package/lib/plugins/LookupPlugin.d.ts +223 -0
  142. package/lib/plugins/LookupPlugin.d.ts.map +1 -0
  143. package/lib/plugins/Plugin.d.ts +132 -0
  144. package/lib/plugins/Plugin.d.ts.map +1 -0
  145. package/lib/plugins/Plugin.test.d.ts +2 -0
  146. package/lib/plugins/Plugin.test.d.ts.map +1 -0
  147. package/lib/plugins/PopupManagerPlugin.d.ts +108 -0
  148. package/lib/plugins/PopupManagerPlugin.d.ts.map +1 -0
  149. package/lib/plugins/ResizerPlugin.d.ts +62 -0
  150. package/lib/plugins/ResizerPlugin.d.ts.map +1 -0
  151. package/lib/plugins/SceneManagerPlugin.d.ts +122 -0
  152. package/lib/plugins/SceneManagerPlugin.d.ts.map +1 -0
  153. package/lib/plugins/StatsPlugin.d.ts +8 -0
  154. package/lib/plugins/StatsPlugin.d.ts.map +1 -0
  155. package/lib/plugins/TimerPlugin.d.ts +401 -0
  156. package/lib/plugins/TimerPlugin.d.ts.map +1 -0
  157. package/lib/plugins/WebEventsPlugin.d.ts +60 -0
  158. package/lib/plugins/WebEventsPlugin.d.ts.map +1 -0
  159. package/lib/plugins/actions/ActionsPlugin.d.ts +39 -0
  160. package/lib/plugins/actions/ActionsPlugin.d.ts.map +1 -0
  161. package/lib/plugins/actions/constants.d.ts +52 -0
  162. package/lib/plugins/actions/constants.d.ts.map +1 -0
  163. package/lib/plugins/actions/index.d.ts +5 -0
  164. package/lib/plugins/actions/index.d.ts.map +1 -0
  165. package/lib/plugins/actions/methods.d.ts +11 -0
  166. package/lib/plugins/actions/methods.d.ts.map +1 -0
  167. package/lib/plugins/actions/types.d.ts +25 -0
  168. package/lib/plugins/actions/types.d.ts.map +1 -0
  169. package/lib/plugins/audio/AudioChannel.d.ts +46 -0
  170. package/lib/plugins/audio/AudioChannel.d.ts.map +1 -0
  171. package/lib/plugins/audio/AudioChannel.test.d.ts +2 -0
  172. package/lib/plugins/audio/AudioChannel.test.d.ts.map +1 -0
  173. package/lib/plugins/audio/AudioInstance.d.ts +79 -0
  174. package/lib/plugins/audio/AudioInstance.d.ts.map +1 -0
  175. package/lib/plugins/audio/AudioManagerPlugin.d.ts +323 -0
  176. package/lib/plugins/audio/AudioManagerPlugin.d.ts.map +1 -0
  177. package/lib/plugins/audio/VoiceOverPlugin.d.ts +69 -0
  178. package/lib/plugins/audio/VoiceOverPlugin.d.ts.map +1 -0
  179. package/lib/plugins/audio/index.d.ts +4 -0
  180. package/lib/plugins/audio/index.d.ts.map +1 -0
  181. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts +109 -0
  182. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts.map +1 -0
  183. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts +2 -0
  184. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts.map +1 -0
  185. package/lib/plugins/breakpoints/evaluate.d.ts +53 -0
  186. package/lib/plugins/breakpoints/evaluate.d.ts.map +1 -0
  187. package/lib/plugins/breakpoints/evaluate.test.d.ts +2 -0
  188. package/lib/plugins/breakpoints/evaluate.test.d.ts.map +1 -0
  189. package/lib/plugins/breakpoints/index.d.ts +4 -0
  190. package/lib/plugins/breakpoints/index.d.ts.map +1 -0
  191. package/lib/plugins/breakpoints/methods.d.ts +23 -0
  192. package/lib/plugins/breakpoints/methods.d.ts.map +1 -0
  193. package/lib/plugins/breakpoints/types.d.ts +70 -0
  194. package/lib/plugins/breakpoints/types.d.ts.map +1 -0
  195. package/lib/plugins/captions/CaptionsPlugin.d.ts +150 -0
  196. package/lib/plugins/captions/CaptionsPlugin.d.ts.map +1 -0
  197. package/lib/plugins/captions/CaptionsRenderer.d.ts +37 -0
  198. package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -0
  199. package/lib/plugins/captions/index.d.ts +3 -0
  200. package/lib/plugins/captions/index.d.ts.map +1 -0
  201. package/lib/plugins/defaults.d.ts +4 -0
  202. package/lib/plugins/defaults.d.ts.map +1 -0
  203. package/lib/plugins/focus/FocusManagerPlugin.d.ts +148 -0
  204. package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -0
  205. package/lib/plugins/focus/FocusOutliner.d.ts +32 -0
  206. package/lib/plugins/focus/FocusOutliner.d.ts.map +1 -0
  207. package/lib/plugins/focus/index.d.ts +3 -0
  208. package/lib/plugins/focus/index.d.ts.map +1 -0
  209. package/lib/plugins/i18nPlugin.d.ts +128 -0
  210. package/lib/plugins/i18nPlugin.d.ts.map +1 -0
  211. package/lib/plugins/index.d.ts +18 -0
  212. package/lib/plugins/index.d.ts.map +1 -0
  213. package/lib/plugins/input/AbstractControls.d.ts +8 -0
  214. package/lib/plugins/input/AbstractControls.d.ts.map +1 -0
  215. package/lib/plugins/input/Controls.d.ts +16 -0
  216. package/lib/plugins/input/Controls.d.ts.map +1 -0
  217. package/lib/plugins/input/InputPlugin.d.ts +52 -0
  218. package/lib/plugins/input/InputPlugin.d.ts.map +1 -0
  219. package/lib/plugins/input/constants.d.ts +8 -0
  220. package/lib/plugins/input/constants.d.ts.map +1 -0
  221. package/lib/plugins/input/index.d.ts +10 -0
  222. package/lib/plugins/input/index.d.ts.map +1 -0
  223. package/lib/plugins/input/interfaces.d.ts +30 -0
  224. package/lib/plugins/input/interfaces.d.ts.map +1 -0
  225. package/lib/plugins/input/keyboard/KeyboardContols.d.ts +28 -0
  226. package/lib/plugins/input/keyboard/KeyboardContols.d.ts.map +1 -0
  227. package/lib/plugins/input/keyboard/index.d.ts +3 -0
  228. package/lib/plugins/input/keyboard/index.d.ts.map +1 -0
  229. package/lib/plugins/input/keyboard/interfaces.d.ts +18 -0
  230. package/lib/plugins/input/keyboard/interfaces.d.ts.map +1 -0
  231. package/lib/plugins/input/methods.d.ts +4 -0
  232. package/lib/plugins/input/methods.d.ts.map +1 -0
  233. package/lib/plugins/input/touch/TouchControls.d.ts +35 -0
  234. package/lib/plugins/input/touch/TouchControls.d.ts.map +1 -0
  235. package/lib/plugins/input/touch/constants.d.ts +14 -0
  236. package/lib/plugins/input/touch/constants.d.ts.map +1 -0
  237. package/lib/plugins/input/touch/index.d.ts +4 -0
  238. package/lib/plugins/input/touch/index.d.ts.map +1 -0
  239. package/lib/plugins/input/touch/interfaces.d.ts +15 -0
  240. package/lib/plugins/input/touch/interfaces.d.ts.map +1 -0
  241. package/lib/plugins/input/types.d.ts +32 -0
  242. package/lib/plugins/input/types.d.ts.map +1 -0
  243. package/lib/plugins/input/utils.d.ts +23 -0
  244. package/lib/plugins/input/utils.d.ts.map +1 -0
  245. package/lib/plugins/spine/SpinePlugin.d.ts +6 -0
  246. package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -0
  247. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts +31 -0
  248. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts.map +1 -0
  249. package/lib/plugins/spine/pixi-spine/Spine.d.ts +211 -0
  250. package/lib/plugins/spine/pixi-spine/Spine.d.ts.map +1 -0
  251. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts +81 -0
  252. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts.map +1 -0
  253. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts +21 -0
  254. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts.map +1 -0
  255. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts +16 -0
  256. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts.map +1 -0
  257. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts +10 -0
  258. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts.map +1 -0
  259. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts +6 -0
  260. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts.map +1 -0
  261. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts +5 -0
  262. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts.map +1 -0
  263. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts +22 -0
  264. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts.map +1 -0
  265. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts +5 -0
  266. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts.map +1 -0
  267. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts +51 -0
  268. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts.map +1 -0
  269. package/lib/plugins/spine/pixi-spine/index.d.ts +9 -0
  270. package/lib/plugins/spine/pixi-spine/index.d.ts.map +1 -0
  271. package/lib/plugins/spine/pixi-spine/require-shim.d.ts +34 -0
  272. package/lib/plugins/spine/pixi-spine/require-shim.d.ts.map +1 -0
  273. package/lib/registries-CYCaYKZI.js +6885 -0
  274. package/lib/registries-CYCaYKZI.js.map +1 -0
  275. package/lib/signals/Signal.d.ts +16 -0
  276. package/lib/signals/Signal.d.ts.map +1 -0
  277. package/lib/signals/Signal.test.d.ts +2 -0
  278. package/lib/signals/Signal.test.d.ts.map +1 -0
  279. package/lib/signals/index.d.ts +3 -0
  280. package/lib/signals/index.d.ts.map +1 -0
  281. package/lib/store/Store.d.ts +56 -0
  282. package/lib/store/Store.d.ts.map +1 -0
  283. package/lib/store/Store.test.d.ts +2 -0
  284. package/lib/store/Store.test.d.ts.map +1 -0
  285. package/lib/store/index.d.ts +2 -0
  286. package/lib/store/index.d.ts.map +1 -0
  287. package/lib/types/framework.d.ts +46 -0
  288. package/lib/types/gsap.d.ts +23 -0
  289. package/lib/ui/Button.d.ts +162 -0
  290. package/lib/ui/Button.d.ts.map +1 -0
  291. package/lib/ui/FlexContainer.d.ts +109 -0
  292. package/lib/ui/FlexContainer.d.ts.map +1 -0
  293. package/lib/ui/Input.d.ts +384 -0
  294. package/lib/ui/Input.d.ts.map +1 -0
  295. package/lib/ui/Joystick.d.ts +61 -0
  296. package/lib/ui/Joystick.d.ts.map +1 -0
  297. package/lib/ui/Popup.d.ts +109 -0
  298. package/lib/ui/Popup.d.ts.map +1 -0
  299. package/lib/ui/Toast.d.ts +131 -0
  300. package/lib/ui/Toast.d.ts.map +1 -0
  301. package/lib/ui/Toaster.d.ts +188 -0
  302. package/lib/ui/Toaster.d.ts.map +1 -0
  303. package/lib/ui/UICanvas.d.ts +155 -0
  304. package/lib/ui/UICanvas.d.ts.map +1 -0
  305. package/lib/ui/index.d.ts +9 -0
  306. package/lib/ui/index.d.ts.map +1 -0
  307. package/lib/utils/array.d.ts +11 -0
  308. package/lib/utils/array.d.ts.map +1 -0
  309. package/lib/utils/bind.d.ts +21 -0
  310. package/lib/utils/bind.d.ts.map +1 -0
  311. package/lib/utils/canvas.d.ts +2 -0
  312. package/lib/utils/canvas.d.ts.map +1 -0
  313. package/lib/utils/color.d.ts +66 -0
  314. package/lib/utils/color.d.ts.map +1 -0
  315. package/lib/utils/console/Logger.d.ts +15 -0
  316. package/lib/utils/console/Logger.d.ts.map +1 -0
  317. package/lib/utils/console/index.d.ts +2 -0
  318. package/lib/utils/console/index.d.ts.map +1 -0
  319. package/lib/utils/debug.d.ts +34 -0
  320. package/lib/utils/debug.d.ts.map +1 -0
  321. package/lib/utils/define.d.ts +100 -0
  322. package/lib/utils/define.d.ts.map +1 -0
  323. package/lib/utils/env.d.ts +4 -0
  324. package/lib/utils/env.d.ts.map +1 -0
  325. package/lib/utils/events.d.ts +12 -0
  326. package/lib/utils/events.d.ts.map +1 -0
  327. package/lib/utils/framework.d.ts +12 -0
  328. package/lib/utils/framework.d.ts.map +1 -0
  329. package/lib/utils/index.d.ts +28 -0
  330. package/lib/utils/index.d.ts.map +1 -0
  331. package/lib/utils/map.d.ts +31 -0
  332. package/lib/utils/map.d.ts.map +1 -0
  333. package/lib/utils/math.d.ts +15 -0
  334. package/lib/utils/math.d.ts.map +1 -0
  335. package/lib/utils/misc.d.ts +13 -0
  336. package/lib/utils/misc.d.ts.map +1 -0
  337. package/lib/utils/number.d.ts +2 -0
  338. package/lib/utils/number.d.ts.map +1 -0
  339. package/lib/utils/object.d.ts +21 -0
  340. package/lib/utils/object.d.ts.map +1 -0
  341. package/lib/utils/padding.d.ts +4 -0
  342. package/lib/utils/padding.d.ts.map +1 -0
  343. package/lib/utils/pixi.d.ts +42 -0
  344. package/lib/utils/pixi.d.ts.map +1 -0
  345. package/lib/utils/platform.d.ts +20 -0
  346. package/lib/utils/platform.d.ts.map +1 -0
  347. package/lib/utils/point.d.ts +66 -0
  348. package/lib/utils/point.d.ts.map +1 -0
  349. package/lib/utils/promise/Queue.d.ts +60 -0
  350. package/lib/utils/promise/Queue.d.ts.map +1 -0
  351. package/lib/utils/promise/functions.d.ts +14 -0
  352. package/lib/utils/promise/functions.d.ts.map +1 -0
  353. package/lib/utils/promise/index.d.ts +3 -0
  354. package/lib/utils/promise/index.d.ts.map +1 -0
  355. package/lib/utils/random.d.ts +42 -0
  356. package/lib/utils/random.d.ts.map +1 -0
  357. package/lib/utils/rect.d.ts +26 -0
  358. package/lib/utils/rect.d.ts.map +1 -0
  359. package/lib/utils/set.d.ts +15 -0
  360. package/lib/utils/set.d.ts.map +1 -0
  361. package/lib/utils/string.d.ts +3 -0
  362. package/lib/utils/string.d.ts.map +1 -0
  363. package/lib/utils/text.d.ts +3 -0
  364. package/lib/utils/text.d.ts.map +1 -0
  365. package/lib/utils/typefilters.d.ts +4 -0
  366. package/lib/utils/typefilters.d.ts.map +1 -0
  367. package/lib/utils/types.d.ts +209 -0
  368. package/lib/utils/types.d.ts.map +1 -0
  369. package/lib/utils/vite.d.ts +25 -0
  370. package/lib/utils/vite.d.ts.map +1 -0
  371. package/lib/utils/web.d.ts +3 -0
  372. package/lib/utils/web.d.ts.map +1 -0
  373. package/lib/version.d.ts +3 -0
  374. package/lib/version.d.ts.map +1 -0
  375. package/lib/webgl-check.d.ts +2 -0
  376. package/lib/webgl-check.d.ts.map +1 -0
  377. package/package.json +138 -0
  378. package/src/core/Application.ts +1091 -0
  379. package/src/core/config.ts +168 -0
  380. package/src/core/create.ts +186 -0
  381. package/src/core/globals.ts +299 -0
  382. package/src/core/index.ts +6 -0
  383. package/src/core/interfaces/IApplication.ts +628 -0
  384. package/src/core/interfaces/IApplicationOptions.ts +81 -0
  385. package/src/core/interfaces/ICoreFunctions.ts +86 -0
  386. package/src/core/interfaces/ICoreSignals.ts +77 -0
  387. package/src/core/interfaces/IStorageCapability.test.ts +27 -0
  388. package/src/core/interfaces/IStorageCapability.ts +26 -0
  389. package/src/core/interfaces/index.ts +6 -0
  390. package/src/core/registries.ts +7 -0
  391. package/src/core/types.ts +13 -0
  392. package/src/display/AnimatedSprite.ts +227 -0
  393. package/src/display/Camera.ts +371 -0
  394. package/src/display/Container.ts +240 -0
  395. package/src/display/Entity.ts +50 -0
  396. package/src/display/ParticleContainer.ts +107 -0
  397. package/src/display/Scene.ts +305 -0
  398. package/src/display/SceneTransition.ts +108 -0
  399. package/src/display/SpineAnimation.ts +170 -0
  400. package/src/display/Svg.ts +9 -0
  401. package/src/display/index.ts +11 -0
  402. package/src/env.d.ts +6 -0
  403. package/src/hello.ts +20 -0
  404. package/src/index.ts +17 -0
  405. package/src/mixins/animated.ts +340 -0
  406. package/src/mixins/factory/Factory.ts +24 -0
  407. package/src/mixins/factory/const.ts +363 -0
  408. package/src/mixins/factory/index.ts +7 -0
  409. package/src/mixins/factory/methods.ts +21 -0
  410. package/src/mixins/factory/props.ts +207 -0
  411. package/src/mixins/factory/registry.test.ts +83 -0
  412. package/src/mixins/factory/registry.ts +61 -0
  413. package/src/mixins/factory/schema.ts +153 -0
  414. package/src/mixins/factory/ui-registry.ts +54 -0
  415. package/src/mixins/factory/utils.ts +130 -0
  416. package/src/mixins/focus.ts +124 -0
  417. package/src/mixins/index.ts +5 -0
  418. package/src/mixins/interaction.ts +74 -0
  419. package/src/mixins/signals.ts +49 -0
  420. package/src/plugins/AssetsPlugin.ts +407 -0
  421. package/src/plugins/DataAdapter.ts +259 -0
  422. package/src/plugins/DevToolsPlugin.ts +103 -0
  423. package/src/plugins/FullScreenPlugin.ts +359 -0
  424. package/src/plugins/GSAPPlugin.ts +811 -0
  425. package/src/plugins/KeyboardPlugin.ts +160 -0
  426. package/src/plugins/LayoutPlugin.ts +127 -0
  427. package/src/plugins/LookupPlugin.ts +308 -0
  428. package/src/plugins/Plugin.test.ts +73 -0
  429. package/src/plugins/Plugin.ts +200 -0
  430. package/src/plugins/PopupManagerPlugin.ts +263 -0
  431. package/src/plugins/ResizerPlugin.ts +220 -0
  432. package/src/plugins/SceneManagerPlugin.ts +669 -0
  433. package/src/plugins/StatsPlugin.ts +24 -0
  434. package/src/plugins/TimerPlugin.ts +841 -0
  435. package/src/plugins/WebEventsPlugin.ts +132 -0
  436. package/src/plugins/actions/ActionsPlugin.ts +113 -0
  437. package/src/plugins/actions/constants.ts +45 -0
  438. package/src/plugins/actions/index.ts +4 -0
  439. package/src/plugins/actions/methods.ts +28 -0
  440. package/src/plugins/actions/types.ts +47 -0
  441. package/src/plugins/audio/AudioChannel.test.ts +101 -0
  442. package/src/plugins/audio/AudioChannel.ts +164 -0
  443. package/src/plugins/audio/AudioInstance.ts +228 -0
  444. package/src/plugins/audio/AudioManagerPlugin.ts +903 -0
  445. package/src/plugins/audio/VoiceOverPlugin.ts +354 -0
  446. package/src/plugins/audio/index.ts +3 -0
  447. package/src/plugins/breakpoints/BreakpointPlugin.test.ts +228 -0
  448. package/src/plugins/breakpoints/BreakpointPlugin.ts +293 -0
  449. package/src/plugins/breakpoints/evaluate.test.ts +239 -0
  450. package/src/plugins/breakpoints/evaluate.ts +201 -0
  451. package/src/plugins/breakpoints/index.ts +3 -0
  452. package/src/plugins/breakpoints/methods.ts +22 -0
  453. package/src/plugins/breakpoints/types.ts +86 -0
  454. package/src/plugins/captions/CaptionsPlugin.ts +468 -0
  455. package/src/plugins/captions/CaptionsRenderer.ts +184 -0
  456. package/src/plugins/captions/font/Sans.fnt +116 -0
  457. package/src/plugins/captions/font/Sans.png +0 -0
  458. package/src/plugins/captions/index.ts +2 -0
  459. package/src/plugins/defaults.ts +95 -0
  460. package/src/plugins/focus/FocusManagerPlugin.ts +773 -0
  461. package/src/plugins/focus/FocusOutliner.ts +111 -0
  462. package/src/plugins/focus/index.ts +2 -0
  463. package/src/plugins/i18nPlugin.ts +284 -0
  464. package/src/plugins/index.ts +17 -0
  465. package/src/plugins/input/AbstractControls.ts +15 -0
  466. package/src/plugins/input/Controls.ts +55 -0
  467. package/src/plugins/input/InputPlugin.ts +168 -0
  468. package/src/plugins/input/constants.ts +12 -0
  469. package/src/plugins/input/index.ts +9 -0
  470. package/src/plugins/input/interfaces.ts +37 -0
  471. package/src/plugins/input/keyboard/KeyboardContols.ts +182 -0
  472. package/src/plugins/input/keyboard/index.ts +2 -0
  473. package/src/plugins/input/keyboard/interfaces.ts +21 -0
  474. package/src/plugins/input/methods.ts +9 -0
  475. package/src/plugins/input/touch/TouchControls.ts +237 -0
  476. package/src/plugins/input/touch/constants.ts +34 -0
  477. package/src/plugins/input/touch/index.ts +3 -0
  478. package/src/plugins/input/touch/interfaces.ts +15 -0
  479. package/src/plugins/input/types.ts +41 -0
  480. package/src/plugins/input/utils.ts +10 -0
  481. package/src/plugins/spine/SpinePlugin.ts +14 -0
  482. package/src/plugins/spine/pixi-spine/BatchableSpineSlot.ts +138 -0
  483. package/src/plugins/spine/pixi-spine/Spine.ts +897 -0
  484. package/src/plugins/spine/pixi-spine/SpineDebugRenderer.ts +615 -0
  485. package/src/plugins/spine/pixi-spine/SpinePipe.ts +197 -0
  486. package/src/plugins/spine/pixi-spine/SpineTexture.ts +143 -0
  487. package/src/plugins/spine/pixi-spine/assets/atlasLoader.ts +156 -0
  488. package/src/plugins/spine/pixi-spine/assets/skeletonLoader.ts +80 -0
  489. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.ts +92 -0
  490. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatcher.ts +186 -0
  491. package/src/plugins/spine/pixi-spine/darktint/DarkTintShader.ts +74 -0
  492. package/src/plugins/spine/pixi-spine/darktint/darkTintBit.ts +77 -0
  493. package/src/plugins/spine/pixi-spine/index.ts +43 -0
  494. package/src/plugins/spine/pixi-spine/require-shim.ts +43 -0
  495. package/src/signals/Signal.test.ts +54 -0
  496. package/src/signals/Signal.ts +68 -0
  497. package/src/signals/index.ts +10 -0
  498. package/src/store/Store.test.ts +146 -0
  499. package/src/store/Store.ts +192 -0
  500. package/src/store/index.ts +1 -0
  501. package/src/types/framework.d.ts +47 -0
  502. package/src/types/gsap.d.ts +26 -0
  503. package/src/ui/Button.ts +454 -0
  504. package/src/ui/FlexContainer.ts +526 -0
  505. package/src/ui/Input.ts +1274 -0
  506. package/src/ui/Joystick.ts +288 -0
  507. package/src/ui/Popup.ts +242 -0
  508. package/src/ui/Toast.ts +399 -0
  509. package/src/ui/Toaster.ts +409 -0
  510. package/src/ui/UICanvas.ts +812 -0
  511. package/src/ui/index.ts +8 -0
  512. package/src/utils/array.ts +24 -0
  513. package/src/utils/bind.ts +79 -0
  514. package/src/utils/canvas.ts +26 -0
  515. package/src/utils/color.ts +126 -0
  516. package/src/utils/console/Logger.ts +86 -0
  517. package/src/utils/console/index.ts +1 -0
  518. package/src/utils/debug.ts +69 -0
  519. package/src/utils/define.ts +120 -0
  520. package/src/utils/env.ts +3 -0
  521. package/src/utils/events.ts +10 -0
  522. package/src/utils/framework.ts +45 -0
  523. package/src/utils/index.ts +27 -0
  524. package/src/utils/map.ts +59 -0
  525. package/src/utils/math.ts +19 -0
  526. package/src/utils/misc.ts +45 -0
  527. package/src/utils/number.ts +3 -0
  528. package/src/utils/object.ts +43 -0
  529. package/src/utils/padding.ts +43 -0
  530. package/src/utils/pixi.ts +116 -0
  531. package/src/utils/platform.ts +33 -0
  532. package/src/utils/point.ts +123 -0
  533. package/src/utils/promise/Queue.ts +125 -0
  534. package/src/utils/promise/functions.ts +16 -0
  535. package/src/utils/promise/index.ts +2 -0
  536. package/src/utils/random.ts +69 -0
  537. package/src/utils/rect.ts +50 -0
  538. package/src/utils/set.ts +32 -0
  539. package/src/utils/string.ts +9 -0
  540. package/src/utils/text.ts +30 -0
  541. package/src/utils/typefilters.ts +29 -0
  542. package/src/utils/types.ts +426 -0
  543. package/src/utils/vite.ts +41 -0
  544. package/src/utils/web.ts +7 -0
  545. package/src/version.ts +3 -0
  546. package/src/webgl-check.ts +12 -0
  547. package/templates/app/default/.eslintrc.json +21 -0
  548. package/templates/app/default/.meta.json +4 -0
  549. package/templates/app/default/.nvmrc +1 -0
  550. package/templates/app/default/.prettierrc.json +7 -0
  551. package/templates/app/default/README.md +8 -0
  552. package/templates/app/default/assets/audio{m}/music/Cheerful Annoyance.ogg +0 -0
  553. package/templates/app/default/assets/audio{m}/music/Drumming Sticks.ogg +0 -0
  554. package/templates/app/default/assets/audio{m}/music/Game Over.ogg +0 -0
  555. package/templates/app/default/assets/audio{m}/music/Mishief Stroll.ogg +0 -0
  556. package/templates/app/default/assets/audio{m}/music/Night at the Beach.ogg +0 -0
  557. package/templates/app/default/assets/audio{m}/sfx/click.ogg +0 -0
  558. package/templates/app/default/assets/audio{m}/sfx/hover.ogg +0 -0
  559. package/templates/app/default/assets/required{m}/caper.png +0 -0
  560. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Bold{family=Space Grotesk}{wf}.ttf +0 -0
  561. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Medium{family=Space Grotesk}{wf}.ttf +0 -0
  562. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Regular{family=Space Grotesk}{wf}.ttf +0 -0
  563. package/templates/app/default/assets/required{m}/fonts{fix}/Syncopate-Bold{family=Syncopate}{wf}.ttf +0 -0
  564. package/templates/app/default/assets/required{m}/ui{tps}/btn/blue.png +0 -0
  565. package/templates/app/default/assets/required{m}/ui{tps}/btn/green.png +0 -0
  566. package/templates/app/default/assets/required{m}/ui{tps}/btn/grey.png +0 -0
  567. package/templates/app/default/assets/required{m}/ui{tps}/btn/orange.png +0 -0
  568. package/templates/app/default/assets/required{m}/ui{tps}/btn/purple.png +0 -0
  569. package/templates/app/default/assets/required{m}/ui{tps}/btn/red.png +0 -0
  570. package/templates/app/default/assets/required{m}/ui{tps}/btn/yellow.png +0 -0
  571. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/down.png +0 -0
  572. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/over.png +0 -0
  573. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/up.png +0 -0
  574. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/down.png +0 -0
  575. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/over.png +0 -0
  576. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/up.png +0 -0
  577. package/templates/app/default/assets/required{m}/ui{tps}/joystick/base.png +0 -0
  578. package/templates/app/default/assets/required{m}/ui{tps}/joystick/handle.png +0 -0
  579. package/templates/app/default/assets/required{m}/wordmark.svg +1 -0
  580. package/templates/app/default/assets/spine{m}/spineboy-pro.png +0 -0
  581. package/templates/app/default/assets/spine{m}/spineboy-pro.skel +0 -0
  582. package/templates/app/default/assets/spine{m}/spineboy-pro{fix}.atlas +94 -0
  583. package/templates/app/default/caper.config.ts +60 -0
  584. package/templates/app/default/index.html +23 -0
  585. package/templates/app/default/package.template.json +17 -0
  586. package/templates/app/default/public/favicon.ico +0 -0
  587. package/templates/app/default/src/__APPLICATION_NAME__.ts +3 -0
  588. package/templates/app/default/src/main.ts +9 -0
  589. package/templates/app/default/src/scenes/Base.ts +39 -0
  590. package/templates/app/default/src/scenes/Game.ts +34 -0
  591. package/templates/app/default/src/scenes/Splash.ts +70 -0
  592. package/templates/app/default/src/scenes/Start.ts +90 -0
  593. package/templates/app/default/src/utils/Constants.ts +3 -0
  594. package/templates/app/default/tsconfig.json +1 -0
  595. package/templates/plugin/package.template.json +33 -0
  596. package/templates/plugin/src/Plugin.template.ts +24 -0
  597. package/templates/plugin/src/index.template.ts +3 -0
  598. package/templates/plugin/tsconfig.template.json +43 -0
  599. package/templates/plugin/vite-env.template.d.ts +16 -0
  600. package/templates/plugin/vite.config.template.ts +19 -0
@@ -0,0 +1,371 @@
1
+ import { Container, Point } from 'pixi.js';
2
+ import { IApplication } from '../core';
3
+ import { Application } from '../core/Application';
4
+ import type { KeyboardEventDetail } from '../plugins';
5
+ import { Signal } from '../signals';
6
+ import type { ContainerLike, PointLike } from '../utils';
7
+ import { bindAllMethods, resolvePointLike } from '../utils';
8
+
9
+ type CameraConfig = {
10
+ container: Container;
11
+ minX: number;
12
+ maxX: number;
13
+ minY: number;
14
+ maxY: number;
15
+ viewportWidth: number;
16
+ viewportHeight: number;
17
+ worldWidth: number;
18
+ worldHeight: number;
19
+ target: ContainerLike | null;
20
+ targetPivot: Point;
21
+ lerp: number;
22
+ };
23
+
24
+ // require container to be set
25
+ type OptionalCameraConfig = Partial<CameraConfig>;
26
+ type RequiredCameraConfig = Required<Pick<CameraConfig, 'container'>>;
27
+ type CustomCameraConfig = OptionalCameraConfig & RequiredCameraConfig;
28
+
29
+ export interface ICamera {
30
+ onZoom: Signal<(camera?: ICamera) => void>;
31
+ onZoomComplete: Signal<(camera?: ICamera) => void>;
32
+ container: Container;
33
+ minX: number;
34
+ minY: number;
35
+ maxX: number;
36
+ maxY: number;
37
+ viewportWidth: number;
38
+ viewportHeight: number;
39
+ worldWidth: number;
40
+ worldHeight: number;
41
+ readonly targetPivot: Point;
42
+ readonly targetScale: Point;
43
+ readonly zooming: boolean;
44
+ readonly zoomLerp: number;
45
+ readonly lerp: number;
46
+ readonly target: ContainerLike | null;
47
+ readonly followOffset: Point;
48
+ app: IApplication;
49
+
50
+ follow(target: ContainerLike, offset: PointLike): void;
51
+
52
+ pan(deltaX: number, deltaY: number): void;
53
+
54
+ zoom(scale: number, lerp?: number): void;
55
+
56
+ update(): void;
57
+ }
58
+
59
+ export class Camera extends Container implements ICamera {
60
+ public onZoom = new Signal<(camera?: ICamera) => void>();
61
+ public onZoomComplete = new Signal<(camera?: ICamera) => void>();
62
+ public container: Container;
63
+ public minX: number = 0;
64
+ public minY: number = 0;
65
+ public maxX: number;
66
+ public maxY: number;
67
+ public viewportWidth: number;
68
+ public viewportHeight: number;
69
+ public worldWidth: number;
70
+ public worldHeight: number;
71
+
72
+ constructor(public config: CustomCameraConfig) {
73
+ super({ isRenderGroup: true });
74
+ bindAllMethods(this);
75
+ if (config) {
76
+ this.container = config.container;
77
+ this.addChild(this.container);
78
+ if (config.minX) {
79
+ this.minX = config.minX;
80
+ }
81
+ if (config.maxX) {
82
+ this.maxX = config.maxX;
83
+ }
84
+ if (config.minY) {
85
+ this.minY = config.minY;
86
+ }
87
+ this.viewportWidth = config.viewportWidth ?? this.app.size.width;
88
+ this.viewportHeight = config.viewportHeight ?? this.app.size.width;
89
+ this.worldWidth = config.worldWidth ?? this.viewportWidth;
90
+ this.worldHeight = config.worldHeight ?? this.viewportHeight;
91
+ this.maxX = config.maxX ?? this.worldWidth - this.viewportWidth;
92
+ this.maxY = config.maxY ?? this.worldHeight - this.viewportHeight;
93
+ }
94
+
95
+ this._targetPivot.set(this.viewportWidth * 0.5, this.viewportHeight * 0.5);
96
+ if (config.target) {
97
+ this.target = config.target;
98
+ }
99
+ this._lerp = 1;
100
+ this.update();
101
+ if (config.lerp) {
102
+ this.lerp = config.lerp;
103
+ }
104
+ return this;
105
+ }
106
+
107
+ protected _zooming: boolean = false;
108
+
109
+ get zooming(): boolean {
110
+ return this._zooming;
111
+ }
112
+
113
+ protected _zoomLerp: number = 0.1;
114
+
115
+ get zoomLerp(): number {
116
+ return this._zoomLerp;
117
+ }
118
+
119
+ protected _targetPivot: Point = new Point(0, 0);
120
+
121
+ get targetPivot(): Point {
122
+ return this._targetPivot;
123
+ }
124
+
125
+ protected _targetScale: Point = new Point(1, 1);
126
+
127
+ get targetScale(): Point {
128
+ return this._targetPivot;
129
+ }
130
+
131
+ private _lerp: number = 0;
132
+
133
+ get lerp(): number {
134
+ return this._lerp;
135
+ }
136
+
137
+ set lerp(value: number) {
138
+ // if the value is less than 0 or greater than 1, clamp it to the range [0, 1], and log an error
139
+ if (value < 0 || value > 1) {
140
+ throw new Error('Camera lerp value must be in the range [0, 1]');
141
+ }
142
+ this._lerp = Math.max(0, Math.min(value, 1));
143
+ }
144
+
145
+ protected _target: ContainerLike | null = null;
146
+
147
+ get target(): ContainerLike | null {
148
+ return this._target;
149
+ }
150
+
151
+ set target(value: ContainerLike | null) {
152
+ this._target = value;
153
+ if (this._target) {
154
+ this.focusOn(this._target);
155
+ }
156
+ }
157
+
158
+ protected _followOffset: Point = new Point(0, 0);
159
+ get followOffset(): Point {
160
+ return this._followOffset;
161
+ }
162
+
163
+ set followOffset(value: PointLike) {
164
+ this._followOffset = resolvePointLike(value, true);
165
+ }
166
+
167
+ get app(): IApplication {
168
+ return Application.getInstance();
169
+ }
170
+
171
+ follow(target: ContainerLike, offset?: PointLike) {
172
+ if (!offset) {
173
+ offset = { x: 0, y: 0 };
174
+ }
175
+ this.followOffset = offset;
176
+ this.target = target;
177
+ }
178
+
179
+ pan(deltaX: number, deltaY: number) {
180
+ let newPivotX = this.pivot.x + deltaX;
181
+ let newPivotY = this.pivot.y + deltaY;
182
+
183
+ // Clamp pivot to min and max values
184
+ newPivotX = Math.max(this.minX, Math.min(newPivotX, this.maxX));
185
+ newPivotY = Math.max(this.minY, Math.min(newPivotY, this.maxY));
186
+
187
+ this._targetPivot.set(newPivotX, newPivotY);
188
+ }
189
+
190
+ zoom(scale: number, lerp: number = 0.1) {
191
+ this._zoomLerp = lerp;
192
+ this._zooming = true;
193
+ this._targetScale.set(scale, scale);
194
+ }
195
+
196
+ update() {
197
+ this.updateZoom();
198
+ if (this._target) {
199
+ this.focusOn(this._target);
200
+ }
201
+ this.updatePosition(this._zooming);
202
+ if (
203
+ this._zooming &&
204
+ Math.abs(this.scale.x - this._targetScale.x) < 0.001 &&
205
+ Math.abs(this.scale.y - this._targetScale.y) < 0.001
206
+ ) {
207
+ this.onZoom.emit(this);
208
+ this._zooming = false;
209
+ this.scale.set(this._targetScale.x, this._targetScale.y);
210
+ this.onZoomComplete.emit(this);
211
+ } else if (this._zooming) {
212
+ this.onZoom.emit(this);
213
+ }
214
+ }
215
+
216
+ private focusOn(entity: ContainerLike) {
217
+ // Get the global position of the entity and convert it to the local position within the container.
218
+ const globalPosition = entity.getGlobalPosition();
219
+ const spritePosition = this.toLocal(globalPosition);
220
+
221
+ const posXModifier = this.position.x / this.scale.x - this.viewportWidth / 2;
222
+ const posYModifier = this.position.y / this.scale.y - this.viewportHeight / 2;
223
+
224
+ const offsetX = this.followOffset.x / this.scale.x;
225
+ const offsetY = this.followOffset.y / this.scale.y;
226
+
227
+ this._targetPivot.x = (spritePosition.x * this.scale.x + this.viewportWidth / 2) * (1 / this.scale.x) + offsetX;
228
+
229
+ const tMinX = this.viewportWidth / this.scale.x / 2 + posXModifier + this.minX - offsetX;
230
+ const tMaxX = this.worldWidth - this.viewportWidth / this.scale.x / 2 + posXModifier + this.maxX + offsetX;
231
+
232
+ if (this._targetPivot.x < tMinX) {
233
+ this._targetPivot.x = tMinX;
234
+ } else if (this._targetPivot.x > tMaxX) {
235
+ this._targetPivot.x = tMaxX;
236
+ }
237
+
238
+ this._targetPivot.y = (spritePosition.y * this.scale.y + this.viewportHeight / 2) * (1 / this.scale.y) + offsetY;
239
+
240
+ const tMinY = this.viewportHeight / this.scale.y / 2 + posYModifier + this.minY - offsetY;
241
+ const tMaxY = this.worldHeight - this.viewportHeight / this.scale.y / 2 + posYModifier + this.maxY - offsetY;
242
+
243
+ if (this._targetPivot.y < tMinY) {
244
+ this._targetPivot.y = tMinY;
245
+ } else if (this._targetPivot.y > tMaxY) {
246
+ this._targetPivot.y = tMaxY;
247
+ }
248
+ }
249
+
250
+ private updateZoom() {
251
+ const currentScaleX = this.scale.x;
252
+ const currentScaleY = this.scale.y;
253
+
254
+ const interpolatedScaleX = currentScaleX + this._zoomLerp * (this._targetScale.x - currentScaleX);
255
+ const interpolatedScaleY = currentScaleY + this._zoomLerp * (this._targetScale.y - currentScaleY);
256
+
257
+ this.scale.set(Math.max(0, interpolatedScaleX), Math.max(0, interpolatedScaleY));
258
+ }
259
+
260
+ private updatePosition(skipLerp: boolean = false) {
261
+ if (this.lerp > 0 && !skipLerp) {
262
+ // Current pivot positions
263
+ const currentPivotX = this.pivot.x;
264
+ const currentPivotY = this.pivot.y;
265
+
266
+ // Calculate interpolated pivot positions
267
+ const interpolatedPivotX = currentPivotX + this.lerp * (this._targetPivot.x - currentPivotX);
268
+ const interpolatedPivotY = currentPivotY + this.lerp * (this._targetPivot.y - currentPivotY);
269
+
270
+ // Set the pivot to the interpolated position to smooth out the camera movement
271
+ this.pivot.set(interpolatedPivotX, interpolatedPivotY);
272
+ } else {
273
+ this.pivot.set(this._targetPivot.x, this._targetPivot.y);
274
+ }
275
+
276
+ this.position.set(this.viewportWidth / 2, this.viewportHeight / 2);
277
+ }
278
+ }
279
+
280
+ export class CameraController {
281
+ private dragging: boolean = false;
282
+ private previousPointerPosition: Point | null = null;
283
+
284
+ constructor(
285
+ public camera: Camera,
286
+ public interactiveArea: Container,
287
+ ) {
288
+ bindAllMethods(this);
289
+ this.camera = camera;
290
+ this.interactiveArea = interactiveArea;
291
+ this.app.keyboard.onKeyDown().connect(this.handleKeyDown);
292
+ // Keyboard events
293
+
294
+ // Mouse and touch events
295
+ this.interactiveArea.on('pointerdown', this.onPointerDown.bind(this));
296
+ this.interactiveArea.on('pointermove', this.onPointerMove.bind(this));
297
+ this.app.stage.on('pointerup', this.onPointerUp.bind(this));
298
+ this.app.stage.on('pointerupoutside', this.onPointerUp.bind(this));
299
+
300
+ // Touch events equivalent
301
+ this.interactiveArea.on('touchstart', this.onPointerDown.bind(this));
302
+ this.interactiveArea.on('touchmove', this.onPointerMove.bind(this));
303
+ this.interactiveArea.on('touchend', this.onPointerUp.bind(this));
304
+ }
305
+
306
+ get app(): IApplication {
307
+ return Application.getInstance();
308
+ }
309
+
310
+ destroy() {
311
+ // Mouse and touch events
312
+ this.interactiveArea.removeAllListeners();
313
+ this.app.stage.off('pointerup', this.onPointerUp.bind(this));
314
+ this.app.stage.off('pointerupoutside', this.onPointerUp.bind(this));
315
+ }
316
+
317
+ private handleKeyDown(detail: KeyboardEventDetail) {
318
+ const panSpeed = 10; // Adjust pan speed as necessary
319
+ const zoomFactor = 1.1; // Adjust zoom factor as necessary
320
+
321
+ switch (detail.event.key) {
322
+ case 'ArrowUp':
323
+ this.camera.pan(0, -panSpeed);
324
+ break;
325
+ case 'ArrowDown':
326
+ this.camera.pan(0, panSpeed);
327
+ break;
328
+ case 'ArrowLeft':
329
+ this.camera.pan(-panSpeed, 0);
330
+ break;
331
+ case 'ArrowRight':
332
+ this.camera.pan(panSpeed, 0);
333
+ break;
334
+ case '+':
335
+ this.camera.zoom(zoomFactor);
336
+ break;
337
+ case '-':
338
+ this.camera.zoom(1 / zoomFactor);
339
+ break;
340
+ }
341
+ }
342
+
343
+ private onPointerDown(event: MouseEvent | TouchEvent) {
344
+ this.dragging = true;
345
+ this.previousPointerPosition = this.getEventPosition(event);
346
+ }
347
+
348
+ private onPointerMove(event: MouseEvent | TouchEvent) {
349
+ if (!this.dragging || !this.previousPointerPosition) return;
350
+
351
+ const currentPosition = this.getEventPosition(event);
352
+ const deltaX = currentPosition.x - this.previousPointerPosition.x;
353
+ const deltaY = currentPosition.y - this.previousPointerPosition.y;
354
+
355
+ this.camera.pan(deltaX, deltaY);
356
+ this.previousPointerPosition = currentPosition;
357
+ }
358
+
359
+ private onPointerUp() {
360
+ this.dragging = false;
361
+ this.previousPointerPosition = null;
362
+ }
363
+
364
+ private getEventPosition(event: MouseEvent | TouchEvent): Point {
365
+ if (event instanceof TouchEvent) {
366
+ return new Point(event.touches[0].clientX, event.touches[0].clientY);
367
+ } else {
368
+ return new Point(event.clientX, event.clientY);
369
+ }
370
+ }
371
+ }
@@ -0,0 +1,240 @@
1
+ import { DestroyOptions, Container as PIXIContainer, Sprite, Texture, Ticker } from 'pixi.js';
2
+ import { Animated, Factory, WithSignals } from '../mixins';
3
+
4
+ import { Application } from '../core/Application';
5
+ import { Signal } from '../signals';
6
+ import { SignalOrder } from '../signals/Signal';
7
+ import type { AppTypeOverrides, PointLike, Size } from '../utils';
8
+ import { bindAllMethods } from '../utils';
9
+
10
+ /**
11
+ * Configuration for the Container class.
12
+ */
13
+ export type ContainerConfig = {
14
+ autoResize: boolean;
15
+ autoUpdate: boolean;
16
+ priority: SignalOrder;
17
+ };
18
+
19
+ export const ContainerConfigKeys: (keyof ContainerConfig)[] = ['autoResize', 'autoUpdate', 'priority'];
20
+
21
+ const defaultConfig: ContainerConfig = { autoResize: true, autoUpdate: false, priority: 0 };
22
+
23
+ export type BackgroundConfig = {
24
+ color: number;
25
+ alpha: number;
26
+ width: number;
27
+ height: number;
28
+ anchor: PointLike;
29
+ autoResize: boolean;
30
+ };
31
+
32
+ /**
33
+ * Interface for the Container class.
34
+ */
35
+ export interface IContainer {
36
+ app: AppTypeOverrides['App'];
37
+
38
+ animationContext: string | undefined;
39
+
40
+ onDestroy: Signal<() => void>;
41
+
42
+ destroy(options?: DestroyOptions): void;
43
+
44
+ added(): Promise<void> | void;
45
+
46
+ removed(): Promise<void> | void;
47
+
48
+ childAdded(child: PIXIContainer): Promise<void> | void;
49
+ childRemoved(child: PIXIContainer): Promise<void> | void;
50
+
51
+ resize(size?: Size): void;
52
+
53
+ update(ticker?: Ticker | number): void;
54
+
55
+ addColoredBackground(colorOrConfig?: number | Partial<BackgroundConfig>, alpha?: number): Sprite;
56
+ }
57
+
58
+ /**
59
+ * The Container class extends the _Container class (which includes the Animated and Factory mixins) and implements the IContainer interface.
60
+ * It represents a container for PIXI.js display objects.
61
+ */
62
+ export class Container extends Animated(WithSignals(Factory())) implements IContainer {
63
+ private readonly __caper_method_binding_root = true;
64
+
65
+ public onDestroy: Signal<() => void> = new Signal();
66
+
67
+ protected __background: Sprite;
68
+
69
+ protected _animationContext: string | undefined;
70
+ public get animationContext(): string | undefined {
71
+ return this._animationContext;
72
+ }
73
+ public set animationContext(value: string) {
74
+ this._animationContext = value;
75
+ }
76
+
77
+ private __config: ContainerConfig;
78
+
79
+ public static onGlobalChildAdded = new Signal<(child: PIXIContainer) => void>();
80
+ public static onGlobalChildRemoved = new Signal<(child: PIXIContainer) => void>();
81
+
82
+ public static childAdded(child: PIXIContainer) {
83
+ Container.onGlobalChildAdded.emit(child);
84
+ }
85
+
86
+ public static childRemoved(child: PIXIContainer) {
87
+ Container.onGlobalChildRemoved.emit(child);
88
+ }
89
+
90
+ /**
91
+ * Get the application instance.
92
+ */
93
+ public get app(): AppTypeOverrides['App'] {
94
+ return Application.getInstance();
95
+ }
96
+
97
+ /**
98
+ * The constructor for the Container class.
99
+ * @param config - The configuration for the container.
100
+ */
101
+ constructor(config: Partial<ContainerConfig> = {}) {
102
+ super();
103
+ this.__config = { ...defaultConfig, ...config };
104
+ // Bind all methods of this class to the current instance.
105
+ bindAllMethods(this);
106
+ // Add an event listener for the 'added' event.
107
+ this.on('added', this._added);
108
+ this.on('removed', this._removed);
109
+ this.on('childAdded', this._childAdded);
110
+ this.on('childRemoved', this._childRemoved);
111
+ }
112
+
113
+ public addColoredBackground(colorOrConfig: number | Partial<BackgroundConfig> = 0x0, alpha: number = 1): Sprite {
114
+ const defaultConfig = {
115
+ color: 0x0,
116
+ width: this.app.size.width,
117
+ height: this.app.size.height,
118
+ anchor: 0.5,
119
+ alpha: 1,
120
+ autoResize: true,
121
+ };
122
+
123
+ const opts: BackgroundConfig = Object.assign(
124
+ defaultConfig,
125
+ typeof colorOrConfig === 'number'
126
+ ? {
127
+ color: colorOrConfig,
128
+ alpha: alpha,
129
+ }
130
+ : colorOrConfig,
131
+ );
132
+
133
+ this.__background = this.add.sprite({
134
+ asset: Texture.WHITE,
135
+ width: opts.width,
136
+ height: opts.height,
137
+ anchor: opts.anchor,
138
+ tint: opts.color,
139
+ alpha: opts.alpha,
140
+ resolution: 2,
141
+ });
142
+
143
+ this.setChildIndex(this.__background, 0);
144
+
145
+ if (opts.autoResize) {
146
+ this.addSignalConnection(this.app.onResize.connect(this.__resizeBackground));
147
+ this.__resizeBackground();
148
+ }
149
+
150
+ return this.__background;
151
+ }
152
+
153
+ /**
154
+ * Update the container. This method is meant to be overridden by subclasses.
155
+ * @param ticker
156
+ */
157
+ public update(ticker?: Ticker | number) {
158
+ void ticker;
159
+ }
160
+
161
+ /**
162
+ * Resize the container. This method is meant to be overridden by subclasses.
163
+ * @param size
164
+ */
165
+ public resize(size?: Size) {
166
+ void size;
167
+ }
168
+
169
+ /**
170
+ * This method is called when the container is added to the stage. It is meant to be overridden by subclasses.
171
+ */
172
+ public added() {}
173
+
174
+ public childAdded(child: PIXIContainer) {
175
+ void child;
176
+ }
177
+
178
+ destroy(options?: DestroyOptions): void {
179
+ this.app.animation.killAll(this.animationContext);
180
+ if (this.__config.autoUpdate) {
181
+ this.app.ticker.remove(this.update, this);
182
+ }
183
+ this.onDestroy.emit();
184
+ super.destroy(options);
185
+ }
186
+
187
+ public removed() {}
188
+
189
+ public childRemoved(child: PIXIContainer) {
190
+ void child;
191
+ }
192
+
193
+ protected __resizeBackground() {
194
+ this.__background.width = this.app.size.width;
195
+ this.__background.height = this.app.size.height;
196
+ }
197
+
198
+ /**
199
+ * This method is called when the container is added to the stage. It sets up auto-resizing and auto-updating if enabled.
200
+ */
201
+ private _added() {
202
+ if (this.__config.autoResize) {
203
+ this.addSignalConnection(this.app.onResize.connect(this.resize, this.__config.priority ?? 'highest'));
204
+ }
205
+
206
+ if (this.__config.autoUpdate) {
207
+ this.app.ticker.add(this.update, this, -999999);
208
+ }
209
+ this.added();
210
+ }
211
+
212
+ private _removed() {
213
+ if (this.__config.autoResize) {
214
+ this.app.onResize.disconnect(this.resize);
215
+ }
216
+
217
+ if (this.__config.autoUpdate) {
218
+ this.app.ticker.remove(this.update, this);
219
+ }
220
+
221
+ this.removed();
222
+ }
223
+
224
+ private _childAdded(child: PIXIContainer) {
225
+ Container.childAdded(child);
226
+ this.childAdded(child);
227
+ }
228
+
229
+ private _childRemoved(child: PIXIContainer) {
230
+ Container.childRemoved(child);
231
+ this.childRemoved(child);
232
+ }
233
+
234
+ protected addAnimation(
235
+ anim: gsap.core.Tween | gsap.core.Timeline | (gsap.core.Tween | gsap.core.Timeline)[],
236
+ contextId?: string,
237
+ ): gsap.core.Tween | gsap.core.Timeline | (gsap.core.Tween | gsap.core.Timeline)[] {
238
+ return this.app.addAnimation(anim, contextId ?? this.animationContext);
239
+ }
240
+ }
@@ -0,0 +1,50 @@
1
+ import { Container } from './Container';
2
+
3
+ /**
4
+ * Optional convenience base class for entities discovered from
5
+ * `src/entities/`. The factory system (`this.add.entity(id, props)`) does
6
+ * **not** require entities to extend this class — any class with a
7
+ * single-options-object constructor works. `Entity<Props>` just gives you
8
+ * typed prop storage and a conventional lifecycle for free.
9
+ *
10
+ * **Lifecycle** (inherited from Container):
11
+ *
12
+ * 1. `constructor(props)` — props are stashed on `this.props` before
13
+ * Container's constructor runs. Don't reference `this.app` yet.
14
+ * 2. **addChild** — the factory auto-adds the instance to the calling
15
+ * Container; Pixi emits an `added` event.
16
+ * 3. `added()` — override this to build the display tree using
17
+ * `this.props`. Safe to use `this.app`, `this.add.*`, and any asset.
18
+ * Runs after construction, after stage attachment.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { defineEntity, Entity } from '@caperjs/core';
23
+ *
24
+ * type ActorProps = { color?: number; x?: number; y?: number };
25
+ *
26
+ * export const entity = defineEntity({ id: 'actor' });
27
+ *
28
+ * export default class Actor extends Entity<ActorProps> {
29
+ * added() {
30
+ * this.x = this.props.x ?? 0;
31
+ * this.y = this.props.y ?? 0;
32
+ * this.add.graphics().circle(0, 0, 50).fill(this.props.color ?? 0xffffff);
33
+ * }
34
+ * }
35
+ * ```
36
+ *
37
+ * Then from a scene:
38
+ * ```ts
39
+ * this.add.entity('actor', { color: 0xff0000, x: 50, y: 100 });
40
+ * ```
41
+ */
42
+ export class Entity<Props = void> extends Container {
43
+ /** Props passed into the factory call. Populated before `added()` fires. */
44
+ public readonly props: Props;
45
+
46
+ constructor(props?: Props) {
47
+ super();
48
+ this.props = (props ?? ({} as Props)) as Props;
49
+ }
50
+ }