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,379 @@
1
+ "use strict";
2
+
3
+ import { cellsInAabb, cellsInSweptBounds } from "./queries.js";
4
+ import { tileError } from "./errors.js";
5
+ import { assertValidAabb2D, assertValidVector2D } from "../geometry/validation.js";
6
+
7
+ /** Frozen v1 movement semantics (T16.0). */
8
+ export const PLATFORMER_MAX_ITERATIONS = 4;
9
+ export const PLATFORMER_SKIN = 1e-6;
10
+ /** Previous-bottom must be at or above the platform top by this tolerance. */
11
+ export const ONE_WAY_TOLERANCE = 1e-4;
12
+ function isSolid(kind) {
13
+ return kind === 'solid';
14
+ }
15
+ function isOneWay(kind) {
16
+ return kind === 'one-way-up';
17
+ }
18
+ function overlaps(a, b) {
19
+ return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;
20
+ }
21
+
22
+ /**
23
+ * Pure fixed-step AABB platformer movement (T16.3, T16-F5).
24
+ *
25
+ * Frozen semantics:
26
+ * - Axis order X then Y.
27
+ * - Solid tiles block both axes; one-way tiles block descent only when the
28
+ * previous bottom was at/above the platform top (ONE_WAY_TOLERANCE) and
29
+ * `dropThroughOneWay` is not set.
30
+ * - Starting overlap resolves along the least-penetration face preferring UP
31
+ * on ties (up = negative y in y-down space), up to PLATFORMER_MAX_ITERATIONS;
32
+ * unresolved spawn overlap throws deterministically. The reported contact is
33
+ * always the tile that supplied the winning face.
34
+ * - Each axis resolves against the NEAREST blocking plane and reports contacts
35
+ * ONLY for tiles touching that winning plane — farther crossed rows/columns
36
+ * are never reported.
37
+ * - Floor snap pulls a falling/resting body down onto tops within
38
+ * `floorSnapDistance`.
39
+ * - Candidate order is layer order then row-major cell order; equal physical
40
+ * candidates preserve that deterministic order.
41
+ *
42
+ * Displacement contract (GS-TILE-03): `displacement` reports requested-motion
43
+ * resolution only — starting-overlap recovery moves the body and reports its
44
+ * contact, but never contributes to displacement. The caller's body object is
45
+ * never mutated or frozen; every returned body/contact/normal is an owned
46
+ * frozen value.
47
+ */
48
+ export function movePlatformerBody2D(options) {
49
+ const {
50
+ map,
51
+ deltaSeconds,
52
+ collisionLayers
53
+ } = options;
54
+ // GS-TILE-03: validate author inputs once at the public boundary, and
55
+ // copy the body — the caller's object is never mutated or frozen.
56
+ assertValidAabb2D(options.body, 'body');
57
+ assertValidVector2D(options.velocity, 'velocity');
58
+ let body = {
59
+ ...options.body
60
+ };
61
+ let vx = options.velocity.x;
62
+ let vy = options.velocity.y;
63
+ if (!Number.isFinite(deltaSeconds) || deltaSeconds < 0) {
64
+ throw tileError('deltaSeconds', `must be a finite number >= 0; got ${String(deltaSeconds)}`);
65
+ }
66
+ const dropThrough = options.dropThroughOneWay ?? false;
67
+ if (typeof dropThrough !== 'boolean') {
68
+ throw tileError('dropThroughOneWay', `must be a boolean or omitted; got ${String(options.dropThroughOneWay)}`);
69
+ }
70
+ const snapDistance = options.floorSnapDistance ?? 0;
71
+ if (typeof snapDistance !== 'number' || !Number.isFinite(snapDistance) || snapDistance < 0) {
72
+ throw tileError('floorSnapDistance', `must be a finite number >= 0 or omitted; got ${String(options.floorSnapDistance)}`);
73
+ }
74
+ // GS-TILE-02: layer selection is explicit and exact — unknown ids fail
75
+ // here instead of silently colliding with nothing (a typo would otherwise
76
+ // drop the player through the world). Duplicates are harmless: queries
77
+ // iterate map layers, so an id can never report twice.
78
+ if (!Array.isArray(collisionLayers)) {
79
+ throw tileError('collisionLayers', `must be an array of layer ids; got ${String(collisionLayers)}`);
80
+ }
81
+ for (const layerId of collisionLayers) {
82
+ if (typeof layerId !== 'string' || map.layerById[layerId] === undefined) {
83
+ throw tileError('collisionLayers', `unknown collision layer ${JSON.stringify(layerId)}`);
84
+ }
85
+ }
86
+ const intendedX = vx * deltaSeconds;
87
+ const intendedY = vy * deltaSeconds;
88
+ const contacts = [];
89
+ let appliedX = 0;
90
+ let appliedY = 0;
91
+
92
+ /** Report one owned frozen contact (GS-TILE-03: nested values immutable). */
93
+ const report = (cell, normal) => {
94
+ contacts.push(Object.freeze({
95
+ cell,
96
+ normal: Object.freeze({
97
+ ...normal
98
+ })
99
+ }));
100
+ };
101
+
102
+ // --- Starting-overlap recovery ---
103
+ // Track the winning tile TOGETHER with its face so the reported contact
104
+ // always names the tile that supplied the resolved plane (T16-F5).
105
+ for (let iter = 0; iter < PLATFORMER_MAX_ITERATIONS; iter++) {
106
+ const overlapping = cellsInAabb(map, body, collisionLayers).filter(c => isSolid(c.collision) && overlaps(body, c.aabb));
107
+ if (overlapping.length === 0) break;
108
+ // Least-penetration FACE wins; ties prefer pushing UP (negative y).
109
+ let bestAxis = 'y';
110
+ let bestSign = -1;
111
+ let bestDepth = Number.POSITIVE_INFINITY;
112
+ let bestCell;
113
+ const consider = (axis, sign, depth, cell) => {
114
+ // Deterministic tie rule: prefer y over x, and prefer negative-y (up)
115
+ // over positive-y. Otherwise first-evaluated (row-major) wins.
116
+ const better = depth < bestDepth || depth === bestDepth && (axis === 'y' ? bestAxis !== 'y' || sign === -1 : false);
117
+ if (better) {
118
+ bestAxis = axis;
119
+ bestSign = sign;
120
+ bestDepth = depth;
121
+ bestCell = cell;
122
+ }
123
+ };
124
+ for (const c of overlapping) {
125
+ const pushLeft = c.aabb.x - body.width - body.x;
126
+ const pushRight = c.aabb.x + c.aabb.width - body.x;
127
+ const pushUp = c.aabb.y - body.height - body.y;
128
+ const pushDown = c.aabb.y + c.aabb.height - body.y;
129
+ consider('x', -1, Math.abs(pushLeft), c);
130
+ consider('x', 1, Math.abs(pushRight), c);
131
+ consider('y', -1, Math.abs(pushUp), c);
132
+ consider('y', 1, Math.abs(pushDown), c);
133
+ }
134
+ if (bestCell === undefined) break;
135
+ // Closure mutation defeats TS narrowing here; assert the union.
136
+ const axis = bestAxis;
137
+ body = axis === 'x' ? {
138
+ ...body,
139
+ x: body.x + bestSign * bestDepth
140
+ } : {
141
+ ...body,
142
+ y: body.y + bestSign * bestDepth
143
+ };
144
+ // Negative-y push lands the body ON a tile top (floor); positive-y hits
145
+ // a ceiling. The contact names the winning tile.
146
+ if (axis === 'y') {
147
+ report(bestCell, {
148
+ x: 0,
149
+ y: bestSign
150
+ });
151
+ vy = 0;
152
+ } else {
153
+ report(bestCell, {
154
+ x: bestSign,
155
+ y: 0
156
+ });
157
+ vx = 0;
158
+ }
159
+ }
160
+ // Final check: unresolved spawn overlap is a deterministic error.
161
+ const stillOverlapping = cellsInAabb(map, body, collisionLayers).some(c => isSolid(c.collision) && overlaps(body, c.aabb));
162
+ if (stillOverlapping) {
163
+ throw tileError('body', 'starting overlap could not be resolved within PLATFORMER_MAX_ITERATIONS');
164
+ }
165
+ const prevBottom = body.y + body.height;
166
+ // --- X axis sweep ---
167
+ {
168
+ const dx = intendedX;
169
+ if (dx !== 0) {
170
+ const newX = body.x + dx;
171
+ let clamped = newX;
172
+ const yOverlap = aabb => body.y < aabb.y + aabb.height && body.y + body.height > aabb.y;
173
+ const solids = cellsInSweptBounds(map, body, {
174
+ x: dx,
175
+ y: 0
176
+ }, collisionLayers).filter(c => isSolid(c.collision));
177
+ // Phase 1: resolve against the NEAREST blocking plane only.
178
+ if (dx > 0) {
179
+ let planeX = Number.POSITIVE_INFINITY;
180
+ for (const c of solids) {
181
+ if (!yOverlap(c.aabb)) continue;
182
+ if (body.x + body.width > c.aabb.x + PLATFORMER_SKIN) continue;
183
+ if (c.aabb.x < planeX) planeX = c.aabb.x;
184
+ }
185
+ if (planeX !== Number.POSITIVE_INFINITY) {
186
+ clamped = Math.min(clamped, planeX - body.width);
187
+ // Phase 2: emit contacts ONLY for tiles touching the winning plane.
188
+ for (const c of solids) {
189
+ if (!yOverlap(c.aabb)) continue;
190
+ if (Math.abs(c.aabb.x - planeX) > PLATFORMER_SKIN) continue;
191
+ report(c, {
192
+ x: -1,
193
+ y: 0
194
+ });
195
+ }
196
+ }
197
+ } else {
198
+ let planeX = Number.NEGATIVE_INFINITY;
199
+ for (const c of solids) {
200
+ if (!yOverlap(c.aabb)) continue;
201
+ if (body.x < c.aabb.x + c.aabb.width - PLATFORMER_SKIN) continue;
202
+ if (c.aabb.x + c.aabb.width > planeX) planeX = c.aabb.x + c.aabb.width;
203
+ }
204
+ if (planeX !== Number.NEGATIVE_INFINITY) {
205
+ clamped = Math.max(clamped, planeX);
206
+ for (const c of solids) {
207
+ if (!yOverlap(c.aabb)) continue;
208
+ if (Math.abs(c.aabb.x + c.aabb.width - planeX) > PLATFORMER_SKIN) continue;
209
+ report(c, {
210
+ x: 1,
211
+ y: 0
212
+ });
213
+ }
214
+ }
215
+ }
216
+ if (clamped !== newX) vx = 0;
217
+ appliedX = clamped - body.x;
218
+ body = {
219
+ ...body,
220
+ x: clamped
221
+ };
222
+ }
223
+ }
224
+ // --- Y axis sweep ---
225
+ {
226
+ const dy = intendedY;
227
+ if (dy !== 0) {
228
+ const newY = body.y + dy;
229
+ let clamped = newY;
230
+ const prevBottomY = body.y + body.height;
231
+ const prevTop = body.y;
232
+ const xOverlap = aabb => body.x < aabb.x + aabb.width && body.x + body.width > aabb.x;
233
+ const candidates = cellsInSweptBounds(map, body, {
234
+ x: 0,
235
+ y: dy
236
+ }, collisionLayers);
237
+ const floors = [];
238
+ const ceilings = [];
239
+ for (const c of candidates) {
240
+ const solid = isSolid(c.collision);
241
+ const oneWay = isOneWay(c.collision);
242
+ if (!solid && !oneWay) continue;
243
+ if (!xOverlap(c.aabb)) continue;
244
+ if (dy > 0) {
245
+ // Descending: floor candidate.
246
+ if (oneWay && (dropThrough || prevBottomY > c.aabb.y + ONE_WAY_TOLERANCE)) continue;
247
+ // Swept crossing: started above/on the top and reached past it.
248
+ if (prevBottomY <= c.aabb.y + PLATFORMER_SKIN && newY + body.height >= c.aabb.y) {
249
+ floors.push({
250
+ cell: c
251
+ });
252
+ }
253
+ } else {
254
+ // Ascending: only solids block ceilings.
255
+ if (!solid) continue;
256
+ if (prevTop >= c.aabb.y + c.aabb.height - PLATFORMER_SKIN && newY <= c.aabb.y + c.aabb.height) {
257
+ ceilings.push(c);
258
+ }
259
+ }
260
+ }
261
+ if (dy > 0 && floors.length > 0) {
262
+ // Nearest plane wins; report only tiles touching it.
263
+ let planeY = Number.POSITIVE_INFINITY;
264
+ for (const f of floors) {
265
+ if (f.cell.aabb.y < planeY) planeY = f.cell.aabb.y;
266
+ }
267
+ clamped = Math.min(clamped, planeY - body.height);
268
+ for (const f of floors) {
269
+ if (f.cell.aabb.y !== planeY) continue;
270
+ report(f.cell, {
271
+ x: 0,
272
+ y: -1
273
+ });
274
+ }
275
+ } else if (dy < 0 && ceilings.length > 0) {
276
+ let planeBottom = Number.NEGATIVE_INFINITY;
277
+ for (const c of ceilings) {
278
+ if (c.aabb.y + c.aabb.height > planeBottom) planeBottom = c.aabb.y + c.aabb.height;
279
+ }
280
+ clamped = Math.max(clamped, planeBottom);
281
+ for (const c of ceilings) {
282
+ if (Math.abs(c.aabb.y + c.aabb.height - planeBottom) > PLATFORMER_SKIN) continue;
283
+ report(c, {
284
+ x: 0,
285
+ y: 1
286
+ });
287
+ }
288
+ }
289
+ if (clamped !== newY) vy = 0;
290
+ appliedY = clamped - body.y;
291
+ body = {
292
+ ...body,
293
+ y: clamped
294
+ };
295
+ }
296
+ }
297
+
298
+ // --- Floor snap ---
299
+ // GS-TILE-03: drop-through suppresses one-way floors without disabling
300
+ // snap onto solid floors.
301
+ {
302
+ const hasFloor = contacts.some(c => c.normal.y === -1);
303
+ if (!hasFloor && vy >= 0 && snapDistance > 0) {
304
+ const probeBottom = body.y + body.height + snapDistance;
305
+ const probe = {
306
+ x: body.x,
307
+ y: body.y + body.height,
308
+ width: body.width,
309
+ height: snapDistance
310
+ };
311
+ const near = cellsInAabb(map, probe, collisionLayers);
312
+ let bestTop = Number.POSITIVE_INFINITY;
313
+ let bestCell;
314
+ for (const c of near) {
315
+ const top = c.aabb.y;
316
+ if (top < body.y + body.height - PLATFORMER_SKIN) continue;
317
+ if (top > probeBottom) continue;
318
+ const ok = isSolid(c.collision) || !dropThrough && isOneWay(c.collision) && prevBottom <= top + ONE_WAY_TOLERANCE;
319
+ if (!ok) continue;
320
+ if (top < bestTop) {
321
+ bestTop = top;
322
+ bestCell = c;
323
+ }
324
+ }
325
+ if (bestCell !== undefined && bestTop < Number.POSITIVE_INFINITY) {
326
+ const snapDelta = bestTop - body.height - body.y;
327
+ body = {
328
+ ...body,
329
+ y: bestTop - body.height
330
+ };
331
+ report(bestCell, {
332
+ x: 0,
333
+ y: -1
334
+ });
335
+ vy = 0;
336
+ appliedY += snapDelta;
337
+ }
338
+ }
339
+ }
340
+ const classified = classify(contacts);
341
+ return Object.freeze({
342
+ body: Object.freeze(body),
343
+ velocity: Object.freeze({
344
+ x: vx,
345
+ y: vy
346
+ }),
347
+ displacement: Object.freeze({
348
+ x: appliedX,
349
+ y: appliedY
350
+ }),
351
+ remainingDisplacement: Object.freeze({
352
+ x: intendedX - appliedX,
353
+ y: intendedY - appliedY
354
+ }),
355
+ contacts: Object.freeze({
356
+ floor: classified.floor,
357
+ ceiling: classified.ceiling,
358
+ leftWall: classified.leftWall,
359
+ rightWall: classified.rightWall,
360
+ all: Object.freeze(contacts)
361
+ })
362
+ });
363
+ }
364
+ function classify(contacts) {
365
+ let floor;
366
+ let ceiling;
367
+ let leftWall;
368
+ let rightWall;
369
+ for (const c of contacts) {
370
+ if (c.normal.y === -1 && floor === undefined) floor = c;else if (c.normal.y === 1 && ceiling === undefined) ceiling = c;else if (c.normal.x === 1 && leftWall === undefined) leftWall = c;else if (c.normal.x === -1 && rightWall === undefined) rightWall = c;
371
+ }
372
+ return {
373
+ floor,
374
+ ceiling,
375
+ leftWall,
376
+ rightWall
377
+ };
378
+ }
379
+ //# sourceMappingURL=movement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cellsInAabb","cellsInSweptBounds","tileError","assertValidAabb2D","assertValidVector2D","PLATFORMER_MAX_ITERATIONS","PLATFORMER_SKIN","ONE_WAY_TOLERANCE","isSolid","kind","isOneWay","overlaps","a","b","x","width","y","height","movePlatformerBody2D","options","map","deltaSeconds","collisionLayers","body","velocity","vx","vy","Number","isFinite","String","dropThrough","dropThroughOneWay","snapDistance","floorSnapDistance","Array","isArray","layerId","layerById","undefined","JSON","stringify","intendedX","intendedY","contacts","appliedX","appliedY","report","cell","normal","push","Object","freeze","iter","overlapping","filter","c","collision","aabb","length","bestAxis","bestSign","bestDepth","POSITIVE_INFINITY","bestCell","consider","axis","sign","depth","better","pushLeft","pushRight","pushUp","pushDown","Math","abs","stillOverlapping","some","prevBottom","dx","newX","clamped","yOverlap","solids","planeX","min","NEGATIVE_INFINITY","max","dy","newY","prevBottomY","prevTop","xOverlap","candidates","floors","ceilings","solid","oneWay","planeY","f","planeBottom","hasFloor","probeBottom","probe","near","bestTop","top","ok","snapDelta","classified","classify","displacement","remainingDisplacement","floor","ceiling","leftWall","rightWall","all"],"sourceRoot":"../../../src","sources":["tilemap/movement.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ import { forEachCellInSpan, makeCell } from "./definitions.js";
4
+
5
+ /**
6
+ * Bounded cell queries (T16.2, T16-F6).
7
+ *
8
+ * Deterministic order: layer order (map declaration), then row-major within
9
+ * a layer. Spans are clamped to the finite map before iteration; queries
10
+ * outside the map return an empty frozen array. All reads flow through the
11
+ * private chunk index — each overlapped 16x16 chunk region is fetched once.
12
+ */
13
+
14
+ function clampSpan(layer, minCx, minCy, maxCx, maxCy) {
15
+ const x0 = Math.max(0, minCx);
16
+ const y0 = Math.max(0, minCy);
17
+ const x1 = Math.min(layer.width - 1, maxCx);
18
+ const y1 = Math.min(layer.height - 1, maxCy);
19
+ if (x0 > x1 || y0 > y1) return undefined;
20
+ return {
21
+ x0,
22
+ y0,
23
+ x1,
24
+ y1
25
+ };
26
+ }
27
+ function collectSpan(map, layerId, span, out) {
28
+ forEachCellInSpan(map, layerId, span.x0, span.y0, span.x1, span.y1, (cx, cy, id) => {
29
+ out.push(makeCell(map, layerId, cx, cy, id));
30
+ });
31
+ }
32
+
33
+ /** All non-empty cells in the given layers overlapping the point. */
34
+ export function cellsAtPoint(map, point, layerIds) {
35
+ const out = [];
36
+ const cx = Math.floor((point.x - map.origin.x) / map.cellSize.width);
37
+ const cy = Math.floor((point.y - map.origin.y) / map.cellSize.height);
38
+ for (const layer of map.layers) {
39
+ if (layerIds !== undefined && !layerIds.includes(layer.id)) continue;
40
+ const span = clampSpan(layer, cx, cy, cx, cy);
41
+ if (span === undefined) continue;
42
+ collectSpan(map, layer.id, span, out);
43
+ }
44
+ return Object.freeze(out);
45
+ }
46
+
47
+ /** All non-empty cells whose AABBs intersect the query AABB. */
48
+ export function cellsInAabb(map, aabb, layerIds) {
49
+ const out = [];
50
+ const minCx = Math.floor((aabb.x - map.origin.x) / map.cellSize.width);
51
+ const minCy = Math.floor((aabb.y - map.origin.y) / map.cellSize.height);
52
+ // GS-TILE-05: half-open tile areas, exact arithmetic — no shared epsilon.
53
+ // The maximum corner selects ceil(max/cell) - 1, so exact boundaries
54
+ // exclude the next cell and tiny positive extents still select their
55
+ // own. A zero/negative extent is a point query for the cell containing
56
+ // the minimum corner (documented divergence from inclusive contact).
57
+ const maxCx = maxCellIndex(aabb.x, aabb.width, map.origin.x, map.cellSize.width);
58
+ const maxCy = maxCellIndex(aabb.y, aabb.height, map.origin.y, map.cellSize.height);
59
+ for (const layer of map.layers) {
60
+ if (layerIds !== undefined && !layerIds.includes(layer.id)) continue;
61
+ const span = clampSpan(layer, minCx, minCy, maxCx, maxCy);
62
+ if (span === undefined) continue;
63
+ collectSpan(map, layer.id, span, out);
64
+ }
65
+ return Object.freeze(out);
66
+ }
67
+
68
+ /**
69
+ * Last cell index covered by the half-open span [min, min + extent).
70
+ * Exact boundaries exclude the next cell; zero/negative extents fall back
71
+ * to the cell containing the minimum corner (point-query semantics).
72
+ */
73
+ function maxCellIndex(min, extent, origin, cell) {
74
+ if (!(min + extent > min)) {
75
+ return Math.floor((min - origin) / cell);
76
+ }
77
+ return Math.ceil((min + extent - origin) / cell) - 1;
78
+ }
79
+
80
+ /**
81
+ * Cells overlapped by the swept bounds of a body moving by `displacement`.
82
+ * The swept bounds are the union AABB of start and end positions — bounded,
83
+ * never unbounded even for very large displacements (clamped to the map).
84
+ */
85
+ export function cellsInSweptBounds(map, body, displacement, layerIds) {
86
+ const minX = Math.min(body.x, body.x + displacement.x);
87
+ const minY = Math.min(body.y, body.y + displacement.y);
88
+ return cellsInAabb(map, {
89
+ x: minX,
90
+ y: minY,
91
+ width: body.width + Math.abs(displacement.x),
92
+ height: body.height + Math.abs(displacement.y)
93
+ }, layerIds);
94
+ }
95
+
96
+ /**
97
+ * Non-empty cells inside the visible region (camera bounds + overscan).
98
+ * Same deterministic ordering as `cellsInAabb`.
99
+ */
100
+ export function visibleCells(map, visibleBounds, overscanCells, layerIds) {
101
+ const out = [];
102
+ const minCx = Math.floor((visibleBounds.x - map.origin.x) / map.cellSize.width) - overscanCells;
103
+ const minCy = Math.floor((visibleBounds.y - map.origin.y) / map.cellSize.height) - overscanCells;
104
+ const maxCx = Math.ceil((visibleBounds.x + visibleBounds.width - map.origin.x) / map.cellSize.width) - 1 + overscanCells;
105
+ const maxCy = Math.ceil((visibleBounds.y + visibleBounds.height - map.origin.y) / map.cellSize.height) - 1 + overscanCells;
106
+ for (const layer of map.layers) {
107
+ if (layerIds !== undefined && !layerIds.includes(layer.id)) continue;
108
+ const span = clampSpan(layer, minCx, minCy, maxCx, maxCy);
109
+ if (span === undefined) continue;
110
+ collectSpan(map, layer.id, span, out);
111
+ }
112
+ return Object.freeze(out);
113
+ }
114
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forEachCellInSpan","makeCell","clampSpan","layer","minCx","minCy","maxCx","maxCy","x0","Math","max","y0","x1","min","width","y1","height","undefined","collectSpan","map","layerId","span","out","cx","cy","id","push","cellsAtPoint","point","layerIds","floor","x","origin","cellSize","y","layers","includes","Object","freeze","cellsInAabb","aabb","maxCellIndex","extent","cell","ceil","cellsInSweptBounds","body","displacement","minX","minY","abs","visibleCells","visibleBounds","overscanCells"],"sourceRoot":"../../../src","sources":["tilemap/queries.ts"],"mappings":"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","ignoreList":[]}