rn-gamekit 0.1.0 → 0.2.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 (601) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +95 -14
  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 +94 -4
  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,16 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * V1 storage contracts — game-owned projections, engine envelope, adapter.
5
+ */
6
+
7
+ export const STORAGE_LIMITS = {
8
+ MAX_SERIALIZED_BYTES: 262_144,
9
+ // 256 KiB per slot
10
+ MAX_DEPTH: 16,
11
+ MAX_NODES: 4096,
12
+ MAX_ARRAY_LENGTH: 1024,
13
+ MAX_OBJECT_FIELDS: 1024,
14
+ MAX_STRING_LENGTH: 16_384
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["STORAGE_LIMITS","MAX_SERIALIZED_BYTES","MAX_DEPTH","MAX_NODES","MAX_ARRAY_LENGTH","MAX_OBJECT_FIELDS","MAX_STRING_LENGTH"],"sourceRoot":"../../../src","sources":["storage/types.ts"],"mappings":";;AAAA;AACA;AACA;;AAkEA,OAAO,MAAMA,cAAc,GAAG;EAC5BC,oBAAoB,EAAE,OAAO;EAAE;EAC/BC,SAAS,EAAE,EAAE;EACbC,SAAS,EAAE,IAAI;EACfC,gBAAgB,EAAE,IAAI;EACtBC,iBAAiB,EAAE,IAAI;EACvBC,iBAAiB,EAAE;AACrB,CAAU","ignoreList":[]}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ import { GameStorageError, storageError } from "./errors.js";
4
+ const SCHEMA_ID_RE = /^[a-z0-9]+(?:[._-][a-z0-9]+)*$/i;
5
+ const NAMESPACE_RE = /^[a-zA-Z0-9._-]+$/;
6
+ const SLOT_RE = /^[a-zA-Z0-9._-]+$/;
7
+ export function validateSchemaId(id) {
8
+ if (typeof id !== 'string' || id.length === 0 || id.length > 128 || id.includes('\0')) {
9
+ throw storageError(`schema id must be a non-empty string 1..128 without null bytes`, 'INVALID_SCHEMA_ID', {
10
+ schemaId: String(id)
11
+ });
12
+ }
13
+ if (!SCHEMA_ID_RE.test(id)) {
14
+ throw storageError(`schema id "${id}" must be namespaced (e.g. com.example.game.save)`, 'INVALID_SCHEMA_ID', {
15
+ schemaId: id
16
+ });
17
+ }
18
+ if (id.startsWith('.') || id.endsWith('.') || id.includes('..')) {
19
+ throw storageError(`schema id "${id}" has invalid dot placement`, 'INVALID_SCHEMA_ID', {
20
+ schemaId: id
21
+ });
22
+ }
23
+ }
24
+ export function validateVersion(version) {
25
+ if (!Number.isSafeInteger(version) || version < 1) {
26
+ throw storageError(`schema version must be a positive safe integer`, 'INVALID_SCHEMA_VERSION', {
27
+ schemaVersion: version
28
+ });
29
+ }
30
+ }
31
+ export function validateNamespace(namespace) {
32
+ if (typeof namespace !== 'string' || namespace.length === 0 || namespace.length > 64 || namespace.includes('\0')) {
33
+ throw storageError(`namespace must be a non-empty string 1..64`, 'INVALID_NAMESPACE', {
34
+ namespace
35
+ });
36
+ }
37
+ if (!NAMESPACE_RE.test(namespace)) {
38
+ throw storageError(`namespace "${namespace}" contains invalid characters`, 'INVALID_NAMESPACE', {
39
+ namespace
40
+ });
41
+ }
42
+ }
43
+ export function validateSlot(slot) {
44
+ if (typeof slot !== 'string' || slot.length === 0 || slot.length > 64 || slot.includes('\0')) {
45
+ throw storageError(`slot must be a non-empty string 1..64`, 'INVALID_SLOT', {
46
+ slot
47
+ });
48
+ }
49
+ if (!SLOT_RE.test(slot)) {
50
+ throw storageError(`slot "${slot}" contains invalid characters`, 'INVALID_SLOT', {
51
+ slot
52
+ });
53
+ }
54
+ }
55
+ export function validateMigrations(migrations, currentVersion) {
56
+ if (migrations === null || typeof migrations !== 'object' || Array.isArray(migrations)) {
57
+ throw new GameStorageError('migrations must be a plain record', {
58
+ code: 'INVALID_MIGRATION'
59
+ });
60
+ }
61
+ const proto = Object.getPrototypeOf(migrations);
62
+ if (proto !== Object.prototype && proto !== null) {
63
+ throw new GameStorageError('migrations must be a plain record', {
64
+ code: 'INVALID_MIGRATION'
65
+ });
66
+ }
67
+ for (const [rawKey, fn] of Object.entries(migrations)) {
68
+ const n = Number(rawKey);
69
+ // GS-STORAGE-03: keys must be canonical — '01' and '1e0' normalize to
70
+ // 1 but would never be found by the numeric lookup, and two spellings
71
+ // of one version must not both be accepted (the canonicality check
72
+ // rejects every non-canonical spelling, so each version appears once).
73
+ if (!Number.isSafeInteger(n) || n < 1 || n >= currentVersion || String(n) !== rawKey) {
74
+ throw storageError(`migration key "${rawKey}" must be a canonical integer 1..${currentVersion - 1}`, 'INVALID_MIGRATION', {
75
+ path: `migrations.${rawKey}`
76
+ });
77
+ }
78
+ if (typeof fn !== 'function') {
79
+ throw storageError(`migration ${n} must be a function`, 'INVALID_MIGRATION', {
80
+ path: `migrations.${n}`
81
+ });
82
+ }
83
+ }
84
+ }
85
+ export function storageKey(namespace, slot) {
86
+ // GS-STORAGE-01: length-prefixed tuple — dots, slashes, and colons
87
+ // inside names can never collide across pairs. Format-versioned so
88
+ // future schemes route without guessing.
89
+ return `rn-gamekit.storage/v2/${namespace.length}:${namespace}/${slot.length}:${slot}`;
90
+ }
91
+
92
+ /**
93
+ * Recovery/compatibility policy (GS-STORAGE-01, preview release):
94
+ *
95
+ * - Writes go to v2 keys only. Reads try v2, then fall back to the legacy
96
+ * dotted key, so pre-upgrade records load without any rewrite.
97
+ * - The first v2 save for a slot lazily migrates it; no blanket rewrite
98
+ * ever runs, and legacy records are never deleted after an ambiguous
99
+ * read (a legacy key cannot identify which pair wrote it).
100
+ * - `remove` deletes both the v2 and legacy keys. Under v1, colliding
101
+ * pairs already shared one record (shared fate on delete); v2 converges
102
+ * to independence as each pair saves. A pair that never saves under v2
103
+ * keeps reading its legacy record until it does.
104
+ * - A legacy collision (`('game.a','b')` vs `('game','a.b')`) cannot be
105
+ * disambiguated from the key alone: both pairs read the same heritage
106
+ * record, exactly as v1 behaved. New writes never collide.
107
+ */
108
+ export function legacyStorageKey(namespace, slot) {
109
+ return `rn-gamekit.storage.${namespace}.${slot}`;
110
+ }
111
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GameStorageError","storageError","SCHEMA_ID_RE","NAMESPACE_RE","SLOT_RE","validateSchemaId","id","length","includes","schemaId","String","test","startsWith","endsWith","validateVersion","version","Number","isSafeInteger","schemaVersion","validateNamespace","namespace","validateSlot","slot","validateMigrations","migrations","currentVersion","Array","isArray","code","proto","Object","getPrototypeOf","prototype","rawKey","fn","entries","n","path","storageKey","legacyStorageKey"],"sourceRoot":"../../../src","sources":["storage/validation.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export * from "./storage/index.js";
4
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["storage.ts"],"mappings":";;AAAA,cAAc,oBAAiB","ignoreList":[]}
@@ -54,4 +54,8 @@ export class ManualFrameDriver {
54
54
  callback(timestampMs);
55
55
  }
56
56
  }
57
+
58
+ // Test-only tilemap chunk-read instrumentation (T16-RF4): intentionally NOT
59
+ // re-exported from rn-gamekit/tilemap.
60
+ export { __resetChunkReadStats, __chunkReadCount } from "./tilemap/chunkStats.js";
57
61
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createGameSessionWithDriver","createAnimationFrameDriver","ManualFrameDriver","callbacks","Map","allCallbacks","nextHandle","pendingCount","size","requestFrame","callback","handle","set","cancelFrame","delete","fireNext","timestampMs","next","entries","done","Error","value","fireCancelled","get"],"sourceRoot":"../../src","sources":["testing.ts"],"mappings":";;AAAA,SAASA,2BAA2B,QAAQ,qCAAkC;AAC9E,SAASC,0BAA0B,QAAQ,uBAAoB;AAI/D,SAASA,0BAA0B,EAAED,2BAA2B;AAGhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,iBAAiB,CAAwB;EAC3C,CAACC,SAAS,GAAG,IAAIC,GAAG,CAAwC,CAAC;EAC7D,CAACC,YAAY,GAAG,IAAID,GAAG,CAAwC,CAAC;EACzE,CAACE,UAAU,GAAG,CAAC;;EAEf;EACA,IAAIC,YAAYA,CAAA,EAAW;IACzB,OAAO,IAAI,CAAC,CAACJ,SAAS,CAACK,IAAI;EAC7B;EAEAC,YAAYA,CAACC,QAAuC,EAAe;IACjE,MAAMC,MAAM,GAAG,IAAI,CAAC,CAACL,UAAU;IAC/B,IAAI,CAAC,CAACA,UAAU,IAAI,CAAC;IACrB,IAAI,CAAC,CAACH,SAAS,CAACS,GAAG,CAACD,MAAM,EAAED,QAAQ,CAAC;IACrC,IAAI,CAAC,CAACL,YAAY,CAACO,GAAG,CAACD,MAAM,EAAED,QAAQ,CAAC;IACxC,OAAOC,MAAM;EACf;EAEAE,WAAWA,CAACF,MAAmB,EAAQ;IACrC,IAAI,CAAC,CAACR,SAAS,CAACW,MAAM,CAACH,MAAM,CAAC;EAChC;;EAEA;EACAI,QAAQA,CAACC,WAAmB,EAAe;IACzC,MAAMC,IAAI,GAAG,IAAI,CAAC,CAACd,SAAS,CAACe,OAAO,CAAC,CAAC,CAACD,IAAI,CAAC,CAAC;IAC7C,IAAIA,IAAI,CAACE,IAAI,EAAE;MACb,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IACxC;IACA,MAAM,CAACT,MAAM,EAAED,QAAQ,CAAC,GAAGO,IAAI,CAACI,KAAK;IACrC,IAAI,CAAC,CAAClB,SAAS,CAACW,MAAM,CAACH,MAAM,CAAC;IAC9BD,QAAQ,CAACM,WAAW,CAAC;IACrB,OAAOL,MAAM;EACf;;EAEA;AACF;AACA;AACA;EACEW,aAAaA,CAACX,MAAmB,EAAEK,WAAmB,EAAQ;IAC5D,MAAMN,QAAQ,GAAG,IAAI,CAAC,CAACL,YAAY,CAACkB,GAAG,CAACZ,MAAM,CAAC;IAC/C,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIU,KAAK,CAAC,yBAAyBT,MAAM,EAAE,CAAC;IACpD;IACAD,QAAQ,CAACM,WAAW,CAAC;EACvB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["createGameSessionWithDriver","createAnimationFrameDriver","ManualFrameDriver","callbacks","Map","allCallbacks","nextHandle","pendingCount","size","requestFrame","callback","handle","set","cancelFrame","delete","fireNext","timestampMs","next","entries","done","Error","value","fireCancelled","get","__resetChunkReadStats","__chunkReadCount"],"sourceRoot":"../../src","sources":["testing.ts"],"mappings":";;AAAA,SAASA,2BAA2B,QAAQ,qCAAkC;AAC9E,SAASC,0BAA0B,QAAQ,uBAAoB;AAI/D,SAASA,0BAA0B,EAAED,2BAA2B;AAGhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,iBAAiB,CAAwB;EAC3C,CAACC,SAAS,GAAG,IAAIC,GAAG,CAAwC,CAAC;EAC7D,CAACC,YAAY,GAAG,IAAID,GAAG,CAAwC,CAAC;EACzE,CAACE,UAAU,GAAG,CAAC;;EAEf;EACA,IAAIC,YAAYA,CAAA,EAAW;IACzB,OAAO,IAAI,CAAC,CAACJ,SAAS,CAACK,IAAI;EAC7B;EAEAC,YAAYA,CAACC,QAAuC,EAAe;IACjE,MAAMC,MAAM,GAAG,IAAI,CAAC,CAACL,UAAU;IAC/B,IAAI,CAAC,CAACA,UAAU,IAAI,CAAC;IACrB,IAAI,CAAC,CAACH,SAAS,CAACS,GAAG,CAACD,MAAM,EAAED,QAAQ,CAAC;IACrC,IAAI,CAAC,CAACL,YAAY,CAACO,GAAG,CAACD,MAAM,EAAED,QAAQ,CAAC;IACxC,OAAOC,MAAM;EACf;EAEAE,WAAWA,CAACF,MAAmB,EAAQ;IACrC,IAAI,CAAC,CAACR,SAAS,CAACW,MAAM,CAACH,MAAM,CAAC;EAChC;;EAEA;EACAI,QAAQA,CAACC,WAAmB,EAAe;IACzC,MAAMC,IAAI,GAAG,IAAI,CAAC,CAACd,SAAS,CAACe,OAAO,CAAC,CAAC,CAACD,IAAI,CAAC,CAAC;IAC7C,IAAIA,IAAI,CAACE,IAAI,EAAE;MACb,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IACxC;IACA,MAAM,CAACT,MAAM,EAAED,QAAQ,CAAC,GAAGO,IAAI,CAACI,KAAK;IACrC,IAAI,CAAC,CAAClB,SAAS,CAACW,MAAM,CAACH,MAAM,CAAC;IAC9BD,QAAQ,CAACM,WAAW,CAAC;IACrB,OAAOL,MAAM;EACf;;EAEA;AACF;AACA;AACA;EACEW,aAAaA,CAACX,MAAmB,EAAEK,WAAmB,EAAQ;IAC5D,MAAMN,QAAQ,GAAG,IAAI,CAAC,CAACL,YAAY,CAACkB,GAAG,CAACZ,MAAM,CAAC;IAC/C,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIU,KAAK,CAAC,yBAAyBT,MAAM,EAAE,CAAC;IACpD;IACAD,QAAQ,CAACM,WAAW,CAAC;EACvB;AACF;;AAEA;AACA;AACA,SAASQ,qBAAqB,EAAEC,gBAAgB,QAAQ,yBAAsB","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Test-only chunk-read instrumentation (T16-F6/T16-RF4).
5
+ *
6
+ * Lives OUTSIDE the public `rn-gamekit/tilemap` entry: the counters are
7
+ * re-exported only through the `rn-gamekit/testing` subpath so published
8
+ * diagnostics never leak double-underscore seams into app code.
9
+ */
10
+
11
+ let chunkReads = 0;
12
+
13
+ /** Internal: record one chunk-region lookup. */
14
+ export function recordChunkRead() {
15
+ chunkReads += 1;
16
+ }
17
+
18
+ /** Test-only: reset the chunk-visit counter. */
19
+ export function __resetChunkReadStats() {
20
+ chunkReads = 0;
21
+ }
22
+
23
+ /** Test-only: number of chunk lookups since the last reset. */
24
+ export function __chunkReadCount() {
25
+ return chunkReads;
26
+ }
27
+ //# sourceMappingURL=chunkStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["chunkReads","recordChunkRead","__resetChunkReadStats","__chunkReadCount"],"sourceRoot":"../../../src","sources":["tilemap/chunkStats.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIA,UAAU,GAAG,CAAC;;AAElB;AACA,OAAO,SAASC,eAAeA,CAAA,EAAS;EACtCD,UAAU,IAAI,CAAC;AACjB;;AAEA;AACA,OAAO,SAASE,qBAAqBA,CAAA,EAAS;EAC5CF,UAAU,GAAG,CAAC;AAChB;;AAEA;AACA,OAAO,SAASG,gBAAgBA,CAAA,EAAW;EACzC,OAAOH,UAAU;AACnB","ignoreList":[]}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+
3
+ import { tileError } from "./errors.js";
4
+ import { recordChunkRead } from "./chunkStats.js";
5
+
6
+ /** Frozen internal chunk size in cells (both axes). T16.0 contract. */
7
+ export const TILE_CHUNK_SIZE = 16;
8
+
9
+ /**
10
+ * Maximum cells per layer (GS-TILE-04). The per-axis bound alone permits
11
+ * 8192x8192 = 67M cells per layer (~0.5GB dense data plus index copies),
12
+ * so total authored cells are capped at 2048x2048 worth — far above real
13
+ * levels, far below the footgun.
14
+ */
15
+ export const MAX_TILE_LAYER_CELLS = 4_194_304;
16
+
17
+ /**
18
+ * Floor division truncating toward negative infinity — REQUIRED for
19
+ * negative cell coordinates (T16.0 contract).
20
+ */
21
+ export function floorDiv(a, b) {
22
+ return Math.floor(a / b);
23
+ }
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // Private chunk index (T16-F1/F6)
27
+ //
28
+ // The index is stored in a module-private WeakMap keyed by the map value, so
29
+ // consumers can neither mutate it nor depend on it through the public map.
30
+ // Every runtime tile read flows through `tileAt`, which consults this index.
31
+ // Visit instrumentation lives in ./chunkStats and is re-exported only via
32
+ // rn-gamekit/testing (T16-RF4).
33
+ //
34
+ // Kept-read decision (GS-TILE-04, measured on desktop V8, Node 24):
35
+ // dense spans traverse identically with or without the index (~23us for a
36
+ // 40x24 window, ~2.1ms for a full 256x256 scan); sparse spans skip empty
37
+ // chunks 1.5-3.9x faster (platformer-shaped window 0.8us vs 3.1us direct).
38
+ // Absolute costs are microseconds per query, but the sparse win covers the
39
+ // representative game shape (mostly-empty finite maps), so the index stays
40
+ // with the total-cell cap above bounding its retained cost. See
41
+ // bench/tileQueries.bench.ts (`pnpm bench:tilequeries`).
42
+ // ---------------------------------------------------------------------------
43
+
44
+ const chunkIndexes = new WeakMap();
45
+ function buildChunkIndex(layers) {
46
+ const chunks = new Map();
47
+ for (const layer of layers) {
48
+ for (let y = 0; y < layer.height; y++) {
49
+ for (let x = 0; x < layer.width; x++) {
50
+ const v = layer.data[y * layer.width + x];
51
+ if (v === 0) continue;
52
+ const ccx = floorDiv(x, TILE_CHUNK_SIZE);
53
+ const ccy = floorDiv(y, TILE_CHUNK_SIZE);
54
+ const key = `${layer.id}|${ccx},${ccy}`;
55
+ let chunk = chunks.get(key);
56
+ if (chunk === undefined) {
57
+ chunk = new Int32Array(TILE_CHUNK_SIZE * TILE_CHUNK_SIZE);
58
+ chunks.set(key, chunk);
59
+ }
60
+ const lx = x - ccx * TILE_CHUNK_SIZE;
61
+ const ly = y - ccy * TILE_CHUNK_SIZE;
62
+ chunk[ly * TILE_CHUNK_SIZE + lx] = v;
63
+ }
64
+ }
65
+ }
66
+ return chunks;
67
+ }
68
+ export function defineTileSet2D(input) {
69
+ if (input === null || typeof input !== 'object' || input.tiles === null || typeof input.tiles !== 'object' || Array.isArray(input.tiles)) {
70
+ throw tileError('tiles', 'must be an object of named tile definitions');
71
+ }
72
+ const names = [];
73
+ const tiles = {};
74
+ const idOfName = {};
75
+ const nameOfId = {};
76
+ const collisionOfId = {};
77
+ for (const [name, defUnknown] of Object.entries(input.tiles)) {
78
+ if (name.length === 0) throw tileError('tiles', 'tile name must be non-empty');
79
+ const def = defUnknown;
80
+ if (def === null || typeof def !== 'object') {
81
+ throw tileError(`tiles.${JSON.stringify(name)}`, 'must be a tile definition object');
82
+ }
83
+ if (typeof def.frame !== 'string' || def.frame.length === 0) {
84
+ throw tileError(`tiles.${JSON.stringify(name)}.frame`, 'must be a non-empty frame name');
85
+ }
86
+ if (def.collision !== undefined && def.collision !== 'solid' && def.collision !== 'one-way-up') {
87
+ throw tileError(`tiles.${JSON.stringify(name)}.collision`, `must be "solid", "one-way-up", or omitted; got ${JSON.stringify(def.collision)}`);
88
+ }
89
+ names.push(name);
90
+ const id = names.length;
91
+ tiles[name] = Object.freeze({
92
+ frame: def.frame,
93
+ ...(def.collision !== undefined ? {
94
+ collision: def.collision
95
+ } : {})
96
+ });
97
+ idOfName[name] = id;
98
+ nameOfId[id] = name;
99
+ if (def.collision !== undefined) collisionOfId[id] = def.collision;
100
+ }
101
+ if (names.length === 0) throw tileError('tiles', 'must declare at least one tile');
102
+ if (names.length > 0xffff) throw tileError('tiles', 'v1 supports at most 65535 distinct tiles');
103
+ return Object.freeze({
104
+ names: Object.freeze(names.slice()),
105
+ tiles: Object.freeze(tiles),
106
+ idOfName: Object.freeze(idOfName),
107
+ nameOfId: Object.freeze(nameOfId),
108
+ collisionOfId: Object.freeze(collisionOfId)
109
+ });
110
+ }
111
+ function assertSafeInt(value, path) {
112
+ if (typeof value !== 'number' || !Number.isSafeInteger(value)) {
113
+ throw tileError(path, `must be a safe integer; got ${String(value)}`);
114
+ }
115
+ }
116
+ export function defineTileLayer2D(input, tileset) {
117
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
118
+ throw tileError('layers[]', 'must be a layer object');
119
+ }
120
+ const p = `layers[${JSON.stringify(input?.id ?? '')}]`;
121
+ if (typeof input.id !== 'string' || input.id.length === 0) throw tileError(`${p}.id`, 'must be a non-empty string');
122
+ assertSafeInt(input.width, `${p}.width`);
123
+ assertSafeInt(input.height, `${p}.height`);
124
+ if (input.width <= 0 || input.width > 8192) throw tileError(`${p}.width`, `must be in 1..8192; got ${input.width}`);
125
+ if (input.height <= 0 || input.height > 8192) throw tileError(`${p}.height`, `must be in 1..8192; got ${input.height}`);
126
+ if (input.width * input.height > MAX_TILE_LAYER_CELLS) {
127
+ throw tileError(`${p}`, `width*height ${input.width * input.height} exceeds the maximum of ${MAX_TILE_LAYER_CELLS} cells per layer`);
128
+ }
129
+ if (!Array.isArray(input.data)) throw tileError(`${p}.data`, 'must be a row-major array of tile ids');
130
+ // T16-F1: collidable is validated at runtime, never trusted from types.
131
+ if (input.collidable !== undefined && typeof input.collidable !== 'boolean') {
132
+ throw tileError(`${p}.collidable`, `must be a boolean or omitted; got ${typeof input.collidable}`);
133
+ }
134
+ const expected = input.width * input.height;
135
+ if (input.data.length !== expected) {
136
+ throw tileError(`${p}.data`, `length ${input.data.length} must equal width*height (${expected})`);
137
+ }
138
+ const data = new Array(expected).fill(0);
139
+ for (let i = 0; i < expected; i++) {
140
+ const v = input.data[i];
141
+ if (v === 0) continue;
142
+ if (typeof v !== 'number' || !Number.isSafeInteger(v) || v < 0 || tileset.nameOfId[v] === undefined) {
143
+ throw tileError(`${p}.data[${i}]`, `unknown tile id ${String(v)} for the bound tileset`);
144
+ }
145
+ data[i] = v;
146
+ }
147
+ return Object.freeze({
148
+ id: input.id,
149
+ width: input.width,
150
+ height: input.height,
151
+ collidable: input.collidable ?? true,
152
+ // T16-F1: owned frozen copy — mutation attempts throw and never stick.
153
+ data: Object.freeze(data)
154
+ });
155
+ }
156
+ export function defineTileMap2D(input) {
157
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) throw tileError('map', 'must be an object');
158
+ if (input.tileset === undefined || input.tileset.names === undefined) {
159
+ throw tileError('tileset', 'must be a value produced by defineTileSet2D');
160
+ }
161
+ const cw = input.cellSize?.width;
162
+ const ch = input.cellSize?.height;
163
+ if (typeof cw !== 'number' || !Number.isFinite(cw) || cw <= 0) throw tileError('cellSize.width', 'must be finite and > 0');
164
+ if (typeof ch !== 'number' || !Number.isFinite(ch) || ch <= 0) throw tileError('cellSize.height', 'must be finite and > 0');
165
+ if (!Array.isArray(input.layers)) throw tileError('layers', 'must be an array of layer inputs');
166
+ const originX = input.origin?.x ?? 0;
167
+ const originY = input.origin?.y ?? 0;
168
+ if (typeof originX !== 'number' || !Number.isFinite(originX)) throw tileError('origin.x', 'must be a finite number');
169
+ if (typeof originY !== 'number' || !Number.isFinite(originY)) throw tileError('origin.y', 'must be a finite number');
170
+ const origin = Object.freeze({
171
+ x: originX,
172
+ y: originY
173
+ });
174
+ const layers = [];
175
+ const layerById = {};
176
+ for (const layerInput of input.layers) {
177
+ const layer = defineTileLayer2D(layerInput, input.tileset);
178
+ if (layerById[layer.id] !== undefined) {
179
+ throw tileError('layers', `duplicate layer id ${JSON.stringify(layer.id)}`);
180
+ }
181
+ layers.push(layer);
182
+ layerById[layer.id] = layer;
183
+ }
184
+ if (layers.length === 0) throw tileError('layers', 'must declare at least one layer');
185
+
186
+ // World bounds cover every layer.
187
+ let maxX = Number.NEGATIVE_INFINITY;
188
+ let maxY = Number.NEGATIVE_INFINITY;
189
+ for (const layer of layers) {
190
+ maxX = Math.max(maxX, origin.x + layer.width * cw);
191
+ maxY = Math.max(maxY, origin.y + layer.height * ch);
192
+ }
193
+ const worldBounds = Object.freeze({
194
+ x: origin.x,
195
+ y: origin.y,
196
+ width: maxX - origin.x,
197
+ height: maxY - origin.y
198
+ });
199
+ const map = Object.freeze({
200
+ cellSize: Object.freeze({
201
+ width: cw,
202
+ height: ch
203
+ }),
204
+ // T16-F1: frozen public origin.
205
+ origin,
206
+ tileset: input.tileset,
207
+ layers: Object.freeze(layers.slice()),
208
+ layerById: Object.freeze(layerById),
209
+ worldBounds,
210
+ chunkSize: TILE_CHUNK_SIZE
211
+ });
212
+
213
+ // T16-F6: the chunk index lives OUTSIDE the public value.
214
+ chunkIndexes.set(map, buildChunkIndex(layers));
215
+ return map;
216
+ }
217
+ /** Internal: read one cell's tile id (0 when outside the finite map). */
218
+ export function tileAt(map, layerId, cx, cy) {
219
+ const layer = map.layerById[layerId];
220
+ if (layer === undefined) return 0;
221
+ if (cx < 0 || cy < 0 || cx >= layer.width || cy >= layer.height) return 0;
222
+ // T16-F6: every read flows through the private chunk index.
223
+ const chunks = chunkIndexes.get(map);
224
+ if (chunks === undefined) return 0;
225
+ const ccx = floorDiv(cx, TILE_CHUNK_SIZE);
226
+ const ccy = floorDiv(cy, TILE_CHUNK_SIZE);
227
+ recordChunkRead();
228
+ const chunk = chunks.get(`${layerId}|${ccx},${ccy}`);
229
+ if (chunk === undefined) return 0;
230
+ return chunk[(cy - ccy * TILE_CHUNK_SIZE) * TILE_CHUNK_SIZE + (cx - ccx * TILE_CHUNK_SIZE)];
231
+ }
232
+
233
+ /**
234
+ * Internal: iterate non-empty cells inside an inclusive cell span in
235
+ * global row-major order, fetching each overlapped chunk region once
236
+ * (T16-F6). `visit` receives (layerId, cx, cy, tileId); returning false
237
+ * from `visit` stops iteration early.
238
+ */
239
+ export function forEachCellInSpan(map, layerId, x0, y0, x1, y1, visit) {
240
+ const chunks = chunkIndexes.get(map);
241
+ if (chunks === undefined) return;
242
+ const bandY0 = floorDiv(y0, TILE_CHUNK_SIZE);
243
+ const bandY1 = floorDiv(y1, TILE_CHUNK_SIZE);
244
+ const bandX0 = floorDiv(x0, TILE_CHUNK_SIZE);
245
+ const bandX1 = floorDiv(x1, TILE_CHUNK_SIZE);
246
+ // T16-RF4: GLOBAL row-major order. For each chunk-Y band we fetch the
247
+ // intersecting chunk references ONCE (one lookup per chunk), then iterate
248
+ // global rows; within a row we visit the chunk-X segments left to right.
249
+ // This is exactly global row-major while keeping lookups bounded by the
250
+ // overlapped chunk regions.
251
+ const bandRefs = [];
252
+ for (let bcy = bandY0; bcy <= bandY1; bcy++) {
253
+ const rowStart = Math.max(y0, bcy * TILE_CHUNK_SIZE);
254
+ const rowEnd = Math.min(y1, (bcy + 1) * TILE_CHUNK_SIZE - 1);
255
+ // Fetch every intersecting chunk reference once per band.
256
+ bandRefs.length = 0;
257
+ for (let bcx = bandX0; bcx <= bandX1; bcx++) {
258
+ recordChunkRead();
259
+ bandRefs.push(chunks.get(`${layerId}|${bcx},${bcy}`));
260
+ }
261
+ for (let cy = rowStart; cy <= rowEnd; cy++) {
262
+ const ly = cy - bcy * TILE_CHUNK_SIZE;
263
+ const rowBase = ly * TILE_CHUNK_SIZE;
264
+ for (let bcx = bandX0; bcx <= bandX1; bcx++) {
265
+ const chunk = bandRefs[bcx - bandX0];
266
+ if (chunk === undefined) continue;
267
+ const lxStart = Math.max(x0, bcx * TILE_CHUNK_SIZE) - bcx * TILE_CHUNK_SIZE;
268
+ const lxEnd = Math.min(x1, (bcx + 1) * TILE_CHUNK_SIZE - 1) - bcx * TILE_CHUNK_SIZE;
269
+ for (let lx = lxStart; lx <= lxEnd; lx++) {
270
+ const v = chunk[rowBase + lx];
271
+ if (v === 0) continue;
272
+ const stop = visit(bcx * TILE_CHUNK_SIZE + lx, cy, v);
273
+ if (stop === false) return;
274
+ }
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ /** Convert a cell coordinate to its world AABB. */
281
+ export function cellAabb(map, cx, cy) {
282
+ return Object.freeze({
283
+ x: map.origin.x + cx * map.cellSize.width,
284
+ y: map.origin.y + cy * map.cellSize.height,
285
+ width: map.cellSize.width,
286
+ height: map.cellSize.height
287
+ });
288
+ }
289
+
290
+ /** Frozen immutable query result builder. */
291
+ export function makeCell(map, layerId, cx, cy, tileId) {
292
+ // GS-TILE-02: the single eligibility authority — a decorative
293
+ // (collidable: false) layer reports no collision role even for solid
294
+ // tiles, so queries and movement agree that decoration never blocks.
295
+ const collidable = map.layerById[layerId]?.collidable ?? false;
296
+ return Object.freeze({
297
+ layerId,
298
+ tileId,
299
+ tileName: map.tileset.nameOfId[tileId],
300
+ collision: collidable ? map.tileset.collisionOfId[tileId] : undefined,
301
+ cell: Object.freeze({
302
+ x: cx,
303
+ y: cy
304
+ }),
305
+ aabb: cellAabb(map, cx, cy)
306
+ });
307
+ }
308
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tileError","recordChunkRead","TILE_CHUNK_SIZE","MAX_TILE_LAYER_CELLS","floorDiv","a","b","Math","floor","chunkIndexes","WeakMap","buildChunkIndex","layers","chunks","Map","layer","y","height","x","width","v","data","ccx","ccy","key","id","chunk","get","undefined","Int32Array","set","lx","ly","defineTileSet2D","input","tiles","Array","isArray","names","idOfName","nameOfId","collisionOfId","name","defUnknown","Object","entries","length","def","JSON","stringify","frame","collision","push","freeze","slice","assertSafeInt","value","path","Number","isSafeInteger","String","defineTileLayer2D","tileset","p","collidable","expected","fill","i","defineTileMap2D","cw","cellSize","ch","isFinite","originX","origin","originY","layerById","layerInput","maxX","NEGATIVE_INFINITY","maxY","max","worldBounds","map","chunkSize","tileAt","layerId","cx","cy","forEachCellInSpan","x0","y0","x1","y1","visit","bandY0","bandY1","bandX0","bandX1","bandRefs","bcy","rowStart","rowEnd","min","bcx","rowBase","lxStart","lxEnd","stop","cellAabb","makeCell","tileId","tileName","cell","aabb"],"sourceRoot":"../../../src","sources":["tilemap/definitions.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ /** Tilemap definition/query/movement errors with exact field paths. */
4
+ export class TileMapError extends Error {
5
+ name = 'TileMapError';
6
+ constructor(message) {
7
+ super(message);
8
+ }
9
+ }
10
+ export function tileError(path, message) {
11
+ return new TileMapError(`${path}: ${message}`);
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TileMapError","Error","name","constructor","message","tileError","path"],"sourceRoot":"../../../src","sources":["tilemap/errors.ts"],"mappings":";;AAAA;AACA,OAAO,MAAMA,YAAY,SAASC,KAAK,CAAC;EAC7BC,IAAI,GAAG,cAAc;EAC9BC,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF;AAEA,OAAO,SAASC,SAASA,CAACC,IAAY,EAAEF,OAAe,EAAgB;EACrE,OAAO,IAAIJ,YAAY,CAAC,GAAGM,IAAI,KAAKF,OAAO,EAAE,CAAC;AAChD","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ export * from "./types.js";
4
+ export * from "./errors.js";
5
+ export * from "./definitions.js";
6
+ export * from "./queries.js";
7
+ export * from "./movement.js";
8
+ export * from "./tiledAdapter.js";
9
+ export { TILE_CHUNK_SIZE, floorDiv } from "./definitions.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TILE_CHUNK_SIZE","floorDiv"],"sourceRoot":"../../../src","sources":["tilemap/index.ts"],"mappings":";;AAAA,cAAc,YAAS;AACvB,cAAc,aAAU;AACxB,cAAc,kBAAe;AAC7B,cAAc,cAAW;AACzB,cAAc,eAAY;AAC1B,cAAc,mBAAgB;AAC9B,SACEA,eAAe,EACfC,QAAQ,QACH,kBAAe","ignoreList":[]}