rn-gamekit 0.1.0 → 0.2.1

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 (601) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +97 -16
  3. package/lib/module/assets/defineAssets.js +28 -3
  4. package/lib/module/assets/defineAssets.js.map +1 -1
  5. package/lib/module/assets.js +11 -0
  6. package/lib/module/assets.js.map +1 -0
  7. package/lib/module/audio/createGameAudio.js +784 -0
  8. package/lib/module/audio/createGameAudio.js.map +1 -0
  9. package/lib/module/audio/errors.js +12 -0
  10. package/lib/module/audio/errors.js.map +1 -0
  11. package/lib/module/audio/index.js +5 -0
  12. package/lib/module/audio/index.js.map +1 -0
  13. package/lib/module/audio/resolver.js +37 -0
  14. package/lib/module/audio/resolver.js.map +1 -0
  15. package/lib/module/audio/types.js +4 -0
  16. package/lib/module/audio/types.js.map +1 -0
  17. package/lib/module/audio.js +9 -0
  18. package/lib/module/audio.js.map +1 -0
  19. package/lib/module/camera2d/bounds.js +59 -0
  20. package/lib/module/camera2d/bounds.js.map +1 -0
  21. package/lib/module/camera2d/extents.js +25 -0
  22. package/lib/module/camera2d/extents.js.map +1 -0
  23. package/lib/module/camera2d/follow.js +138 -0
  24. package/lib/module/camera2d/follow.js.map +1 -0
  25. package/lib/module/camera2d/index.js +20 -0
  26. package/lib/module/camera2d/index.js.map +1 -0
  27. package/lib/module/camera2d/interpolation.js +98 -0
  28. package/lib/module/camera2d/interpolation.js.map +1 -0
  29. package/lib/module/camera2d/shake.js +85 -0
  30. package/lib/module/camera2d/shake.js.map +1 -0
  31. package/lib/module/camera2d/transform.js +151 -0
  32. package/lib/module/camera2d/transform.js.map +1 -0
  33. package/lib/module/camera2d/types.js +4 -0
  34. package/lib/module/camera2d/types.js.map +1 -0
  35. package/lib/module/camera2d/validation.js +98 -0
  36. package/lib/module/camera2d/validation.js.map +1 -0
  37. package/lib/module/camera2d/visibility.js +138 -0
  38. package/lib/module/camera2d/visibility.js.map +1 -0
  39. package/lib/module/camera2d.js +9 -0
  40. package/lib/module/camera2d.js.map +1 -0
  41. package/lib/module/collision2d/colliders.js +266 -0
  42. package/lib/module/collision2d/colliders.js.map +1 -0
  43. package/lib/module/collision2d/debug.js +105 -0
  44. package/lib/module/collision2d/debug.js.map +1 -0
  45. package/lib/module/collision2d/filters.js +40 -0
  46. package/lib/module/collision2d/filters.js.map +1 -0
  47. package/lib/module/collision2d/index.js +12 -0
  48. package/lib/module/collision2d/index.js.map +1 -0
  49. package/lib/module/collision2d/intersections.js +67 -0
  50. package/lib/module/collision2d/intersections.js.map +1 -0
  51. package/lib/module/collision2d/manifolds.js +218 -0
  52. package/lib/module/collision2d/manifolds.js.map +1 -0
  53. package/lib/module/collision2d/segments.js +187 -0
  54. package/lib/module/collision2d/segments.js.map +1 -0
  55. package/lib/module/collision2d/spatialHash.js +167 -0
  56. package/lib/module/collision2d/spatialHash.js.map +1 -0
  57. package/lib/module/collision2d/sweeps.js +255 -0
  58. package/lib/module/collision2d/sweeps.js.map +1 -0
  59. package/lib/module/collision2d.js +9 -0
  60. package/lib/module/collision2d.js.map +1 -0
  61. package/lib/module/core/input/buttonPad.js +214 -0
  62. package/lib/module/core/input/buttonPad.js.map +1 -0
  63. package/lib/module/core/input/createInputBuffer.js +66 -14
  64. package/lib/module/core/input/createInputBuffer.js.map +1 -1
  65. package/lib/module/core/session/createGameSession.js +454 -50
  66. package/lib/module/core/session/createGameSession.js.map +1 -1
  67. package/lib/module/core/session/deepFreeze.js +92 -2
  68. package/lib/module/core/session/deepFreeze.js.map +1 -1
  69. package/lib/module/core/session/types.js +12 -0
  70. package/lib/module/core/session/types.js.map +1 -1
  71. package/lib/module/definition/defineGame.js +23 -0
  72. package/lib/module/definition/defineGame.js.map +1 -1
  73. package/lib/module/events/defineGameEvents.js +46 -0
  74. package/lib/module/events/defineGameEvents.js.map +1 -0
  75. package/lib/module/events/errors.js +16 -0
  76. package/lib/module/events/errors.js.map +1 -0
  77. package/lib/module/events/index.js +7 -0
  78. package/lib/module/events/index.js.map +1 -0
  79. package/lib/module/events/payload.js +219 -0
  80. package/lib/module/events/payload.js.map +1 -0
  81. package/lib/module/events/seed.js +33 -0
  82. package/lib/module/events/seed.js.map +1 -0
  83. package/lib/module/events/types.js +4 -0
  84. package/lib/module/events/types.js.map +1 -0
  85. package/lib/module/events.js +13 -0
  86. package/lib/module/events.js.map +1 -0
  87. package/lib/module/geometry/helpers.js +140 -0
  88. package/lib/module/geometry/helpers.js.map +1 -0
  89. package/lib/module/geometry/index.js +5 -0
  90. package/lib/module/geometry/index.js.map +1 -0
  91. package/lib/module/geometry/validation.js +104 -0
  92. package/lib/module/geometry/validation.js.map +1 -0
  93. package/lib/module/geometry.js +9 -0
  94. package/lib/module/geometry.js.map +1 -0
  95. package/lib/module/haptics/createGameHaptics.js +214 -0
  96. package/lib/module/haptics/createGameHaptics.js.map +1 -0
  97. package/lib/module/haptics/errors.js +12 -0
  98. package/lib/module/haptics/errors.js.map +1 -0
  99. package/lib/module/haptics/index.js +5 -0
  100. package/lib/module/haptics/index.js.map +1 -0
  101. package/lib/module/haptics/resolver.js +37 -0
  102. package/lib/module/haptics/resolver.js.map +1 -0
  103. package/lib/module/haptics/types.js +4 -0
  104. package/lib/module/haptics/types.js.map +1 -0
  105. package/lib/module/haptics.js +9 -0
  106. package/lib/module/haptics.js.map +1 -0
  107. package/lib/module/index.js +8 -1
  108. package/lib/module/index.js.map +1 -1
  109. package/lib/module/particles/createParticleSystem.js +481 -0
  110. package/lib/module/particles/createParticleSystem.js.map +1 -0
  111. package/lib/module/particles/defineParticleEffect.js +178 -0
  112. package/lib/module/particles/defineParticleEffect.js.map +1 -0
  113. package/lib/module/particles/errors.js +9 -0
  114. package/lib/module/particles/errors.js.map +1 -0
  115. package/lib/module/particles/index.js +8 -0
  116. package/lib/module/particles/index.js.map +1 -0
  117. package/lib/module/particles/sampling.js +121 -0
  118. package/lib/module/particles/sampling.js.map +1 -0
  119. package/lib/module/particles/types.js +4 -0
  120. package/lib/module/particles/types.js.map +1 -0
  121. package/lib/module/particles.js +4 -0
  122. package/lib/module/particles.js.map +1 -0
  123. package/lib/module/react/GameButtonPad.js +344 -0
  124. package/lib/module/react/GameButtonPad.js.map +1 -0
  125. package/lib/module/react/GamePointerInput.js +74 -16
  126. package/lib/module/react/GamePointerInput.js.map +1 -1
  127. package/lib/module/react/GameView.js +139 -60
  128. package/lib/module/react/GameView.js.map +1 -1
  129. package/lib/module/react/assets/createGameAssetStore.js +145 -95
  130. package/lib/module/react/assets/createGameAssetStore.js.map +1 -1
  131. package/lib/module/react/assets/useGameAssets.js +60 -35
  132. package/lib/module/react/assets/useGameAssets.js.map +1 -1
  133. package/lib/module/react/bindAppLifecycle.js +46 -17
  134. package/lib/module/react/bindAppLifecycle.js.map +1 -1
  135. package/lib/module/react/bindGameSession.js +13 -2
  136. package/lib/module/react/bindGameSession.js.map +1 -1
  137. package/lib/module/react/camera2d/GameLayer2D.js +50 -0
  138. package/lib/module/react/camera2d/GameLayer2D.js.map +1 -0
  139. package/lib/module/react/camera2d/defineGameCamera2D.js +30 -0
  140. package/lib/module/react/camera2d/defineGameCamera2D.js.map +1 -0
  141. package/lib/module/react/camera2d/usePresentedCameraBinding.js +177 -0
  142. package/lib/module/react/camera2d/usePresentedCameraBinding.js.map +1 -0
  143. package/lib/module/react/cleanupList.js +38 -0
  144. package/lib/module/react/cleanupList.js.map +1 -0
  145. package/lib/module/react/lifecycleSource.js +49 -0
  146. package/lib/module/react/lifecycleSource.js.map +1 -0
  147. package/lib/module/react/particles/ParticleView.js +308 -0
  148. package/lib/module/react/particles/ParticleView.js.map +1 -0
  149. package/lib/module/react/particles/culling.js +115 -0
  150. package/lib/module/react/particles/culling.js.map +1 -0
  151. package/lib/module/react/particles/index.js +7 -0
  152. package/lib/module/react/particles/index.js.map +1 -0
  153. package/lib/module/react/particles/spriteXForm.js +45 -0
  154. package/lib/module/react/particles/spriteXForm.js.map +1 -0
  155. package/lib/module/react/particles/useParticlePresentation.js +204 -0
  156. package/lib/module/react/particles/useParticlePresentation.js.map +1 -0
  157. package/lib/module/react/pointerBinding.js +55 -17
  158. package/lib/module/react/pointerBinding.js.map +1 -1
  159. package/lib/module/react/pointerCamera.js +28 -0
  160. package/lib/module/react/pointerCamera.js.map +1 -0
  161. package/lib/module/react/pointerCoalescer.js +16 -9
  162. package/lib/module/react/pointerCoalescer.js.map +1 -1
  163. package/lib/module/react/sprites/GameSprite.js +5 -17
  164. package/lib/module/react/sprites/GameSprite.js.map +1 -1
  165. package/lib/module/react/sprites/GameWorld2D.js +112 -9
  166. package/lib/module/react/sprites/GameWorld2D.js.map +1 -1
  167. package/lib/module/react/sprites/Sprite.js +48 -63
  168. package/lib/module/react/sprites/Sprite.js.map +1 -1
  169. package/lib/module/react/sprites/SpriteBatch.js +53 -28
  170. package/lib/module/react/sprites/SpriteBatch.js.map +1 -1
  171. package/lib/module/react/sprites/batchVisibility.js +58 -0
  172. package/lib/module/react/sprites/batchVisibility.js.map +1 -0
  173. package/lib/module/react/sprites/spriteSelection.js +103 -0
  174. package/lib/module/react/sprites/spriteSelection.js.map +1 -0
  175. package/lib/module/react/sprites/spriteTransform.js +46 -25
  176. package/lib/module/react/sprites/spriteTransform.js.map +1 -1
  177. package/lib/module/react/tilemap/TileMapLayer2D.js +217 -0
  178. package/lib/module/react/tilemap/TileMapLayer2D.js.map +1 -0
  179. package/lib/module/react/tilemap/tilePresentation.js +374 -0
  180. package/lib/module/react/tilemap/tilePresentation.js.map +1 -0
  181. package/lib/module/react/useGameSession.js +70 -0
  182. package/lib/module/react/useGameSession.js.map +1 -0
  183. package/lib/module/react/useGameSessionStatus.js +46 -0
  184. package/lib/module/react/useGameSessionStatus.js.map +1 -0
  185. package/lib/module/react/viewportBinding.js +5 -1
  186. package/lib/module/react/viewportBinding.js.map +1 -1
  187. package/lib/module/react.js +12 -1
  188. package/lib/module/react.js.map +1 -1
  189. package/lib/module/scene/defineScene.js +17 -0
  190. package/lib/module/scene/defineScene.js.map +1 -1
  191. package/lib/module/sprites/sampleSpriteClip.js +66 -6
  192. package/lib/module/sprites/sampleSpriteClip.js.map +1 -1
  193. package/lib/module/sprites/spriteAnimationState.js +10 -20
  194. package/lib/module/sprites/spriteAnimationState.js.map +1 -1
  195. package/lib/module/sprites.js +11 -0
  196. package/lib/module/sprites.js.map +1 -0
  197. package/lib/module/storage/adapters/asyncStorage.js +57 -0
  198. package/lib/module/storage/adapters/asyncStorage.js.map +1 -0
  199. package/lib/module/storage/adapters/memory.js +50 -0
  200. package/lib/module/storage/adapters/memory.js.map +1 -0
  201. package/lib/module/storage/errors.js +34 -0
  202. package/lib/module/storage/errors.js.map +1 -0
  203. package/lib/module/storage/index.js +11 -0
  204. package/lib/module/storage/index.js.map +1 -0
  205. package/lib/module/storage/schema.js +151 -0
  206. package/lib/module/storage/schema.js.map +1 -0
  207. package/lib/module/storage/serialization.js +249 -0
  208. package/lib/module/storage/serialization.js.map +1 -0
  209. package/lib/module/storage/store.js +387 -0
  210. package/lib/module/storage/store.js.map +1 -0
  211. package/lib/module/storage/types.js +16 -0
  212. package/lib/module/storage/types.js.map +1 -0
  213. package/lib/module/storage/validation.js +111 -0
  214. package/lib/module/storage/validation.js.map +1 -0
  215. package/lib/module/storage.js +4 -0
  216. package/lib/module/storage.js.map +1 -0
  217. package/lib/module/testing.js +4 -0
  218. package/lib/module/testing.js.map +1 -1
  219. package/lib/module/tilemap/chunkStats.js +27 -0
  220. package/lib/module/tilemap/chunkStats.js.map +1 -0
  221. package/lib/module/tilemap/definitions.js +308 -0
  222. package/lib/module/tilemap/definitions.js.map +1 -0
  223. package/lib/module/tilemap/errors.js +13 -0
  224. package/lib/module/tilemap/errors.js.map +1 -0
  225. package/lib/module/tilemap/index.js +10 -0
  226. package/lib/module/tilemap/index.js.map +1 -0
  227. package/lib/module/tilemap/movement.js +379 -0
  228. package/lib/module/tilemap/movement.js.map +1 -0
  229. package/lib/module/tilemap/queries.js +114 -0
  230. package/lib/module/tilemap/queries.js.map +1 -0
  231. package/lib/module/tilemap/tiledAdapter.js +141 -0
  232. package/lib/module/tilemap/tiledAdapter.js.map +1 -0
  233. package/lib/module/tilemap/types.js +4 -0
  234. package/lib/module/tilemap/types.js.map +1 -0
  235. package/lib/module/tilemap.js +4 -0
  236. package/lib/module/tilemap.js.map +1 -0
  237. package/lib/typescript/src/assets/defineAssets.d.ts +1 -1
  238. package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -1
  239. package/lib/typescript/src/assets.d.ts +11 -0
  240. package/lib/typescript/src/assets.d.ts.map +1 -0
  241. package/lib/typescript/src/audio/createGameAudio.d.ts +5 -0
  242. package/lib/typescript/src/audio/createGameAudio.d.ts.map +1 -0
  243. package/lib/typescript/src/audio/errors.d.ts +6 -0
  244. package/lib/typescript/src/audio/errors.d.ts.map +1 -0
  245. package/lib/typescript/src/audio/index.d.ts +4 -0
  246. package/lib/typescript/src/audio/index.d.ts.map +1 -0
  247. package/lib/typescript/src/audio/resolver.d.ts +44 -0
  248. package/lib/typescript/src/audio/resolver.d.ts.map +1 -0
  249. package/lib/typescript/src/audio/types.d.ts +42 -0
  250. package/lib/typescript/src/audio/types.d.ts.map +1 -0
  251. package/lib/typescript/src/audio.d.ts +8 -0
  252. package/lib/typescript/src/audio.d.ts.map +1 -0
  253. package/lib/typescript/src/camera2d/bounds.d.ts +25 -0
  254. package/lib/typescript/src/camera2d/bounds.d.ts.map +1 -0
  255. package/lib/typescript/src/camera2d/extents.d.ts +17 -0
  256. package/lib/typescript/src/camera2d/extents.d.ts.map +1 -0
  257. package/lib/typescript/src/camera2d/follow.d.ts +24 -0
  258. package/lib/typescript/src/camera2d/follow.d.ts.map +1 -0
  259. package/lib/typescript/src/camera2d/index.d.ts +19 -0
  260. package/lib/typescript/src/camera2d/index.d.ts.map +1 -0
  261. package/lib/typescript/src/camera2d/interpolation.d.ts +17 -0
  262. package/lib/typescript/src/camera2d/interpolation.d.ts.map +1 -0
  263. package/lib/typescript/src/camera2d/shake.d.ts +20 -0
  264. package/lib/typescript/src/camera2d/shake.d.ts.map +1 -0
  265. package/lib/typescript/src/camera2d/transform.d.ts +44 -0
  266. package/lib/typescript/src/camera2d/transform.d.ts.map +1 -0
  267. package/lib/typescript/src/camera2d/types.d.ts +74 -0
  268. package/lib/typescript/src/camera2d/types.d.ts.map +1 -0
  269. package/lib/typescript/src/camera2d/validation.d.ts +30 -0
  270. package/lib/typescript/src/camera2d/validation.d.ts.map +1 -0
  271. package/lib/typescript/src/camera2d/visibility.d.ts +47 -0
  272. package/lib/typescript/src/camera2d/visibility.d.ts.map +1 -0
  273. package/lib/typescript/src/camera2d.d.ts +7 -0
  274. package/lib/typescript/src/camera2d.d.ts.map +1 -0
  275. package/lib/typescript/src/collision2d/colliders.d.ts +120 -0
  276. package/lib/typescript/src/collision2d/colliders.d.ts.map +1 -0
  277. package/lib/typescript/src/collision2d/debug.d.ts +67 -0
  278. package/lib/typescript/src/collision2d/debug.d.ts.map +1 -0
  279. package/lib/typescript/src/collision2d/filters.d.ts +28 -0
  280. package/lib/typescript/src/collision2d/filters.d.ts.map +1 -0
  281. package/lib/typescript/src/collision2d/index.d.ts +17 -0
  282. package/lib/typescript/src/collision2d/index.d.ts.map +1 -0
  283. package/lib/typescript/src/collision2d/intersections.d.ts +24 -0
  284. package/lib/typescript/src/collision2d/intersections.d.ts.map +1 -0
  285. package/lib/typescript/src/collision2d/manifolds.d.ts +39 -0
  286. package/lib/typescript/src/collision2d/manifolds.d.ts.map +1 -0
  287. package/lib/typescript/src/collision2d/segments.d.ts +24 -0
  288. package/lib/typescript/src/collision2d/segments.d.ts.map +1 -0
  289. package/lib/typescript/src/collision2d/spatialHash.d.ts +50 -0
  290. package/lib/typescript/src/collision2d/spatialHash.d.ts.map +1 -0
  291. package/lib/typescript/src/collision2d/sweeps.d.ts +60 -0
  292. package/lib/typescript/src/collision2d/sweeps.d.ts.map +1 -0
  293. package/lib/typescript/src/collision2d.d.ts +7 -0
  294. package/lib/typescript/src/collision2d.d.ts.map +1 -0
  295. package/lib/typescript/src/core/input/buttonPad.d.ts +59 -0
  296. package/lib/typescript/src/core/input/buttonPad.d.ts.map +1 -0
  297. package/lib/typescript/src/core/input/createInputBuffer.d.ts +1 -1
  298. package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -1
  299. package/lib/typescript/src/core/input/types.d.ts +7 -0
  300. package/lib/typescript/src/core/input/types.d.ts.map +1 -1
  301. package/lib/typescript/src/core/session/createGameSession.d.ts +4 -2
  302. package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -1
  303. package/lib/typescript/src/core/session/deepFreeze.d.ts +21 -1
  304. package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -1
  305. package/lib/typescript/src/core/session/diagnostics.d.ts +2 -0
  306. package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -1
  307. package/lib/typescript/src/core/session/types.d.ts +69 -4
  308. package/lib/typescript/src/core/session/types.d.ts.map +1 -1
  309. package/lib/typescript/src/definition/defineGame.d.ts +12 -1
  310. package/lib/typescript/src/definition/defineGame.d.ts.map +1 -1
  311. package/lib/typescript/src/definition/types.d.ts +10 -1
  312. package/lib/typescript/src/definition/types.d.ts.map +1 -1
  313. package/lib/typescript/src/events/defineGameEvents.d.ts +26 -0
  314. package/lib/typescript/src/events/defineGameEvents.d.ts.map +1 -0
  315. package/lib/typescript/src/events/errors.d.ts +12 -0
  316. package/lib/typescript/src/events/errors.d.ts.map +1 -0
  317. package/lib/typescript/src/events/index.d.ts +6 -0
  318. package/lib/typescript/src/events/index.d.ts.map +1 -0
  319. package/lib/typescript/src/events/payload.d.ts +21 -0
  320. package/lib/typescript/src/events/payload.d.ts.map +1 -0
  321. package/lib/typescript/src/events/seed.d.ts +3 -0
  322. package/lib/typescript/src/events/seed.d.ts.map +1 -0
  323. package/lib/typescript/src/events/types.d.ts +42 -0
  324. package/lib/typescript/src/events/types.d.ts.map +1 -0
  325. package/lib/typescript/src/events.d.ts +12 -0
  326. package/lib/typescript/src/events.d.ts.map +1 -0
  327. package/lib/typescript/src/geometry/helpers.d.ts +35 -0
  328. package/lib/typescript/src/geometry/helpers.d.ts.map +1 -0
  329. package/lib/typescript/src/geometry/index.d.ts +4 -0
  330. package/lib/typescript/src/geometry/index.d.ts.map +1 -0
  331. package/lib/typescript/src/geometry/types.d.ts +49 -0
  332. package/lib/typescript/src/geometry/types.d.ts.map +1 -1
  333. package/lib/typescript/src/geometry/validation.d.ts +44 -0
  334. package/lib/typescript/src/geometry/validation.d.ts.map +1 -0
  335. package/lib/typescript/src/geometry.d.ts +7 -0
  336. package/lib/typescript/src/geometry.d.ts.map +1 -0
  337. package/lib/typescript/src/haptics/createGameHaptics.d.ts +3 -0
  338. package/lib/typescript/src/haptics/createGameHaptics.d.ts.map +1 -0
  339. package/lib/typescript/src/haptics/errors.d.ts +6 -0
  340. package/lib/typescript/src/haptics/errors.d.ts.map +1 -0
  341. package/lib/typescript/src/haptics/index.d.ts +4 -0
  342. package/lib/typescript/src/haptics/index.d.ts.map +1 -0
  343. package/lib/typescript/src/haptics/resolver.d.ts +22 -0
  344. package/lib/typescript/src/haptics/resolver.d.ts.map +1 -0
  345. package/lib/typescript/src/haptics/types.d.ts +37 -0
  346. package/lib/typescript/src/haptics/types.d.ts.map +1 -0
  347. package/lib/typescript/src/haptics.d.ts +8 -0
  348. package/lib/typescript/src/haptics.d.ts.map +1 -0
  349. package/lib/typescript/src/index.d.ts +10 -2
  350. package/lib/typescript/src/index.d.ts.map +1 -1
  351. package/lib/typescript/src/particles/createParticleSystem.d.ts +5 -0
  352. package/lib/typescript/src/particles/createParticleSystem.d.ts.map +1 -0
  353. package/lib/typescript/src/particles/defineParticleEffect.d.ts +3 -0
  354. package/lib/typescript/src/particles/defineParticleEffect.d.ts.map +1 -0
  355. package/lib/typescript/src/particles/errors.d.ts +5 -0
  356. package/lib/typescript/src/particles/errors.d.ts.map +1 -0
  357. package/lib/typescript/src/particles/index.d.ts +6 -0
  358. package/lib/typescript/src/particles/index.d.ts.map +1 -0
  359. package/lib/typescript/src/particles/sampling.d.ts +54 -0
  360. package/lib/typescript/src/particles/sampling.d.ts.map +1 -0
  361. package/lib/typescript/src/particles/types.d.ts +292 -0
  362. package/lib/typescript/src/particles/types.d.ts.map +1 -0
  363. package/lib/typescript/src/particles.d.ts +2 -0
  364. package/lib/typescript/src/particles.d.ts.map +1 -0
  365. package/lib/typescript/src/react/GameButtonPad.d.ts +84 -0
  366. package/lib/typescript/src/react/GameButtonPad.d.ts.map +1 -0
  367. package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -1
  368. package/lib/typescript/src/react/GameView.d.ts +27 -1
  369. package/lib/typescript/src/react/GameView.d.ts.map +1 -1
  370. package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -1
  371. package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -1
  372. package/lib/typescript/src/react/bindAppLifecycle.d.ts +7 -1
  373. package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -1
  374. package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -1
  375. package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts +24 -0
  376. package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts.map +1 -0
  377. package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts +44 -0
  378. package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts.map +1 -0
  379. package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts +22 -0
  380. package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts.map +1 -0
  381. package/lib/typescript/src/react/cleanupList.d.ts +21 -0
  382. package/lib/typescript/src/react/cleanupList.d.ts.map +1 -0
  383. package/lib/typescript/src/react/instrumentation.d.ts +33 -3
  384. package/lib/typescript/src/react/instrumentation.d.ts.map +1 -1
  385. package/lib/typescript/src/react/lifecycleSource.d.ts +21 -0
  386. package/lib/typescript/src/react/lifecycleSource.d.ts.map +1 -0
  387. package/lib/typescript/src/react/particles/ParticleView.d.ts +65 -0
  388. package/lib/typescript/src/react/particles/ParticleView.d.ts.map +1 -0
  389. package/lib/typescript/src/react/particles/culling.d.ts +70 -0
  390. package/lib/typescript/src/react/particles/culling.d.ts.map +1 -0
  391. package/lib/typescript/src/react/particles/index.d.ts +7 -0
  392. package/lib/typescript/src/react/particles/index.d.ts.map +1 -0
  393. package/lib/typescript/src/react/particles/spriteXForm.d.ts +28 -0
  394. package/lib/typescript/src/react/particles/spriteXForm.d.ts.map +1 -0
  395. package/lib/typescript/src/react/particles/useParticlePresentation.d.ts +48 -0
  396. package/lib/typescript/src/react/particles/useParticlePresentation.d.ts.map +1 -0
  397. package/lib/typescript/src/react/pointerBinding.d.ts +38 -8
  398. package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -1
  399. package/lib/typescript/src/react/pointerCamera.d.ts +20 -0
  400. package/lib/typescript/src/react/pointerCamera.d.ts.map +1 -0
  401. package/lib/typescript/src/react/pointerCoalescer.d.ts +17 -1
  402. package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -1
  403. package/lib/typescript/src/react/sprites/GameSprite.d.ts +3 -10
  404. package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -1
  405. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +51 -6
  406. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -1
  407. package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -1
  408. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +22 -1
  409. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -1
  410. package/lib/typescript/src/react/sprites/batchVisibility.d.ts +28 -0
  411. package/lib/typescript/src/react/sprites/batchVisibility.d.ts.map +1 -0
  412. package/lib/typescript/src/react/sprites/spriteSelection.d.ts +58 -0
  413. package/lib/typescript/src/react/sprites/spriteSelection.d.ts.map +1 -0
  414. package/lib/typescript/src/react/sprites/spriteTransform.d.ts +27 -12
  415. package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -1
  416. package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts +69 -0
  417. package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts.map +1 -0
  418. package/lib/typescript/src/react/tilemap/tilePresentation.d.ts +217 -0
  419. package/lib/typescript/src/react/tilemap/tilePresentation.d.ts.map +1 -0
  420. package/lib/typescript/src/react/useGameSession.d.ts +48 -0
  421. package/lib/typescript/src/react/useGameSession.d.ts.map +1 -0
  422. package/lib/typescript/src/react/useGameSessionStatus.d.ts +23 -0
  423. package/lib/typescript/src/react/useGameSessionStatus.d.ts.map +1 -0
  424. package/lib/typescript/src/react/viewportBinding.d.ts +5 -1
  425. package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -1
  426. package/lib/typescript/src/react.d.ts +18 -1
  427. package/lib/typescript/src/react.d.ts.map +1 -1
  428. package/lib/typescript/src/scene/defineScene.d.ts +22 -2
  429. package/lib/typescript/src/scene/defineScene.d.ts.map +1 -1
  430. package/lib/typescript/src/scene/types.d.ts +24 -4
  431. package/lib/typescript/src/scene/types.d.ts.map +1 -1
  432. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +26 -2
  433. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -1
  434. package/lib/typescript/src/sprites/spriteAnimationState.d.ts +6 -7
  435. package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -1
  436. package/lib/typescript/src/sprites.d.ts +10 -0
  437. package/lib/typescript/src/sprites.d.ts.map +1 -0
  438. package/lib/typescript/src/storage/adapters/asyncStorage.d.ts +18 -0
  439. package/lib/typescript/src/storage/adapters/asyncStorage.d.ts.map +1 -0
  440. package/lib/typescript/src/storage/adapters/memory.d.ts +16 -0
  441. package/lib/typescript/src/storage/adapters/memory.d.ts.map +1 -0
  442. package/lib/typescript/src/storage/errors.d.ts +37 -0
  443. package/lib/typescript/src/storage/errors.d.ts.map +1 -0
  444. package/lib/typescript/src/storage/index.d.ts +11 -0
  445. package/lib/typescript/src/storage/index.d.ts.map +1 -0
  446. package/lib/typescript/src/storage/schema.d.ts +22 -0
  447. package/lib/typescript/src/storage/schema.d.ts.map +1 -0
  448. package/lib/typescript/src/storage/serialization.d.ts +23 -0
  449. package/lib/typescript/src/storage/serialization.d.ts.map +1 -0
  450. package/lib/typescript/src/storage/store.d.ts +3 -0
  451. package/lib/typescript/src/storage/store.d.ts.map +1 -0
  452. package/lib/typescript/src/storage/types.d.ts +69 -0
  453. package/lib/typescript/src/storage/types.d.ts.map +1 -0
  454. package/lib/typescript/src/storage/validation.d.ts +24 -0
  455. package/lib/typescript/src/storage/validation.d.ts.map +1 -0
  456. package/lib/typescript/src/storage.d.ts +2 -0
  457. package/lib/typescript/src/storage.d.ts.map +1 -0
  458. package/lib/typescript/src/testing.d.ts +1 -0
  459. package/lib/typescript/src/testing.d.ts.map +1 -1
  460. package/lib/typescript/src/tilemap/chunkStats.d.ts +14 -0
  461. package/lib/typescript/src/tilemap/chunkStats.d.ts.map +1 -0
  462. package/lib/typescript/src/tilemap/definitions.d.ts +38 -0
  463. package/lib/typescript/src/tilemap/definitions.d.ts.map +1 -0
  464. package/lib/typescript/src/tilemap/errors.d.ts +7 -0
  465. package/lib/typescript/src/tilemap/errors.d.ts.map +1 -0
  466. package/lib/typescript/src/tilemap/index.d.ts +8 -0
  467. package/lib/typescript/src/tilemap/index.d.ts.map +1 -0
  468. package/lib/typescript/src/tilemap/movement.d.ts +52 -0
  469. package/lib/typescript/src/tilemap/movement.d.ts.map +1 -0
  470. package/lib/typescript/src/tilemap/queries.d.ts +21 -0
  471. package/lib/typescript/src/tilemap/queries.d.ts.map +1 -0
  472. package/lib/typescript/src/tilemap/tiledAdapter.d.ts +32 -0
  473. package/lib/typescript/src/tilemap/tiledAdapter.d.ts.map +1 -0
  474. package/lib/typescript/src/tilemap/types.d.ts +127 -0
  475. package/lib/typescript/src/tilemap/types.d.ts.map +1 -0
  476. package/lib/typescript/src/tilemap.d.ts +2 -0
  477. package/lib/typescript/src/tilemap.d.ts.map +1 -0
  478. package/package.json +100 -10
  479. package/src/assets/defineAssets.ts +31 -5
  480. package/src/assets.ts +27 -0
  481. package/src/audio/createGameAudio.ts +749 -0
  482. package/src/audio/errors.ts +12 -0
  483. package/src/audio/index.ts +9 -0
  484. package/src/audio/resolver.ts +74 -0
  485. package/src/audio/types.ts +47 -0
  486. package/src/audio.ts +13 -0
  487. package/src/camera2d/bounds.ts +69 -0
  488. package/src/camera2d/extents.ts +25 -0
  489. package/src/camera2d/follow.ts +165 -0
  490. package/src/camera2d/index.ts +29 -0
  491. package/src/camera2d/interpolation.ts +113 -0
  492. package/src/camera2d/shake.ts +90 -0
  493. package/src/camera2d/transform.ts +148 -0
  494. package/src/camera2d/types.ts +73 -0
  495. package/src/camera2d/validation.ts +126 -0
  496. package/src/camera2d/visibility.ts +181 -0
  497. package/src/camera2d.ts +6 -0
  498. package/src/collision2d/colliders.ts +292 -0
  499. package/src/collision2d/debug.ts +133 -0
  500. package/src/collision2d/filters.ts +48 -0
  501. package/src/collision2d/index.ts +74 -0
  502. package/src/collision2d/intersections.ts +82 -0
  503. package/src/collision2d/manifolds.ts +191 -0
  504. package/src/collision2d/segments.ts +176 -0
  505. package/src/collision2d/spatialHash.ts +211 -0
  506. package/src/collision2d/sweeps.ts +269 -0
  507. package/src/collision2d.ts +6 -0
  508. package/src/core/input/buttonPad.ts +235 -0
  509. package/src/core/input/createInputBuffer.ts +95 -14
  510. package/src/core/input/types.ts +7 -0
  511. package/src/core/session/createGameSession.ts +480 -53
  512. package/src/core/session/deepFreeze.ts +104 -3
  513. package/src/core/session/diagnostics.ts +2 -0
  514. package/src/core/session/types.ts +77 -4
  515. package/src/definition/defineGame.ts +61 -3
  516. package/src/definition/types.ts +10 -0
  517. package/src/events/defineGameEvents.ts +46 -0
  518. package/src/events/errors.ts +14 -0
  519. package/src/events/index.ts +14 -0
  520. package/src/events/payload.ts +234 -0
  521. package/src/events/seed.ts +33 -0
  522. package/src/events/types.ts +53 -0
  523. package/src/events.ts +20 -0
  524. package/src/geometry/helpers.ts +136 -0
  525. package/src/geometry/index.ts +14 -0
  526. package/src/geometry/types.ts +54 -0
  527. package/src/geometry/validation.ts +131 -0
  528. package/src/geometry.ts +6 -0
  529. package/src/haptics/createGameHaptics.ts +214 -0
  530. package/src/haptics/errors.ts +12 -0
  531. package/src/haptics/index.ts +3 -0
  532. package/src/haptics/resolver.ts +58 -0
  533. package/src/haptics/types.ts +48 -0
  534. package/src/haptics.ts +7 -0
  535. package/src/index.ts +37 -1
  536. package/src/particles/createParticleSystem.ts +505 -0
  537. package/src/particles/defineParticleEffect.ts +164 -0
  538. package/src/particles/errors.ts +6 -0
  539. package/src/particles/index.ts +5 -0
  540. package/src/particles/sampling.ts +141 -0
  541. package/src/particles/types.ts +327 -0
  542. package/src/particles.ts +1 -0
  543. package/src/react/GameButtonPad.tsx +436 -0
  544. package/src/react/GamePointerInput.tsx +73 -8
  545. package/src/react/GameView.tsx +160 -61
  546. package/src/react/assets/createGameAssetStore.ts +140 -107
  547. package/src/react/assets/useGameAssets.ts +63 -31
  548. package/src/react/bindAppLifecycle.ts +55 -19
  549. package/src/react/bindGameSession.ts +12 -2
  550. package/src/react/camera2d/GameLayer2D.tsx +43 -0
  551. package/src/react/camera2d/defineGameCamera2D.ts +59 -0
  552. package/src/react/camera2d/usePresentedCameraBinding.ts +185 -0
  553. package/src/react/cleanupList.ts +48 -0
  554. package/src/react/instrumentation.ts +31 -3
  555. package/src/react/lifecycleSource.ts +58 -0
  556. package/src/react/particles/ParticleView.tsx +358 -0
  557. package/src/react/particles/culling.ts +145 -0
  558. package/src/react/particles/index.ts +6 -0
  559. package/src/react/particles/spriteXForm.ts +72 -0
  560. package/src/react/particles/useParticlePresentation.ts +261 -0
  561. package/src/react/pointerBinding.ts +74 -16
  562. package/src/react/pointerCamera.ts +33 -0
  563. package/src/react/pointerCoalescer.ts +36 -10
  564. package/src/react/sprites/GameSprite.tsx +4 -33
  565. package/src/react/sprites/GameWorld2D.tsx +113 -7
  566. package/src/react/sprites/Sprite.tsx +51 -72
  567. package/src/react/sprites/SpriteBatch.tsx +74 -22
  568. package/src/react/sprites/batchVisibility.ts +76 -0
  569. package/src/react/sprites/spriteSelection.ts +133 -0
  570. package/src/react/sprites/spriteTransform.ts +46 -26
  571. package/src/react/tilemap/TileMapLayer2D.tsx +274 -0
  572. package/src/react/tilemap/tilePresentation.ts +491 -0
  573. package/src/react/useGameSession.ts +90 -0
  574. package/src/react/useGameSessionStatus.ts +53 -0
  575. package/src/react/viewportBinding.ts +5 -1
  576. package/src/react.ts +18 -1
  577. package/src/scene/defineScene.ts +47 -5
  578. package/src/scene/types.ts +37 -3
  579. package/src/sprites/sampleSpriteClip.ts +82 -14
  580. package/src/sprites/spriteAnimationState.ts +29 -25
  581. package/src/sprites.ts +22 -0
  582. package/src/storage/adapters/asyncStorage.ts +77 -0
  583. package/src/storage/adapters/memory.ts +58 -0
  584. package/src/storage/errors.ts +88 -0
  585. package/src/storage/index.ts +18 -0
  586. package/src/storage/schema.ts +147 -0
  587. package/src/storage/serialization.ts +248 -0
  588. package/src/storage/store.ts +380 -0
  589. package/src/storage/types.ts +76 -0
  590. package/src/storage/validation.ts +102 -0
  591. package/src/storage.ts +1 -0
  592. package/src/testing.ts +4 -0
  593. package/src/tilemap/chunkStats.ts +24 -0
  594. package/src/tilemap/definitions.ts +327 -0
  595. package/src/tilemap/errors.ts +11 -0
  596. package/src/tilemap/index.ts +10 -0
  597. package/src/tilemap/movement.ts +368 -0
  598. package/src/tilemap/queries.ts +136 -0
  599. package/src/tilemap/tiledAdapter.ts +165 -0
  600. package/src/tilemap/types.ts +119 -0
  601. package/src/tilemap.ts +1 -0
@@ -0,0 +1,48 @@
1
+ import type { GameSession } from '../core/session/types.js';
2
+ import type { GameDefinition, InputMap, SceneMap } from '../definition/types.js';
3
+ type SessionCreator<TScenes extends SceneMap, TInput extends InputMap> = (definition: GameDefinition<TScenes, TInput>) => GameSession<TScenes, TInput>;
4
+ /**
5
+ * Create and own a `GameSession` for a `GameDefinition`, with React
6
+ * ownership.
7
+ *
8
+ * The hook creates an idle session during the commit phase, publishes it,
9
+ * and disposes it exactly once when it is replaced or the owner unmounts.
10
+ * React Strict Mode's development setup/cleanup rehearsal is safe: every
11
+ * rehearsal session is disposed exactly once and a disposed session is never
12
+ * published.
13
+ *
14
+ * Ownership rules:
15
+ *
16
+ * - The return value is `undefined` until React commits a live session for
17
+ * the current definition: the initial render, and the boundary while a
18
+ * definition replacement is being created. Render a deliberate fallback
19
+ * instead of hiding it.
20
+ * - The same definition object returns the same session across re-renders.
21
+ * A different definition object unpublishes the old session, disposes it,
22
+ * and publishes a fresh one. Disposed sessions are never revived, so
23
+ * declaring definitions at module scope keeps identity stable.
24
+ * - The hook owns terminal disposal. Do not call `session.dispose()` on a
25
+ * hook-owned session.
26
+ * - The hook does not start the session. Pass it to `GameView`, which binds,
27
+ * starts, pauses on unmount/backgrounding, and never terminally disposes a
28
+ * borrowed session.
29
+ * - For an asset-backed game, mount the component that calls this hook only
30
+ * after `useGameAssets()` reports `ready`; this hook does not load assets.
31
+ *
32
+ * Use `createGameSession()` with explicit `try/finally` disposal for headless
33
+ * tests, non-React programs, and custom surface controllers that need to own
34
+ * sessions imperatively.
35
+ */
36
+ export declare function useGameSession<TScenes extends SceneMap, TInput extends InputMap>(definition: GameDefinition<TScenes, TInput>): GameSession<TScenes, TInput> | undefined;
37
+ /**
38
+ * @internal
39
+ *
40
+ * The injectable-creator seam behind `useGameSession`, exported from this
41
+ * module only (never from the `rn-gamekit/react` barrel). Tests supply a
42
+ * deterministic creator (for example `createGameSessionWithDriver` with a
43
+ * `ManualFrameDriver`, since node has no `requestAnimationFrame`) and must
44
+ * pass a stable factory identity across renders.
45
+ */
46
+ export declare function useOwnedGameSession<TScenes extends SceneMap, TInput extends InputMap>(definition: GameDefinition<TScenes, TInput>, create: SessionCreator<TScenes, TInput>): GameSession<TScenes, TInput> | undefined;
47
+ export {};
48
+ //# sourceMappingURL=useGameSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGameSession.d.ts","sourceRoot":"","sources":["../../../../src/react/useGameSession.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAqB,CAAC;AAE9E,KAAK,cAAc,CAAC,OAAO,SAAS,QAAQ,EAAE,MAAM,SAAS,QAAQ,IAAI,CACvE,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,KACxC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AASlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,QAAQ,EAAE,MAAM,SAAS,QAAQ,EAC9E,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,GAC1C,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,QAAQ,EAAE,MAAM,SAAS,QAAQ,EACnF,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAC3C,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,GACtC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAuB1C"}
@@ -0,0 +1,23 @@
1
+ import type { GameSession, GameSessionStatus } from '../core/session/types.js';
2
+ import type { InputMap, SceneMap } from '../definition/types.js';
3
+ /**
4
+ * Observe a session's lifecycle status from React.
5
+ *
6
+ * Returns the current `session.status` on the render that observes a
7
+ * session, and re-renders once per actual lifecycle transition. `undefined`
8
+ * means no session is currently available — the same meaning Task 9's
9
+ * `useGameSession()` gives its pre-commit value, so both hooks compose
10
+ * unconditionally:
11
+ *
12
+ * ```ts
13
+ * const session = useGameSession(game);
14
+ * const status = useGameSessionStatus(session);
15
+ * ```
16
+ *
17
+ * The hook subscribes through `addStatusListener` and never polls; it owns
18
+ * no session and never disposes one. Replacing the session argument detaches
19
+ * the old subscription before the replacement's status is reported, and
20
+ * idempotent lifecycle commands do not cause redundant re-renders.
21
+ */
22
+ export declare function useGameSessionStatus<TScenes extends SceneMap, TInput extends InputMap>(session: GameSession<TScenes, TInput> | undefined): GameSessionStatus | undefined;
23
+ //# sourceMappingURL=useGameSessionStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGameSessionStatus.d.ts","sourceRoot":"","sources":["../../../../src/react/useGameSessionStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAqB,CAAC;AAK9D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,SAAS,QAAQ,EACxB,MAAM,SAAS,QAAQ,EACvB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAuBlF"}
@@ -29,7 +29,11 @@ export declare class ViewportBinding {
29
29
  setSurfaceSize(size: SurfaceSize): void;
30
30
  /** Observe layout revisions. Returns an idempotent unsubscribe. */
31
31
  subscribe(listener: () => void): () => void;
32
- /** Release subscribers. The binding becomes inert. */
32
+ /**
33
+ * Release current subscribers (GS-VIEWPORT-01). This is not a lifecycle
34
+ * gate: late subscriptions still register and setSurfaceSize still
35
+ * resolves. Discard the binding after disposal instead of reusing it.
36
+ */
33
37
  dispose(): void;
34
38
  }
35
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"viewportBinding.d.ts","sourceRoot":"","sources":["../../../../src/react/viewportBinding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAe,CAAC;AAE5G;;;;;;;;;GASG;AACH,qBAAa,eAAe;;gBAOd,MAAM,EAAE,QAAQ;IAI5B,iEAAiE;IACjE,IAAI,MAAM,IAAI,QAAQ,CAErB;IAED,gFAAgF;IAChF,IAAI,QAAQ,IAAI,kBAAkB,GAAG,SAAS,CAE7C;IAED,6EAA6E;IAC7E,IAAI,WAAW,IAAI,WAAW,GAAG,SAAS,CAEzC;IAED,8DAA8D;IAC9D,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAgBvC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAY3C,sDAAsD;IACtD,OAAO,IAAI,IAAI;CAGhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,eAAe,CAUjB"}
1
+ {"version":3,"file":"viewportBinding.d.ts","sourceRoot":"","sources":["../../../../src/react/viewportBinding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAe,CAAC;AAE5G;;;;;;;;;GASG;AACH,qBAAa,eAAe;;gBAOd,MAAM,EAAE,QAAQ;IAI5B,iEAAiE;IACjE,IAAI,MAAM,IAAI,QAAQ,CAErB;IAED,gFAAgF;IAChF,IAAI,QAAQ,IAAI,kBAAkB,GAAG,SAAS,CAE7C;IAED,6EAA6E;IAC7E,IAAI,WAAW,IAAI,WAAW,GAAG,SAAS,CAEzC;IAED,8DAA8D;IAC9D,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAgBvC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAY3C;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,eAAe,CAUjB"}
@@ -1,8 +1,15 @@
1
1
  export { GameView } from './react/GameView.js';
2
+ export { useGameSession } from './react/useGameSession.js';
3
+ export { useGameSessionStatus } from './react/useGameSessionStatus.js';
4
+ export { createGameLifecycleSource, GameLifecycleProvider, useGameLifecycleSource } from './react/lifecycleSource.js';
5
+ export type { GameLifecycleSource } from './core/session/types.js';
2
6
  export { createGameAssetStore } from './react/assets/decodeSkiaImage.js';
3
7
  export { useGameAssets, stableGroupsKey } from './react/assets/useGameAssets.js';
4
8
  export type { GameAssetsState } from './react/assets/useGameAssets.js';
5
- export { GameWorld2D, viewportTransform } from './react/sprites/GameWorld2D.js';
9
+ export { GameWorld2D, viewportTransform, cameraViewportTransform2D, layerParallaxTransform2D } from './react/sprites/GameWorld2D.js';
10
+ export { GameLayer2D } from './react/camera2d/GameLayer2D.js';
11
+ export { defineGameCamera2D } from './react/camera2d/defineGameCamera2D.js';
12
+ export type { GameCamera2DDefinition } from './react/camera2d/defineGameCamera2D.js';
6
13
  export { Sprite, resolveSpriteFrameRect } from './react/sprites/Sprite.js';
7
14
  export type { SpriteAnimatable, SpriteAnimatableBoolean, SpriteProps } from './react/sprites/Sprite.js';
8
15
  export { GameSprite, spriteFrameNameForClip } from './react/sprites/GameSprite.js';
@@ -16,5 +23,15 @@ export type { AcquireOptions, AssetPipelines, GameAssetStore, NativeImageHandle,
16
23
  export type { GameRendererProps, GameViewProps } from './react/GameView.js';
17
24
  export { GamePointerInput } from './react/GamePointerInput.js';
18
25
  export type { GamePointerInputProps } from './react/GamePointerInput.js';
26
+ export { GameButtonPad, GameButton } from './react/GameButtonPad.js';
27
+ export type { GameButtonPadProps, GameButtonProps, ButtonActionName } from './react/GameButtonPad.js';
19
28
  export type { GamePointerInstrumentation, GameViewInstrumentation } from './react/instrumentation.js';
29
+ export { ParticleView } from './react/particles/ParticleView.js';
30
+ export type { ParticleViewProps } from './react/particles/ParticleView.js';
31
+ export { useParticlePresentation } from './react/particles/useParticlePresentation.js';
32
+ export type { ParticlePresentation } from './react/particles/useParticlePresentation.js';
33
+ export { particleSpriteXform, assertUniformParticleSpriteRatio } from './react/particles/spriteXForm.js';
34
+ export { cameraVisibleWorldBounds, visibleInBounds, PARTICLE_CULL_PADDING } from './react/particles/culling.js';
35
+ export { TileMapLayer2D } from './react/tilemap/TileMapLayer2D.js';
36
+ export type { TileMapLayer2DProps } from './react/tilemap/TileMapLayer2D.js';
20
37
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iCAA8B,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,MAAM,iCAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gCAA6B,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,2BAAwB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,2BAAwB,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,+BAA4B,CAAC;AAChF,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAA6B,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gCAA6B,CAAC;AACtF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oCAAiC,CAAC;AACzC,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,oBAAoB,GACrB,MAAM,oCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAqC,CAAC;AAC/E,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,wCAAqC,CAAC;AAE7C,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAkB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA0B,CAAC;AACtE,YAAY,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,4BAAyB,CAAC"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAA8B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,4BAAyB,CAAC;AACnH,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAsB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iCAA8B,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,MAAM,iCAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gCAA6B,CAAC;AAClI,OAAO,EAAE,WAAW,EAAE,MAAM,iCAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAqC,CAAC;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,wCAAqC,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,2BAAwB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,2BAAwB,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,+BAA4B,CAAC;AAChF,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAA6B,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gCAA6B,CAAC;AACtF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oCAAiC,CAAC;AACzC,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,oBAAoB,GACrB,MAAM,oCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAqC,CAAC;AAC/E,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,wCAAqC,CAAC;AAE7C,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAkB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,0BAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAAuB,CAAC;AACnG,YAAY,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,4BAAyB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAgC,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAgC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA2C,CAAC;AACpF,YAAY,EAAE,oBAAoB,EAAE,MAAM,8CAA2C,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,MAAM,kCAA+B,CAAC;AACtG,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,8BAA2B,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAgC,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAgC,CAAC"}
@@ -1,8 +1,26 @@
1
+ import type { GameEventDescriptor, InferGameEventMap } from '../events/types.js';
1
2
  import type { SceneDefinition } from './types.js';
2
3
  /**
3
4
  * Define a synchronous functional scene while inferring its state, snapshot,
4
5
  * action, and transition types.
5
6
  *
7
+ * To get typed event emission in a standalone scene, pass the same
8
+ * `events` object that will be passed to `defineGame({ events })`:
9
+ *
10
+ * ```ts
11
+ * const events = defineGameEvents({ 'brick-hit': gameEvent<{ id: string }>() });
12
+ * const play = defineScene({
13
+ * actions: ['primary'],
14
+ * emits: ['brick-hit'],
15
+ * events,
16
+ * update: ({ events }) => {
17
+ * events.emit('brick-hit', { id: '1' }); // typed, wrong payload fails
18
+ * },
19
+ * // ...
20
+ * });
21
+ * const game = defineGame({ events, scenes: { play }, initialScene: 'play' });
22
+ * ```
23
+ *
6
24
  * @example
7
25
  * ```ts
8
26
  * const ready = defineScene({
@@ -19,8 +37,10 @@ import type { SceneDefinition } from './types.js';
19
37
  * });
20
38
  * ```
21
39
  */
22
- export declare function defineScene<const TActions extends readonly string[], TState, TSnapshot, const TTransitions extends readonly string[] = []>(definition: Omit<SceneDefinition<TState, TSnapshot, TActions[number], TTransitions[number]>, 'kind' | '__actionType' | '__transitionType' | '__snapshotType' | 'actions' | 'transitions'> & {
40
+ export declare function defineScene<const TActions extends readonly string[], TState, TSnapshot, const TTransitions extends readonly string[] = [], const TEmits extends readonly (keyof InferGameEventMap<TEventDefs> & string)[] = [], const TEventDefs extends Record<string, GameEventDescriptor<unknown>> = Record<string, never>>(definition: Omit<SceneDefinition<TState, TSnapshot, TActions[number], TTransitions[number], TEmits[number], TEventDefs>, 'kind' | '__actionType' | '__transitionType' | '__snapshotType' | '__emitType' | '__eventMapType' | '__eventDefsType' | 'actions' | 'transitions' | 'emits' | 'events'> & {
23
41
  readonly actions: TActions;
24
42
  readonly transitions?: TTransitions;
25
- }): SceneDefinition<TState, TSnapshot, TActions[number], TTransitions[number]>;
43
+ readonly emits?: TEmits;
44
+ readonly events?: TEventDefs;
45
+ }): SceneDefinition<TState, TSnapshot, TActions[number], TTransitions[number], TEmits[number], TEventDefs>;
26
46
  //# sourceMappingURL=defineScene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineScene.d.ts","sourceRoot":"","sources":["../../../../src/scene/defineScene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,KAAK,CAAC,QAAQ,SAAS,SAAS,MAAM,EAAE,EACxC,MAAM,EACN,SAAS,EACT,KAAK,CAAC,YAAY,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,EAEjD,UAAU,EAAE,IAAI,CACd,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAC1E,MAAM,GAAG,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAC5F,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAA;CAAE,GACtE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAK5E"}
1
+ {"version":3,"file":"defineScene.d.ts","sourceRoot":"","sources":["../../../../src/scene/defineScene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,WAAW,CACzB,KAAK,CAAC,QAAQ,SAAS,SAAS,MAAM,EAAE,EACxC,MAAM,EACN,SAAS,EACT,KAAK,CAAC,YAAY,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,EACjD,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,MAAM,iBAAiB,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,EACnF,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAE7F,UAAU,EAAE,IAAI,CACd,eAAe,CACb,MAAM,EACN,SAAS,EACT,QAAQ,CAAC,MAAM,CAAC,EAChB,YAAY,CAAC,MAAM,CAAC,EACpB,MAAM,CAAC,MAAM,CAAC,EACd,UAAU,CACX,EACC,MAAM,GACN,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,SAAS,GACT,aAAa,GACb,OAAO,GACP,QAAQ,CACX,GAAG;IACF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC9B,GACA,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAKxG"}
@@ -1,4 +1,5 @@
1
1
  import type { InputFrame } from '../core/input/types.js';
2
+ import type { GameEventDescriptor, GameEventEmitter, InferGameEventMap } from '../events/types.js';
2
3
  /**
3
4
  * Update-scoped scene transition controls.
4
5
  *
@@ -18,13 +19,15 @@ export interface SceneTransitionController<TTransitionName extends string> {
18
19
  restartScene(): void;
19
20
  }
20
21
  /** Values supplied to a scene for one deterministic simulation tick. */
21
- export interface SceneUpdate<TState, TActionName extends string, TTransitionName extends string> {
22
+ export interface SceneUpdate<TState, TActionName extends string, TTransitionName extends string, TEventDefs extends Record<string, GameEventDescriptor<unknown>> = Record<string, never>, TEmits extends keyof InferGameEventMap<TEventDefs> & string = keyof InferGameEventMap<TEventDefs> & string> {
22
23
  /** The authoritative state produced by the previous tick. */
23
24
  readonly state: Readonly<TState>;
24
25
  /** One immutable semantic input snapshot for this tick. */
25
26
  readonly input: InputFrame<TActionName>;
26
27
  /** Update-scoped transition controls restricted to declared targets. */
27
28
  readonly transition: SceneTransitionController<TTransitionName>;
29
+ /** Update-scoped emitter for declared game events (T13). Invalid after the update returns or throws. */
30
+ readonly events: GameEventEmitter<Pick<InferGameEventMap<TEventDefs>, TEmits>>;
28
31
  /** One-based global simulation tick number. */
29
32
  readonly tick: number;
30
33
  /** One-based tick number within the current scene instance. */
@@ -42,7 +45,7 @@ export interface SceneSnapshotContext<TState> {
42
45
  readonly state: Readonly<TState>;
43
46
  }
44
47
  /** A synchronous functional scene used by the runtime. */
45
- export interface SceneDefinition<TState, TSnapshot, TActionName extends string = never, TTransitionName extends string = never> {
48
+ export interface SceneDefinition<TState, TSnapshot, TActionName extends string = never, TTransitionName extends string = never, TEmits extends string = never, TEventDefs extends Record<string, GameEventDescriptor<unknown>> = Record<string, never>> {
46
49
  /** Internal scene-definition discriminator. */
47
50
  readonly kind: 'gamekit.scene';
48
51
  /** @internal Covariant type witness used to infer presentation snapshots. */
@@ -51,15 +54,32 @@ export interface SceneDefinition<TState, TSnapshot, TActionName extends string =
51
54
  readonly __actionType?: TActionName;
52
55
  /** @internal Type witness used to validate scene transition targets. */
53
56
  readonly __transitionType?: TTransitionName;
57
+ /** @internal Type witness for emitted event names. */
58
+ readonly __emitType?: TEmits;
59
+ /** @internal Type witness for the game event map. */
60
+ readonly __eventMapType?: InferGameEventMap<TEventDefs>;
61
+ /** @internal Type witness for the branded event definitions identity. */
62
+ readonly __eventDefsType?: TEventDefs;
54
63
  /** Semantic input actions this scene may read. */
55
64
  readonly actions: readonly TActionName[];
56
65
  /** Declared scene names this scene may transition to. */
57
66
  readonly transitions?: readonly TTransitionName[];
67
+ /** Declared event names this scene may emit (subset of the game's event map). */
68
+ readonly emits?: readonly TEmits[];
69
+ /** The branded event definitions this scene is bound to (for standalone type safety). */
70
+ readonly events?: TEventDefs;
58
71
  /** Create the scene's initial authoritative state. */
59
72
  readonly create: () => TState;
60
73
  /** Produce the next state for one fixed simulation tick. */
61
- readonly update: (frame: SceneUpdate<TState, TActionName, TTransitionName>) => TState;
62
- /** Extract a compact renderer-specific snapshot from current state. */
74
+ readonly update: (frame: SceneUpdate<TState, TActionName, TTransitionName, TEventDefs, TEmits>) => TState;
75
+ /**
76
+ * Extract a compact renderer-specific snapshot from current state.
77
+ *
78
+ * The snapshot domain is plain records, arrays, and scalars; anything
79
+ * else fails with a `SnapshotDomainError` carrying the key path before
80
+ * publication. Returning a state reference transfers it into immutable
81
+ * snapshot ownership — it is frozen in place.
82
+ */
63
83
  readonly snapshot: (context: SceneSnapshotContext<TState>) => TSnapshot;
64
84
  /** Release scene-owned resources exactly once. */
65
85
  readonly dispose?: (state: Readonly<TState>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scene/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB,CAAC,eAAe,SAAS,MAAM;IACvE;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,YAAY,IAAI,IAAI,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,WAAW,CAAC,MAAM,EAAE,WAAW,SAAS,MAAM,EAAE,eAAe,SAAS,MAAM;IAC7F,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAChE,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,oEAAoE;AACpE,MAAM,WAAW,oBAAoB,CAAC,MAAM;IAC1C,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe,CAC9B,MAAM,EACN,SAAS,EACT,WAAW,SAAS,MAAM,GAAG,KAAK,EAClC,eAAe,SAAS,MAAM,GAAG,KAAK;IAEtC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IAC5C,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,KAAK,MAAM,CAAC;IACtF,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;IACxE,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACtD;AAED,sEAAsE;AACtE,MAAM,MAAM,aAAa,CAAC,MAAM,IAC9B,MAAM,SAAS;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,SAAS,CAAA;CAAE,GAAG,SAAS,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scene/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAiB,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB,CAAC,eAAe,SAAS,MAAM;IACvE;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,YAAY,IAAI,IAAI,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,WAAW,CAC1B,MAAM,EACN,WAAW,SAAS,MAAM,EAC1B,eAAe,SAAS,MAAM,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACvF,MAAM,SAAS,MAAM,iBAAiB,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,GAAG,MAAM;IAE1G,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAChE,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/E,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,oEAAoE;AACpE,MAAM,WAAW,oBAAoB,CAAC,MAAM;IAC1C,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe,CAC9B,MAAM,EACN,SAAS,EACT,WAAW,SAAS,MAAM,GAAG,KAAK,EAClC,eAAe,SAAS,MAAM,GAAG,KAAK,EACtC,MAAM,SAAS,MAAM,GAAG,KAAK,EAC7B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvF,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IAC5C,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,yEAAyE;IACzE,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IACtC,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,CACf,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,KACzE,MAAM,CAAC;IACZ;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;IACxE,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACtD;AAED,sEAAsE;AACtE,MAAM,MAAM,aAAa,CAAC,MAAM,IAC9B,MAAM,SAAS;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,SAAS,CAAA;CAAE,GAAG,SAAS,GAAG,KAAK,CAAC"}
@@ -4,14 +4,24 @@
4
4
  * Pure, allocation-free, worklet-compatible frame selection. The same clip
5
5
  * metadata and elapsed time always select the same frame, so equivalent
6
6
  * game time produces identical presentation at 30/60/90/120 Hz.
7
+ *
8
+ * Single-contract rule (GS-ANIMATION-01): every renderer path resolves
9
+ * frames through these helpers — never duplicated arithmetic. Negative
10
+ * elapsed clamps uniformly (loops wrap, one-shots pin to frame zero);
11
+ * non-finite elapsed, empty clips, and non-positive durations fail clearly
12
+ * instead of masking invalid data as frame zero. Unknown clip names throw
13
+ * a plain `[ASSET_UNKNOWN_CLIP]` error: the UI-reachable call graph must
14
+ * stay free of error-class construction so failure branches execute on the
15
+ * UI runtime exactly as they do headlessly (GS-ANIMATION-02).
7
16
  */
8
17
  import type { SpriteClip } from '../assets/types.js';
9
18
  /**
10
19
  * Select the frame index for `elapsedMs` of playback.
11
20
  *
12
21
  * Loop clips wrap with modulo — the boundary frame is never duplicated and
13
- * no zero-length boundary frame exists. One-shot clips clamp to their final
14
- * frame; completion is reported separately.
22
+ * no zero-length boundary frame exists; negative elapsed wraps into range.
23
+ * One-shot clips clamp to `[0, frameCount - 1]`; completion is reported
24
+ * separately by the playback state.
15
25
  */
16
26
  export declare function sampleSpriteClipFrame(clip: SpriteClip, elapsedMs: number): number;
17
27
  /**
@@ -21,4 +31,18 @@ export declare function sampleSpriteClipFrame(clip: SpriteClip, elapsedMs: numbe
21
31
  export declare function sampleSpriteClipFrameName(clip: SpriteClip, elapsedMs: number): string;
22
32
  /** Total clip duration in milliseconds (one-shot: its full timeline). */
23
33
  export declare function spriteClipDurationMs(clip: SpriteClip): number;
34
+ /**
35
+ * Select the frame name for a clip + elapsed time (loop/once semantics).
36
+ *
37
+ * Reads the descriptor's animation table with the single sampler contract
38
+ * above. An absent clip table entry is an invalid clip — it throws instead
39
+ * of returning the clip string as if it were a frame name. Absent
40
+ * *selection* (no clip chosen yet) is distinct: callers keep that path and
41
+ * present nothing without calling this helper.
42
+ */
43
+ export declare function spriteFrameNameForClip(animations: Readonly<Record<string, {
44
+ readonly frames: readonly string[];
45
+ readonly frameDurationMs: number;
46
+ readonly mode: 'loop' | 'once';
47
+ }>>, clip: string, elapsedMs: number): string;
24
48
  //# sourceMappingURL=sampleSpriteClip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampleSpriteClip.d.ts","sourceRoot":"","sources":["../../../../src/sprites/sampleSpriteClip.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"sampleSpriteClip.d.ts","sourceRoot":"","sources":["../../../../src/sprites/sampleSpriteClip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAiB,CAAC;AA4BlD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAcjF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAG7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,QAAQ,CAClB,MAAM,CACJ,MAAM,EACN;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC,CACF,CACF,EACD,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR"}
@@ -15,12 +15,11 @@ export interface SpriteAnimationState<TClipName extends string = string> {
15
15
  /** The clip names of a sprite-sheet descriptor (works through the manifest brand). */
16
16
  export type SpriteClipNames<TDescriptor extends SpriteSheetDescriptor> = Extract<keyof TDescriptor['animations'], string>;
17
17
  /**
18
- * Start playback of `clip` from its beginning. The clip name is preserved
19
- * as a string literal in the returned state; unknown clips are rejected at
20
- * runtime (the manifest descriptor keeps the sheet-level frame and clip
21
- * names literal via the spriteSheet contract).
18
+ * Start playback of `clip` from its beginning. The clip name is constrained
19
+ * to the descriptor's animation keys, so a misspelled clip fails compilation;
20
+ * untyped callers still hit the runtime check below.
22
21
  */
23
- export declare function startSpriteAnimation<TClipName extends string>(descriptor: SpriteSheetDescriptor, clip: TClipName): SpriteAnimationState<TClipName>;
22
+ export declare function startSpriteAnimation<TDescriptor extends SpriteSheetDescriptor>(descriptor: TDescriptor, clip: SpriteClipNames<TDescriptor>): SpriteAnimationState<SpriteClipNames<TDescriptor>>;
24
23
  /**
25
24
  * Advance playback by `deltaSeconds` of fixed-step game time.
26
25
  *
@@ -28,12 +27,12 @@ export declare function startSpriteAnimation<TClipName extends string>(descripto
28
27
  * clearly. Loop clips keep their elapsed time bounded within one timeline
29
28
  * (modulo), so arbitrarily large deltas cost constant arithmetic.
30
29
  */
31
- export declare function advanceSpriteAnimation<TClipName extends string>(descriptor: SpriteSheetDescriptor, state: SpriteAnimationState<TClipName>, deltaSeconds: number): SpriteAnimationState<TClipName>;
30
+ export declare function advanceSpriteAnimation<TDescriptor extends SpriteSheetDescriptor, TClip extends SpriteClipNames<TDescriptor>>(descriptor: TDescriptor, state: SpriteAnimationState<TClip>, deltaSeconds: number): SpriteAnimationState<TClip>;
32
31
  /**
33
32
  * Switch playback to `clip`, restarting it from the beginning. The clip
34
33
  * name is typed against the descriptor's animation table.
35
34
  */
36
- export declare function playSpriteAnimation<TClipName extends string>(descriptor: SpriteSheetDescriptor, state: SpriteAnimationState<TClipName>, clip: TClipName): SpriteAnimationState<TClipName>;
35
+ export declare function playSpriteAnimation<TDescriptor extends SpriteSheetDescriptor, TClip extends SpriteClipNames<TDescriptor>>(descriptor: TDescriptor, state: SpriteAnimationState<TClip>, clip: SpriteClipNames<TDescriptor>): SpriteAnimationState<SpriteClipNames<TDescriptor>>;
37
36
  /** Pause playback; `advance` becomes a no-op while paused. */
38
37
  export declare function pauseSpriteAnimation<TClipName extends string>(state: SpriteAnimationState<TClipName>): SpriteAnimationState<TClipName>;
39
38
  /** Resume playback from the paused position. */
@@ -1 +1 @@
1
- {"version":3,"file":"spriteAnimationState.d.ts","sourceRoot":"","sources":["../../../../src/sprites/spriteAnimationState.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAiB,CAAC;AAG7D,wDAAwD;AACxD,MAAM,WAAW,oBAAoB,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACrE,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAaD,sFAAsF;AACtF,MAAM,MAAM,eAAe,CAAC,WAAW,SAAS,qBAAqB,IAAI,OAAO,CAC9E,MAAM,WAAW,CAAC,YAAY,CAAC,EAC/B,MAAM,CACP,CAAC;AAmBF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,MAAM,EAC3D,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,SAAS,GACd,oBAAoB,CAAC,SAAS,CAAC,CAUjC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,SAAS,MAAM,EAC7D,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,EACtC,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAAC,SAAS,CAAC,CAkBjC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,SAAS,MAAM,EAC1D,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,EACtC,IAAI,EAAE,SAAS,GACd,oBAAoB,CAAC,SAAS,CAAC,CAajC;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,MAAM,EAC3D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAGjC;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,CAAC,SAAS,SAAS,MAAM,EAC5D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAGjC;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,MAAM,EAC3D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAGjC;AAED,8CAA8C;AAC9C,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,MAAM,EAC9D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,EACtC,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAAC,SAAS,CAAC,CAIjC"}
1
+ {"version":3,"file":"spriteAnimationState.d.ts","sourceRoot":"","sources":["../../../../src/sprites/spriteAnimationState.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAiB,CAAC;AAG7D,wDAAwD;AACxD,MAAM,WAAW,oBAAoB,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACrE,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAaD,sFAAsF;AACtF,MAAM,MAAM,eAAe,CAAC,WAAW,SAAS,qBAAqB,IAAI,OAAO,CAC9E,MAAM,WAAW,CAAC,YAAY,CAAC,EAC/B,MAAM,CACP,CAAC;AAkBF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,SAAS,qBAAqB,EAC5E,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,GACjC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CASpD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,SAAS,qBAAqB,EACzC,KAAK,SAAS,eAAe,CAAC,WAAW,CAAC,EAE1C,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAClC,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAAC,KAAK,CAAC,CAiB7B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,SAAS,qBAAqB,EACzC,KAAK,SAAS,eAAe,CAAC,WAAW,CAAC,EAE1C,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAClC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,GACjC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAYpD;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,MAAM,EAC3D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAEjC;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,CAAC,SAAS,SAAS,MAAM,EAC5D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAEjC;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,MAAM,EAC3D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACrC,oBAAoB,CAAC,SAAS,CAAC,CAEjC;AAED,8CAA8C;AAC9C,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,MAAM,EAC9D,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,EACtC,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAAC,SAAS,CAAC,CAGjC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Subpath entry for `rn-gamekit/sprites`.
3
+ *
4
+ * Deterministic sprite-clip sampling and immutable playback-state helpers.
5
+ * React components (Sprite, GameSprite, SpriteBatch) remain in `rn-gamekit/react`.
6
+ */
7
+ export { sampleSpriteClipFrame, sampleSpriteClipFrameName, spriteClipDurationMs, spriteFrameNameForClip, } from './sprites/sampleSpriteClip.js';
8
+ export { advanceSpriteAnimation, pauseSpriteAnimation, playSpriteAnimation, resetSpriteAnimation, resumeSpriteAnimation, setSpriteAnimationSpeed, startSpriteAnimation, } from './sprites/spriteAnimationState.js';
9
+ export type { SpriteAnimationState, SpriteClipNames } from './sprites/spriteAnimationState.js';
10
+ //# sourceMappingURL=sprites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprites.d.ts","sourceRoot":"","sources":["../../../src/sprites.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,mCAAgC,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mCAAgC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { GameStorageAdapter } from '../types.js';
2
+ export type LoadedAsyncStorage = {
3
+ getItem(key: string): Promise<string | null>;
4
+ setItem(key: string, value: string): Promise<void>;
5
+ removeItem(key: string): Promise<void>;
6
+ };
7
+ type Loader = () => Promise<LoadedAsyncStorage>;
8
+ export declare function __setAsyncStorageLoader(fn: Loader | null): void;
9
+ export declare function __getAsyncStorageLoader(): Loader | null;
10
+ /**
11
+ * RN adapter backed by AsyncStorage.
12
+ *
13
+ * Importing `rn-gamekit/storage` does not eagerly import AsyncStorage —
14
+ * the dynamic import happens on the first read/write/remove.
15
+ */
16
+ export declare function createGameStorageAdapter(): GameStorageAdapter;
17
+ export {};
18
+ //# sourceMappingURL=asyncStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncStorage.d.ts","sourceRoot":"","sources":["../../../../../src/storage/adapters/asyncStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAU,CAAC;AAGnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,KAAK,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAGhD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE/D;AAED,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAEvD;AA6BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAuB7D"}
@@ -0,0 +1,16 @@
1
+ import type { GameStorageAdapter } from '../types.js';
2
+ /**
3
+ * In-memory adapter for tests and apps that own storage elsewhere.
4
+ * Each instance owns its map.
5
+ */
6
+ export declare function createMemoryStorageAdapter(initial?: Record<string, string>): GameStorageAdapter;
7
+ /**
8
+ * Programmable failure adapter for tests — wraps another adapter and injects failures.
9
+ */
10
+ export declare function createFailingStorageAdapter(inner: GameStorageAdapter, opts?: {
11
+ failRead?: (key: string) => Error | null;
12
+ failWrite?: (key: string, value: string) => Error | null;
13
+ failRemove?: (key: string) => Error | null;
14
+ delayMs?: number;
15
+ }): GameStorageAdapter;
16
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../../src/storage/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAU,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAc/F;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,EACzB,IAAI,GAAE;IACJ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC;IACzD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,kBAAkB,CAwBpB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * V1 storage errors — stable codes, operation, namespace/slot, schema context,
3
+ * exact path where relevant, and original cause.
4
+ */
5
+ export type GameStorageErrorCode = 'INVALID_NAMESPACE' | 'INVALID_SLOT' | 'INVALID_SCHEMA_ID' | 'INVALID_SCHEMA_VERSION' | 'INVALID_MIGRATION' | 'UNSUPPORTED_VALUE' | 'SERIALIZATION_FAILED' | 'SIZE_EXCEEDED' | 'DEPTH_EXCEEDED' | 'BACKEND_READ_FAILED' | 'BACKEND_WRITE_FAILED' | 'BACKEND_REMOVE_FAILED' | 'CORRUPT_ENVELOPE' | 'SCHEMA_ID_MISMATCH' | 'FUTURE_VERSION' | 'MISSING_MIGRATION' | 'MIGRATION_FAILED' | 'VALIDATION_FAILED' | 'DISPOSED';
6
+ export type GameStorageOperation = 'load' | 'save' | 'remove' | 'delete' | 'flush' | 'dispose' | 'validate' | 'migrate' | 'serialize' | 'parse';
7
+ export declare class GameStorageError extends Error {
8
+ readonly name = "GameStorageError";
9
+ readonly code: GameStorageErrorCode;
10
+ readonly operation: GameStorageOperation | undefined;
11
+ readonly namespace: string | undefined;
12
+ readonly slot: string | undefined;
13
+ readonly schemaId: string | undefined;
14
+ readonly schemaVersion: number | undefined;
15
+ readonly path: string | undefined;
16
+ readonly cause: unknown | undefined;
17
+ constructor(message: string, options: {
18
+ code: GameStorageErrorCode;
19
+ operation?: GameStorageOperation | undefined;
20
+ namespace?: string | undefined;
21
+ slot?: string | undefined;
22
+ schemaId?: string | undefined;
23
+ schemaVersion?: number | undefined;
24
+ path?: string | undefined;
25
+ cause?: unknown | undefined;
26
+ });
27
+ }
28
+ export declare function storageError(message: string, code: GameStorageErrorCode, opts?: {
29
+ operation?: GameStorageOperation | undefined;
30
+ namespace?: string | undefined;
31
+ slot?: string | undefined;
32
+ schemaId?: string | undefined;
33
+ schemaVersion?: number | undefined;
34
+ path?: string | undefined;
35
+ cause?: unknown | undefined;
36
+ }): GameStorageError;
37
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/storage/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB,cAAc,GACd,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,sBAAsB,GACtB,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,sBAAsB,GACtB,uBAAuB,GACvB,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,UAAU,CAAC;AAEf,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhJ,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;IAE5C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,SAAkB,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;gBAG3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,IAAI,EAAE,oBAAoB,CAAC;QAC3B,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC7B;CAYJ;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,oBAAoB,EAC1B,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACxB,GACL,gBAAgB,CAWlB"}
@@ -0,0 +1,11 @@
1
+ export { GameStorageError } from './errors.js';
2
+ export type { GameStorageErrorCode, GameStorageOperation } from './errors.js';
3
+ export { defineGameSave } from './schema.js';
4
+ export { createGameSaveStore } from './store.js';
5
+ export { createMemoryStorageAdapter } from './adapters/memory.js';
6
+ export { createGameStorageAdapter } from './adapters/asyncStorage.js';
7
+ export { __setAsyncStorageLoader, __getAsyncStorageLoader } from './adapters/asyncStorage.js';
8
+ export type { GameSaveSchema, GameStorageAdapter, StoredGameEnvelope, GameSaveLoadResult, GameSaveLoadStatus, CreateGameSaveStoreOptions, GameSaveStore, } from './types.js';
9
+ export { STORAGE_LIMITS } from './types.js';
10
+ export { STORAGE_ENVELOPE_FORMAT } from './serialization.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAU,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAU,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAU,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAmB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,4BAAyB,CAAC;AAC3F,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GACd,MAAM,YAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAiB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { GameSaveSchema } from './types.js';
2
+ /**
3
+ * Define a versioned game save schema.
4
+ *
5
+ * Id/version/migrations are validated immediately. `createDefault` and
6
+ * `validate` are stored as-is — they run later per load/save.
7
+ */
8
+ export declare function defineGameSave<TData>(options: {
9
+ id: string;
10
+ version: number;
11
+ createDefault: () => TData;
12
+ validate: (value: unknown) => TData;
13
+ migrations?: Readonly<Record<number, (value: unknown) => unknown>>;
14
+ }): GameSaveSchema<TData>;
15
+ export declare function createDefaultData<TData>(schema: GameSaveSchema<TData>): TData;
16
+ export declare function validateCurrentData<TData>(schema: GameSaveSchema<TData>, value: unknown, path?: string): TData;
17
+ export declare function migratePayload<TData>(schema: GameSaveSchema<TData>, storedVersion: number, payload: unknown): {
18
+ data: unknown;
19
+ fromVersion: number;
20
+ toVersion: number;
21
+ };
22
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/storage/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAI9C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,KAAK,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;IACpC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;CACpE,GAAG,cAAc,CAAC,KAAK,CAAC,CAuBxB;AAuBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAkB7E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,SAAS,GAAG,KAAK,CAgB9G;AAED,wBAAgB,cAAc,CAAC,KAAK,EAClC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAyC3D"}
@@ -0,0 +1,23 @@
1
+ import { type StoredGameEnvelope } from './types.js';
2
+ /**
3
+ * Bounded plain-data clone + validation for storage payloads.
4
+ *
5
+ * Mirrors the strictness of event payloads but with storage-sized limits.
6
+ * Rejects: functions, symbols, bigint, non-finite numbers, cycles,
7
+ * sparse holes, accessors, non-enumerable, unsafe prototype keys,
8
+ * array subclasses, class instances, React elements, thenables.
9
+ */
10
+ export declare function cloneAndValidatePlainData(value: unknown, basePath?: string): unknown;
11
+ /**
12
+ * Exact UTF-8 byte length (GS-STORAGE-03): the single routine for every
13
+ * storage size check. TextEncoder is exact everywhere it exists (Node,
14
+ * browsers, modern Hermes); the scalar fallback below is bit-exact too,
15
+ * including unpaired surrogates (which encode as U+FFFD, 3 bytes).
16
+ */
17
+ export declare function utf8ByteLength(str: string): number;
18
+ /** Bit-exact scalar UTF-8 length for runtimes without TextEncoder. */
19
+ export declare function utf8ByteLengthScalar(str: string): number;
20
+ export declare function serializeEnvelope(envelope: StoredGameEnvelope): string;
21
+ export declare function parseEnvelope(raw: string): StoredGameEnvelope;
22
+ export declare const STORAGE_ENVELOPE_FORMAT: "rn-gamekit.save";
23
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../../../src/storage/serialization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,YAAS,CAAC;AAIlE;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAY,GAAG,OAAO,CA0IvF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBxD;AAMD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAetE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAiC7D;AAED,eAAO,MAAM,uBAAuB,mBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CreateGameSaveStoreOptions, GameSaveStore } from './types.js';
2
+ export declare function createGameSaveStore<TData>(options: CreateGameSaveStoreOptions<TData>): GameSaveStore<TData>;
3
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/storage/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAsB,aAAa,EAAE,MAAM,YAAS,CAAC;AAO7F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAmX3G"}