kiwiengine 0.5.2 → 0.5.4

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 (325) hide show
  1. package/README.ko.md +2 -2
  2. package/README.md +2 -2
  3. package/examples/auto-battle/assets/bgm/battle.mp3 +0 -0
  4. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  5. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  6. package/examples/auto-battle/assets/joystick/joystick.png +0 -0
  7. package/examples/auto-battle/assets/joystick/knob.png +0 -0
  8. package/examples/auto-battle/assets/sfx/hero/die/die.wav +0 -0
  9. package/examples/auto-battle/assets/sfx/hero/heal/heal.wav +0 -0
  10. package/examples/auto-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  11. package/examples/auto-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  12. package/examples/auto-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  13. package/examples/auto-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  14. package/examples/auto-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  15. package/examples/auto-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  16. package/examples/auto-battle/assets/sfx/orc/die/die.wav +0 -0
  17. package/examples/auto-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  18. package/examples/auto-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  19. package/examples/auto-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  20. package/examples/auto-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  21. package/examples/auto-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  22. package/examples/auto-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  23. package/examples/auto-battle/assets/spritesheets/hero-atlas.json +246 -0
  24. package/examples/auto-battle/assets/spritesheets/hero.png +0 -0
  25. package/examples/auto-battle/assets/spritesheets/orc-atlas.json +246 -0
  26. package/examples/auto-battle/assets/spritesheets/orc.png +0 -0
  27. package/examples/auto-battle/assets/spritesheets/potion-atlas.json +68 -0
  28. package/examples/auto-battle/assets/spritesheets/potion.png +0 -0
  29. package/examples/auto-battle/dist/game.js +2 -0
  30. package/examples/auto-battle/dist/game.js.LICENSE.txt +35 -0
  31. package/examples/auto-battle/hud/damage-text.ts +46 -0
  32. package/examples/auto-battle/hud/heal-text.ts +46 -0
  33. package/examples/auto-battle/hud/hp-bar.ts +38 -0
  34. package/examples/auto-battle/index.ts +41 -0
  35. package/examples/auto-battle/objects/character.ts +95 -0
  36. package/examples/auto-battle/objects/hero.ts +119 -0
  37. package/examples/auto-battle/objects/orc.ts +107 -0
  38. package/examples/auto-battle/objects/potion.ts +27 -0
  39. package/examples/auto-battle/stage.ts +366 -0
  40. package/examples/battle-benchmark-matterjs/assets/bgm/battle.mp3 +0 -0
  41. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  42. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.png +0 -0
  43. package/examples/battle-benchmark-matterjs/assets/joystick/joystick.png +0 -0
  44. package/examples/battle-benchmark-matterjs/assets/joystick/knob.png +0 -0
  45. package/examples/battle-benchmark-matterjs/assets/sfx/hero/die/die.wav +0 -0
  46. package/examples/battle-benchmark-matterjs/assets/sfx/hero/heal/heal.wav +0 -0
  47. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit1.wav +0 -0
  48. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit2.wav +0 -0
  49. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit3.wav +0 -0
  50. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss1.wav +0 -0
  51. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss2.wav +0 -0
  52. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss3.wav +0 -0
  53. package/examples/battle-benchmark-matterjs/assets/sfx/orc/die/die.wav +0 -0
  54. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit1.wav +0 -0
  55. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit2.wav +0 -0
  56. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit3.wav +0 -0
  57. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss1.wav +0 -0
  58. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss2.wav +0 -0
  59. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss3.wav +0 -0
  60. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero-atlas.json +246 -0
  61. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero.png +0 -0
  62. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc-atlas.json +246 -0
  63. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc.png +0 -0
  64. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion-atlas.json +68 -0
  65. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion.png +0 -0
  66. package/examples/battle-benchmark-matterjs/dist/game.js +2 -0
  67. package/examples/battle-benchmark-matterjs/dist/game.js.LICENSE.txt +35 -0
  68. package/examples/battle-benchmark-matterjs/hud/damage-text.ts +46 -0
  69. package/examples/battle-benchmark-matterjs/hud/heal-text.ts +46 -0
  70. package/examples/battle-benchmark-matterjs/hud/hp-bar.ts +38 -0
  71. package/examples/battle-benchmark-matterjs/index.html +24 -0
  72. package/examples/battle-benchmark-matterjs/index.ts +41 -0
  73. package/examples/battle-benchmark-matterjs/objects/character.ts +95 -0
  74. package/examples/battle-benchmark-matterjs/objects/hero.ts +111 -0
  75. package/examples/battle-benchmark-matterjs/objects/orc.ts +107 -0
  76. package/examples/battle-benchmark-matterjs/objects/potion.ts +27 -0
  77. package/examples/battle-benchmark-matterjs/stage.ts +177 -0
  78. package/examples/battle-benchmark-separation/assets/bgm/battle.mp3 +0 -0
  79. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  80. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.png +0 -0
  81. package/examples/battle-benchmark-separation/assets/joystick/joystick.png +0 -0
  82. package/examples/battle-benchmark-separation/assets/joystick/knob.png +0 -0
  83. package/examples/battle-benchmark-separation/assets/sfx/hero/die/die.wav +0 -0
  84. package/examples/battle-benchmark-separation/assets/sfx/hero/heal/heal.wav +0 -0
  85. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit1.wav +0 -0
  86. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit2.wav +0 -0
  87. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit3.wav +0 -0
  88. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss1.wav +0 -0
  89. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss2.wav +0 -0
  90. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss3.wav +0 -0
  91. package/examples/battle-benchmark-separation/assets/sfx/orc/die/die.wav +0 -0
  92. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit1.wav +0 -0
  93. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit2.wav +0 -0
  94. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit3.wav +0 -0
  95. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss1.wav +0 -0
  96. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss2.wav +0 -0
  97. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss3.wav +0 -0
  98. package/examples/battle-benchmark-separation/assets/spritesheets/hero-atlas.json +246 -0
  99. package/examples/battle-benchmark-separation/assets/spritesheets/hero.png +0 -0
  100. package/examples/battle-benchmark-separation/assets/spritesheets/orc-atlas.json +246 -0
  101. package/examples/battle-benchmark-separation/assets/spritesheets/orc.png +0 -0
  102. package/examples/battle-benchmark-separation/assets/spritesheets/potion-atlas.json +68 -0
  103. package/examples/battle-benchmark-separation/assets/spritesheets/potion.png +0 -0
  104. package/examples/battle-benchmark-separation/dist/game.js +2 -0
  105. package/examples/battle-benchmark-separation/dist/game.js.LICENSE.txt +35 -0
  106. package/examples/battle-benchmark-separation/hud/damage-text.ts +46 -0
  107. package/examples/battle-benchmark-separation/hud/heal-text.ts +46 -0
  108. package/examples/battle-benchmark-separation/hud/hp-bar.ts +38 -0
  109. package/examples/battle-benchmark-separation/index.html +24 -0
  110. package/examples/battle-benchmark-separation/index.ts +41 -0
  111. package/examples/battle-benchmark-separation/objects/character.ts +225 -0
  112. package/examples/battle-benchmark-separation/objects/hero.ts +110 -0
  113. package/examples/battle-benchmark-separation/objects/orc.ts +213 -0
  114. package/examples/battle-benchmark-separation/objects/potion.ts +27 -0
  115. package/examples/battle-benchmark-separation/stage.ts +178 -0
  116. package/examples/battle-benchmark-separation2/assets/bgm/battle.mp3 +0 -0
  117. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  118. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.png +0 -0
  119. package/examples/battle-benchmark-separation2/assets/joystick/joystick.png +0 -0
  120. package/examples/battle-benchmark-separation2/assets/joystick/knob.png +0 -0
  121. package/examples/battle-benchmark-separation2/assets/sfx/hero/die/die.wav +0 -0
  122. package/examples/battle-benchmark-separation2/assets/sfx/hero/heal/heal.wav +0 -0
  123. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit1.wav +0 -0
  124. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit2.wav +0 -0
  125. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit3.wav +0 -0
  126. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss1.wav +0 -0
  127. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss2.wav +0 -0
  128. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss3.wav +0 -0
  129. package/examples/battle-benchmark-separation2/assets/sfx/orc/die/die.wav +0 -0
  130. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit1.wav +0 -0
  131. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit2.wav +0 -0
  132. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit3.wav +0 -0
  133. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss1.wav +0 -0
  134. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss2.wav +0 -0
  135. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss3.wav +0 -0
  136. package/examples/battle-benchmark-separation2/assets/spritesheets/hero-atlas.json +246 -0
  137. package/examples/battle-benchmark-separation2/assets/spritesheets/hero.png +0 -0
  138. package/examples/battle-benchmark-separation2/assets/spritesheets/orc-atlas.json +246 -0
  139. package/examples/battle-benchmark-separation2/assets/spritesheets/orc.png +0 -0
  140. package/examples/battle-benchmark-separation2/assets/spritesheets/potion-atlas.json +68 -0
  141. package/examples/battle-benchmark-separation2/assets/spritesheets/potion.png +0 -0
  142. package/examples/battle-benchmark-separation2/dist/game.js +2 -0
  143. package/examples/battle-benchmark-separation2/dist/game.js.LICENSE.txt +35 -0
  144. package/examples/battle-benchmark-separation2/hud/damage-text.ts +46 -0
  145. package/examples/battle-benchmark-separation2/hud/heal-text.ts +46 -0
  146. package/examples/battle-benchmark-separation2/hud/hp-bar.ts +38 -0
  147. package/examples/battle-benchmark-separation2/index.html +24 -0
  148. package/examples/battle-benchmark-separation2/index.ts +41 -0
  149. package/examples/battle-benchmark-separation2/objects/character.ts +195 -0
  150. package/examples/battle-benchmark-separation2/objects/hero.ts +110 -0
  151. package/examples/battle-benchmark-separation2/objects/orc.ts +213 -0
  152. package/examples/battle-benchmark-separation2/objects/potion.ts +27 -0
  153. package/examples/battle-benchmark-separation2/stage.ts +178 -0
  154. package/examples/dom-sprite-test/index.ts +6 -9
  155. package/examples/simple-battle/assets/spritesheets/hero-atlas.json +180 -223
  156. package/examples/simple-battle/assets/spritesheets/orc-atlas.json +180 -223
  157. package/examples/simple-battle/assets/spritesheets/potion-atlas.json +46 -61
  158. package/examples/simple-battle/hud/damage-text.ts +1 -0
  159. package/examples/simple-battle/hud/heal-text.ts +1 -0
  160. package/examples/simple-battle/objects/character.ts +3 -3
  161. package/examples/simple-battle/objects/hero.ts +3 -5
  162. package/examples/simple-battle/objects/orc.ts +3 -5
  163. package/examples/simple-battle/objects/potion.ts +0 -2
  164. package/examples/simple-battle/stage.ts +2 -4
  165. package/examples/sprite-test/index.ts +6 -9
  166. package/examples/webpack.config.js +4 -1
  167. package/lib/asset/loaders/audio.js +4 -1
  168. package/lib/asset/loaders/audio.js.map +1 -1
  169. package/lib/asset/loaders/binary.js +4 -1
  170. package/lib/asset/loaders/binary.js.map +1 -1
  171. package/lib/asset/loaders/bitmap-font.js +24 -21
  172. package/lib/asset/loaders/bitmap-font.js.map +1 -1
  173. package/lib/asset/loaders/font.js +3 -0
  174. package/lib/asset/loaders/font.js.map +1 -1
  175. package/lib/asset/loaders/spritesheet.js +12 -1
  176. package/lib/asset/loaders/spritesheet.js.map +1 -1
  177. package/lib/asset/loaders/text.js +3 -0
  178. package/lib/asset/loaders/text.js.map +1 -1
  179. package/lib/asset/loaders/texture.js +21 -26
  180. package/lib/asset/loaders/texture.js.map +1 -1
  181. package/lib/asset/preload.js.map +1 -1
  182. package/lib/collision/check-collision.js +16 -16
  183. package/lib/collision/check-collision.js.map +1 -1
  184. package/lib/dom/dom-animated-sprite.js +21 -36
  185. package/lib/dom/dom-animated-sprite.js.map +1 -1
  186. package/lib/dom/dom-game-object.js +9 -7
  187. package/lib/dom/dom-game-object.js.map +1 -1
  188. package/lib/dom/dom-particle.js.map +1 -1
  189. package/lib/index.js +1 -0
  190. package/lib/index.js.map +1 -1
  191. package/lib/node/core/dirty-number.js +0 -19
  192. package/lib/node/core/dirty-number.js.map +1 -1
  193. package/lib/node/core/renderable.js +7 -0
  194. package/lib/node/core/renderable.js.map +1 -1
  195. package/lib/node/core/transform.js +22 -11
  196. package/lib/node/core/transform.js.map +1 -1
  197. package/lib/node/ext/animated-sprite.js +3 -22
  198. package/lib/node/ext/animated-sprite.js.map +1 -1
  199. package/lib/node/ext/bitmap-text.js +7 -3
  200. package/lib/node/ext/bitmap-text.js.map +1 -1
  201. package/lib/node/ext/circle.js +18 -3
  202. package/lib/node/ext/circle.js.map +1 -1
  203. package/lib/node/ext/deplay.js +2 -0
  204. package/lib/node/ext/deplay.js.map +1 -1
  205. package/lib/node/ext/dom-container.js +2 -2
  206. package/lib/node/ext/dom-container.js.map +1 -1
  207. package/lib/node/ext/interval.js +2 -0
  208. package/lib/node/ext/interval.js.map +1 -1
  209. package/lib/node/ext/particle.js.map +1 -1
  210. package/lib/node/ext/rectangle.js +24 -4
  211. package/lib/node/ext/rectangle.js.map +1 -1
  212. package/lib/node/physics/physics-object.js +9 -29
  213. package/lib/node/physics/physics-object.js.map +1 -1
  214. package/lib/node/physics/physics-world.js +2 -0
  215. package/lib/node/physics/physics-world.js.map +1 -1
  216. package/lib/node/physics/rigidbodies.js +7 -0
  217. package/lib/node/physics/rigidbodies.js.map +1 -0
  218. package/lib/renderer/renderer.js +3 -2
  219. package/lib/renderer/renderer.js.map +1 -1
  220. package/lib/types/animation-atlas.js +2 -0
  221. package/lib/types/animation-atlas.js.map +1 -0
  222. package/lib/types/asset/loaders/audio.d.ts +1 -0
  223. package/lib/types/asset/loaders/audio.d.ts.map +1 -1
  224. package/lib/types/asset/loaders/binary.d.ts +1 -0
  225. package/lib/types/asset/loaders/binary.d.ts.map +1 -1
  226. package/lib/types/asset/loaders/bitmap-font.d.ts +1 -0
  227. package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -1
  228. package/lib/types/asset/loaders/font.d.ts +1 -0
  229. package/lib/types/asset/loaders/font.d.ts.map +1 -1
  230. package/lib/types/asset/loaders/spritesheet.d.ts +11 -3
  231. package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
  232. package/lib/types/asset/loaders/text.d.ts +1 -0
  233. package/lib/types/asset/loaders/text.d.ts.map +1 -1
  234. package/lib/types/asset/loaders/texture.d.ts +1 -1
  235. package/lib/types/asset/loaders/texture.d.ts.map +1 -1
  236. package/lib/types/asset/preload.d.ts +2 -2
  237. package/lib/types/asset/preload.d.ts.map +1 -1
  238. package/lib/types/atlas copy.js +2 -0
  239. package/lib/types/atlas copy.js.map +1 -0
  240. package/lib/types/atlas.js +2 -0
  241. package/lib/types/atlas.js.map +1 -0
  242. package/lib/types/dom/dom-animated-sprite.d.ts +4 -10
  243. package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -1
  244. package/lib/types/dom/dom-game-object.d.ts +1 -1
  245. package/lib/types/dom/dom-game-object.d.ts.map +1 -1
  246. package/lib/types/dom/dom-particle.d.ts.map +1 -1
  247. package/lib/types/index.d.ts +2 -0
  248. package/lib/types/index.d.ts.map +1 -1
  249. package/lib/types/node/core/dirty-number.d.ts +0 -8
  250. package/lib/types/node/core/dirty-number.d.ts.map +1 -1
  251. package/lib/types/node/core/renderable.d.ts +1 -0
  252. package/lib/types/node/core/renderable.d.ts.map +1 -1
  253. package/lib/types/node/core/transform.d.ts +4 -2
  254. package/lib/types/node/core/transform.d.ts.map +1 -1
  255. package/lib/types/node/ext/animated-sprite.d.ts +4 -10
  256. package/lib/types/node/ext/animated-sprite.d.ts.map +1 -1
  257. package/lib/types/node/ext/bitmap-text.d.ts.map +1 -1
  258. package/lib/types/node/ext/circle.d.ts +3 -3
  259. package/lib/types/node/ext/circle.d.ts.map +1 -1
  260. package/lib/types/node/ext/deplay.d.ts.map +1 -1
  261. package/lib/types/node/ext/dom-container.d.ts +1 -1
  262. package/lib/types/node/ext/dom-container.d.ts.map +1 -1
  263. package/lib/types/node/ext/interval.d.ts.map +1 -1
  264. package/lib/types/node/ext/particle.d.ts.map +1 -1
  265. package/lib/types/node/ext/rectangle.d.ts +4 -4
  266. package/lib/types/node/ext/rectangle.d.ts.map +1 -1
  267. package/lib/types/node/physics/physics-object.d.ts +2 -2
  268. package/lib/types/node/physics/physics-object.d.ts.map +1 -1
  269. package/lib/types/node/physics/physics-world.d.ts.map +1 -1
  270. package/lib/types/node/physics/rigidbodies.d.ts +23 -0
  271. package/lib/types/node/physics/rigidbodies.d.ts.map +1 -0
  272. package/lib/types/renderer/renderer.d.ts.map +1 -1
  273. package/lib/types/sprite-atlas.js +2 -0
  274. package/lib/types/sprite-atlas.js.map +1 -0
  275. package/lib/types/types/animation-atlas.d.ts +14 -0
  276. package/lib/types/types/animation-atlas.d.ts.map +1 -0
  277. package/lib/types/types/atlas copy.d.ts +12 -0
  278. package/lib/types/types/atlas copy.d.ts.map +1 -0
  279. package/lib/types/types/atlas.d.ts +16 -0
  280. package/lib/types/types/atlas.d.ts.map +1 -0
  281. package/lib/types/types/sprite-atlas.d.ts +13 -0
  282. package/lib/types/types/sprite-atlas.d.ts.map +1 -0
  283. package/package.json +1 -1
  284. package/src/asset/loaders/audio.ts +5 -2
  285. package/src/asset/loaders/binary.ts +5 -1
  286. package/src/asset/loaders/bitmap-font.ts +33 -27
  287. package/src/asset/loaders/font.ts +4 -0
  288. package/src/asset/loaders/spritesheet.ts +18 -5
  289. package/src/asset/loaders/text.ts +4 -0
  290. package/src/asset/loaders/texture.ts +19 -27
  291. package/src/asset/preload.ts +4 -8
  292. package/src/collision/check-collision.ts +16 -16
  293. package/src/dom/dom-animated-sprite.ts +24 -45
  294. package/src/dom/dom-game-object.ts +9 -6
  295. package/src/dom/dom-particle.ts +1 -1
  296. package/src/index.ts +2 -0
  297. package/src/node/core/dirty-number.ts +0 -24
  298. package/src/node/core/renderable.ts +7 -0
  299. package/src/node/core/transform.ts +23 -11
  300. package/src/node/ext/animated-sprite.ts +9 -29
  301. package/src/node/ext/bitmap-text.ts +7 -3
  302. package/src/node/ext/circle.ts +18 -3
  303. package/src/node/ext/deplay.ts +1 -0
  304. package/src/node/ext/dom-container.ts +2 -2
  305. package/src/node/ext/interval.ts +1 -0
  306. package/src/node/ext/particle.ts +1 -1
  307. package/src/node/ext/rectangle.ts +24 -4
  308. package/src/node/physics/physics-object.ts +11 -40
  309. package/src/node/physics/physics-world.ts +1 -0
  310. package/src/node/physics/rigidbodies.ts +14 -0
  311. package/src/renderer/renderer.ts +4 -3
  312. package/src/types/atlas.ts +17 -0
  313. package/examples/flappy-cat/assets/bgm/bgm.ogg +0 -0
  314. package/examples/flappy-cat/assets/images/base.png +0 -0
  315. package/examples/flappy-cat/assets/images/bg.png +0 -0
  316. package/examples/flappy-cat/assets/images/cat.png +0 -0
  317. package/examples/flappy-cat/assets/images/pipe-green.png +0 -0
  318. package/examples/flappy-cat/assets/images/pipe-red.png +0 -0
  319. package/examples/flappy-cat/assets/sfx/die.wav +0 -0
  320. package/examples/flappy-cat/assets/sfx/hit.wav +0 -0
  321. package/examples/flappy-cat/assets/sfx/point.wav +0 -0
  322. package/examples/flappy-cat/assets/sfx/wing.wav +0 -0
  323. package/examples/flappy-cat/dist/game.js +0 -0
  324. package/examples/flappy-cat/index.ts +0 -0
  325. /package/examples/{flappy-cat → auto-battle}/index.html +0 -0
@@ -29,7 +29,7 @@ function checkRectRectCollision(ca, ta, cb, tb) {
29
29
  const asx = ta.scaleX.v, asy = ta.scaleY.v;
30
30
  const ahx = abs(ca.width * asx) * 0.5;
31
31
  const ahy = abs(ca.height * asy) * 0.5;
32
- const cA = ta.rotation.cos, sA = ta.rotation.sin;
32
+ const cA = ta.cos, sA = ta.sin;
33
33
  const aux = cA, auy = sA;
34
34
  const avx = -sA, avy = cA;
35
35
  // apply rotated local offset for center
@@ -41,7 +41,7 @@ function checkRectRectCollision(ca, ta, cb, tb) {
41
41
  const bsx = tb.scaleX.v, bsy = tb.scaleY.v;
42
42
  const bhx = abs(cb.width * bsx) * 0.5;
43
43
  const bhy = abs(cb.height * bsy) * 0.5;
44
- const cB = tb.rotation.cos, sB = tb.rotation.sin;
44
+ const cB = tb.cos, sB = tb.sin;
45
45
  const bux = cB, buy = sB;
46
46
  const bvx = -sB, bvy = cB;
47
47
  const box = (cb.x || 0) * bsx;
@@ -78,7 +78,7 @@ let _ccx = 0, _ccy = 0;
78
78
  function circleCenterScratch(c, t) {
79
79
  // No object/array allocation; scalar math only
80
80
  const sx = t.scaleX.v, sy = t.scaleY.v;
81
- const cos = t.rotation.cos, sin = t.rotation.sin;
81
+ const cos = t.cos, sin = t.sin;
82
82
  // local axes
83
83
  const ux = cos, uy = sin;
84
84
  const vx = -sin, vy = cos;
@@ -111,7 +111,7 @@ function checkRectCircleCollision(r, tr, c, tc) {
111
111
  const rsx = tr.scaleX.v, rsy = tr.scaleY.v;
112
112
  const rhx = abs(r.width * rsx) * 0.5;
113
113
  const rhy = abs(r.height * rsy) * 0.5;
114
- const rc = tr.rotation.cos, rs = tr.rotation.sin;
114
+ const rc = tr.cos, rs = tr.sin;
115
115
  const rux = rc, ruy = rs;
116
116
  const rvx = -rs, rvy = rc;
117
117
  const rox = (r.x || 0) * rsx;
@@ -151,7 +151,7 @@ function checkPolyPolyCollision(a, ta, b, tb) {
151
151
  return false;
152
152
  // Frame A
153
153
  const asx = ta.scaleX.v, asy = ta.scaleY.v;
154
- const acs = ta.rotation.cos, asn = ta.rotation.sin;
154
+ const acs = ta.cos, asn = ta.sin;
155
155
  const aux = acs, auy = asn;
156
156
  const avx = -asn, avy = acs;
157
157
  const aox = (a.x || 0) * asx;
@@ -160,7 +160,7 @@ function checkPolyPolyCollision(a, ta, b, tb) {
160
160
  const acy = ta.y.v + auy * aox + avy * aoy;
161
161
  // Frame B
162
162
  const bsx = tb.scaleX.v, bsy = tb.scaleY.v;
163
- const bcs = tb.rotation.cos, bsn = tb.rotation.sin;
163
+ const bcs = tb.cos, bsn = tb.sin;
164
164
  const bux = bcs, buy = bsn;
165
165
  const bvx = -bsn, bvy = bcs;
166
166
  const box = (b.x || 0) * bsx;
@@ -249,7 +249,7 @@ function checkPolyCircleCollision(poly, tp, c, tc) {
249
249
  return false;
250
250
  // Poly frame
251
251
  const psx = tp.scaleX.v, psy = tp.scaleY.v;
252
- const pcs = tp.rotation.cos, psn = tp.rotation.sin;
252
+ const pcs = tp.cos, psn = tp.sin;
253
253
  const pux = pcs, puy = psn;
254
254
  const pvx = -psn, pvy = pcs;
255
255
  const pox = (poly.x || 0) * psx;
@@ -333,7 +333,7 @@ function checkPolyRectCollision(poly, tp, r, tr) {
333
333
  return false;
334
334
  // Poly frame
335
335
  const psx = tp.scaleX.v, psy = tp.scaleY.v;
336
- const pcs = tp.rotation.cos, psn = tp.rotation.sin;
336
+ const pcs = tp.cos, psn = tp.sin;
337
337
  const pux = pcs, puy = psn;
338
338
  const pvx = -psn, pvy = pcs;
339
339
  const pox = (poly.x || 0) * psx;
@@ -344,7 +344,7 @@ function checkPolyRectCollision(poly, tp, r, tr) {
344
344
  const rsx = tr.scaleX.v, rsy = tr.scaleY.v;
345
345
  const rhx = abs(r.width * rsx) * 0.5;
346
346
  const rhy = abs(r.height * rsy) * 0.5;
347
- const rc = tr.rotation.cos, rs = tr.rotation.sin;
347
+ const rc = tr.cos, rs = tr.sin;
348
348
  const rux = rc, ruy = rs;
349
349
  const rvx = -rs, rvy = rc;
350
350
  const rox = (r.x || 0) * rsx, roy = (r.y || 0) * rsy;
@@ -639,7 +639,7 @@ function checkEllipseRectCollision(e, te, r, tr) {
639
639
  const esx = te.scaleX.v, esy = te.scaleY.v;
640
640
  _Arx = abs(e.width * esx) * 0.5;
641
641
  _Ary = abs(e.height * esy) * 0.5;
642
- const ecs = te.rotation.cos, esn = te.rotation.sin;
642
+ const ecs = te.cos, esn = te.sin;
643
643
  _Aux = ecs;
644
644
  _Auy = esn;
645
645
  _Avx = -esn;
@@ -653,7 +653,7 @@ function checkEllipseRectCollision(e, te, r, tr) {
653
653
  const rsx = tr.scaleX.v, rsy = tr.scaleY.v;
654
654
  _Bhx = abs(r.width * rsx) * 0.5;
655
655
  _Bhy = abs(r.height * rsy) * 0.5;
656
- const rcs = tr.rotation.cos, rsn = tr.rotation.sin;
656
+ const rcs = tr.cos, rsn = tr.sin;
657
657
  _Bux = rcs;
658
658
  _Buy = rsn;
659
659
  _Bvx = -rsn;
@@ -670,7 +670,7 @@ function checkEllipseCircleCollision(e, te, c, tc) {
670
670
  const esx = te.scaleX.v, esy = te.scaleY.v;
671
671
  _Arx = abs(e.width * esx) * 0.5;
672
672
  _Ary = abs(e.height * esy) * 0.5;
673
- const ecs = te.rotation.cos, esn = te.rotation.sin;
673
+ const ecs = te.cos, esn = te.sin;
674
674
  _Aux = ecs;
675
675
  _Auy = esn;
676
676
  _Avx = -esn;
@@ -694,7 +694,7 @@ function checkEllipseEllipseCollision(a, ta, b, tb) {
694
694
  const asx = ta.scaleX.v, asy = ta.scaleY.v;
695
695
  _Arx = abs(a.width * asx) * 0.5;
696
696
  _Ary = abs(a.height * asy) * 0.5;
697
- const acs = ta.rotation.cos, asn = ta.rotation.sin;
697
+ const acs = ta.cos, asn = ta.sin;
698
698
  _Aux = acs;
699
699
  _Auy = asn;
700
700
  _Avx = -asn;
@@ -708,7 +708,7 @@ function checkEllipseEllipseCollision(a, ta, b, tb) {
708
708
  const bsx = tb.scaleX.v, bsy = tb.scaleY.v;
709
709
  _Brx = abs(b.width * bsx) * 0.5;
710
710
  _Bry = abs(b.height * bsy) * 0.5;
711
- const bcs = tb.rotation.cos, bsn = tb.rotation.sin;
711
+ const bcs = tb.cos, bsn = tb.sin;
712
712
  _Bux = bcs;
713
713
  _Buy = bsn;
714
714
  _Bvx = -bsn;
@@ -724,7 +724,7 @@ function checkEllipseEllipseCollision(a, ta, b, tb) {
724
724
  function checkPolyEllipseCollision(poly, tp, e, te) {
725
725
  // A = Poly (LOCAL + Transform) → use PolyLocal support; reuse A scratch slots
726
726
  const psx = tp.scaleX.v, psy = tp.scaleY.v;
727
- const pcs = tp.rotation.cos, psn = tp.rotation.sin;
727
+ const pcs = tp.cos, psn = tp.sin;
728
728
  const pux = pcs, puy = psn;
729
729
  const pvx = -psn, pvy = pcs;
730
730
  const pox = (poly.x || 0) * psx;
@@ -743,7 +743,7 @@ function checkPolyEllipseCollision(poly, tp, e, te) {
743
743
  const esx = te.scaleX.v, esy = te.scaleY.v;
744
744
  _Brx = abs(e.width * esx) * 0.5;
745
745
  _Bry = abs(e.height * esy) * 0.5;
746
- const ecs = te.rotation.cos, esn = te.rotation.sin;
746
+ const ecs = te.cos, esn = te.sin;
747
747
  _Bux = ecs;
748
748
  _Buy = esn;
749
749
  _Bvx = -esn;
@@ -1 +1 @@
1
- {"version":3,"file":"check-collision.js","sourceRoot":"","sources":["../../src/collision/check-collision.ts"],"names":[],"mappings":"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","sourcesContent":["import { WorldTransform } from '../node/core/transform'\nimport { CircleCollider, Collider, ColliderType, EllipseCollider, PolygonCollider, RectangleCollider } from './colliders'\n\n// =====================================================================================\n// Utilities (scalar-only, no allocations at runtime)\n// =====================================================================================\n\nconst abs = (v: number) => (v < 0 ? -v : v)\n\n// =====================================================================================\n// OBB helpers (scalar-only)\n// =====================================================================================\n\nfunction obbRadiusOnAxis(\n Lx: number, Ly: number,\n ux: number, uy: number, vx: number, vy: number, hx: number, hy: number\n) {\n // hx, hy must be >= 0; project axis onto OBB's local axes and scale by half extents.\n const Lu = Lx * ux + Ly * uy\n const Lv = Lx * vx + Ly * vy\n const a = hx * (Lu < 0 ? -Lu : Lu)\n const b = hy * (Lv < 0 ? -Lv : Lv)\n return a + b\n}\n\nfunction axisSeparates(\n Lx: number, Ly: number, dx: number, dy: number,\n aux: number, auy: number, avx: number, avy: number, ahx: number, ahy: number,\n bux: number, buy: number, bvx: number, bvy: number, bhx: number, bhy: number\n) {\n const dist = dx * Lx + dy * Ly\n const ad = dist < 0 ? -dist : dist\n const rA = obbRadiusOnAxis(Lx, Ly, aux, auy, avx, avy, ahx, ahy)\n const rB = obbRadiusOnAxis(Lx, Ly, bux, buy, bvx, bvy, bhx, bhy)\n return ad > (rA + rB)\n}\n\n// =====================================================================================\n// Rectangle–Rectangle (OBB–OBB) — SAT with 4 axes (no allocations)\n// =====================================================================================\n\nfunction checkRectRectCollision(\n ca: RectangleCollider, ta: WorldTransform,\n cb: RectangleCollider, tb: WorldTransform\n): boolean {\n // A frame (half extents must be non-negative)\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n const ahx = abs(ca.width * asx) * 0.5\n const ahy = abs(ca.height * asy) * 0.5\n const cA = ta.rotation.cos, sA = ta.rotation.sin\n const aux = cA, auy = sA\n const avx = -sA, avy = cA\n // apply rotated local offset for center\n const aox = (ca.x || 0) * asx\n const aoy = (ca.y || 0) * asy\n const ax = ta.x.v + aux * aox + avx * aoy\n const ay = ta.y.v + auy * aox + avy * aoy\n\n // B frame\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n const bhx = abs(cb.width * bsx) * 0.5\n const bhy = abs(cb.height * bsy) * 0.5\n const cB = tb.rotation.cos, sB = tb.rotation.sin\n const bux = cB, buy = sB\n const bvx = -sB, bvy = cB\n const box = (cb.x || 0) * bsx\n const boy = (cb.y || 0) * bsy\n const bx = tb.x.v + bux * box + bvx * boy\n const by = tb.y.v + buy * box + bvy * boy\n\n // Fast axis-aligned branch if both rotations are zero\n const rotA = ta.rotation.v, rotB = tb.rotation.v\n if ((rotA === 0 || rotA === 0.0) && (rotB === 0 || rotB === 0.0)) {\n const dx0 = bx - ax; const adx0 = dx0 < 0 ? -dx0 : dx0\n const dy0 = by - ay; const ady0 = dy0 < 0 ? -dy0 : dy0\n return (adx0 <= ahx + bhx) && (ady0 <= ahy + bhy)\n }\n\n const dx = bx - ax\n const dy = by - ay\n\n if (axisSeparates(aux, auy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(avx, avy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(bux, buy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(bvx, bvy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n\n return true\n}\n\n// =====================================================================================\n// Circle tools (no allocations)\n// =====================================================================================\n\n// scratch for circle center computations (reused everywhere; no runtime object creation)\nlet _ccx = 0, _ccy = 0\n\n// Writes the world-space center into (_ccx, _ccy).\nfunction circleCenterScratch(c: CircleCollider, t: WorldTransform): void {\n // No object/array allocation; scalar math only\n const sx = t.scaleX.v, sy = t.scaleY.v\n const cos = t.rotation.cos, sin = t.rotation.sin\n // local axes\n const ux = cos, uy = sin\n const vx = -sin, vy = cos\n // scaled local offset\n const ox = (c.x || 0) * sx\n const oy = (c.y || 0) * sy\n _ccx = t.x.v + ux * ox + vx * oy\n _ccy = t.y.v + uy * ox + vy * oy\n}\n\nfunction circleScaledRadius(c: CircleCollider, t: WorldTransform) {\n const sx = abs(t.scaleX.v), sy = abs(t.scaleY.v)\n return c.radius * (sx > sy ? sx : sy) // conservative\n}\n\nfunction checkCircleCircleCollision(\n ca: CircleCollider, ta: WorldTransform, cb: CircleCollider, tb: WorldTransform\n): boolean {\n circleCenterScratch(ca, ta); const ax = _ccx, ay = _ccy\n circleCenterScratch(cb, tb); const bx = _ccx, by = _ccy\n const ra = circleScaledRadius(ca, ta)\n const rb = circleScaledRadius(cb, tb)\n const dx = bx - ax, dy = by - ay\n const r = ra + rb\n return (dx * dx + dy * dy) <= r * r\n}\n\n// =====================================================================================\n// Rect–Circle (no allocations)\n// =====================================================================================\n\nfunction checkRectCircleCollision(\n r: RectangleCollider, tr: WorldTransform,\n c: CircleCollider, tc: WorldTransform\n): boolean {\n // Rect frame\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n const rhx = abs(r.width * rsx) * 0.5\n const rhy = abs(r.height * rsy) * 0.5\n const rc = tr.rotation.cos, rs = tr.rotation.sin\n const rux = rc, ruy = rs\n const rvx = -rs, rvy = rc\n const rox = (r.x || 0) * rsx\n const roy = (r.y || 0) * rsy\n const rcx = tr.x.v + rux * rox + rvx * roy\n const rcy = tr.y.v + ruy * rox + rvy * roy\n\n // Circle center + radius (into scratch scalars)\n circleCenterScratch(c, tc)\n const rr = circleScaledRadius(c, tc)\n\n // Project center delta onto rect local axes and clamp\n const dx = _ccx - rcx, dy = _ccy - rcy\n const qx = dx * rux + dy * ruy\n const qy = dx * rvx + dy * rvy\n const clx = qx < -rhx ? -rhx : (qx > rhx ? rhx : qx)\n const cly = qy < -rhy ? -rhy : (qy > rhy ? rhy : qy)\n const ddx = qx - clx\n const ddy = qy - cly\n return (ddx * ddx + ddy * ddy) <= rr * rr\n}\n\n// =====================================================================================\n// Polygon helpers — SAT (no allocations; polygons are in LOCAL space + Transform)\n// =====================================================================================\n\n/*\n Notes:\n - Polygons are stored in LOCAL space. We never allocate world-space copies.\n - For any world axis N = (nx, ny), projection of a local vertex (vx, vy) is:\n dot(N, C) + dot(N, U)*sx*vx + dot(N, V)*sy*vy\n where C is world center, U/V are world unit axes of the polygon frame,\n and sx/sy are scale on those local axes.\n - No objects/arrays are created at runtime. Only scalar computations and loops.\n*/\n\n// Poly–Poly (LOCAL + Transform)\nfunction checkPolyPolyCollision(\n a: PolygonCollider, ta: WorldTransform,\n b: PolygonCollider, tb: WorldTransform\n): boolean {\n const av = a.vertices, bv = b.vertices\n const na = av.length, nb = bv.length\n if (na === 0 || nb === 0) return false\n\n // Frame A\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n const acs = ta.rotation.cos, asn = ta.rotation.sin\n const aux = acs, auy = asn\n const avx = -asn, avy = acs\n const aox = ((a as any).x || 0) * asx\n const aoy = ((a as any).y || 0) * asy\n const acx = ta.x.v + aux * aox + avx * aoy\n const acy = ta.y.v + auy * aox + avy * aoy\n\n // Frame B\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n const bcs = tb.rotation.cos, bsn = tb.rotation.sin\n const bux = bcs, buy = bsn\n const bvx = -bsn, bvy = bcs\n const box = ((b as any).x || 0) * bsx\n const boy = ((b as any).y || 0) * bsy\n const bcx = tb.x.v + bux * box + bvx * boy\n const bcy = tb.y.v + buy * box + bvy * boy\n\n let i = 0, j = 0, k = 0\n\n // A's edge axes\n for (i = 0; i < na; i++) {\n j = (i + 1) % na\n const adx = av[j].x - av[i].x\n const ady = av[j].y - av[i].y\n // edge in world: Ew = U*(sx*dx) + V*(sy*dy)\n const ewx = aux * (asx * adx) + avx * (asy * ady)\n const ewy = auy * (asx * adx) + avy * (asy * ady)\n const nx = -ewy, ny = ewx // world normal (no normalization)\n\n // project A on (nx,ny)\n const kUa = (nx * aux + ny * auy) * asx\n const kVa = (nx * avx + ny * avy) * asy\n const baseA = nx * acx + ny * acy\n let minA = Infinity, maxA = -Infinity\n for (k = 0; k < na; k++) {\n const s = baseA + kUa * av[k].x + kVa * av[k].y\n if (s < minA) minA = s\n if (s > maxA) maxA = s\n }\n\n // project B on (nx,ny)\n const kUb = (nx * bux + ny * buy) * bsx\n const kVb = (nx * bvx + ny * bvy) * bsy\n const baseB = nx * bcx + ny * bcy\n let minB = Infinity, maxB = -Infinity\n for (k = 0; k < nb; k++) {\n const s = baseB + kUb * bv[k].x + kVb * bv[k].y\n if (s < minB) minB = s\n if (s > maxB) maxB = s\n }\n\n if (maxA < minB || maxB < minA) return false\n }\n\n // B's edge axes\n for (i = 0; i < nb; i++) {\n j = (i + 1) % nb\n const bdx = bv[j].x - bv[i].x\n const bdy = bv[j].y - bv[i].y\n const ewx = bux * (bsx * bdx) + bvx * (bsy * bdy)\n const ewy = buy * (bsx * bdx) + bvy * (bsy * bdy)\n const nx = -ewy, ny = ewx\n\n // project A\n const kUa = (nx * aux + ny * auy) * asx\n const kVa = (nx * avx + ny * avy) * asy\n const baseA = nx * acx + ny * acy\n let minA = Infinity, maxA = -Infinity\n for (k = 0; k < na; k++) {\n const s = baseA + kUa * av[k].x + kVa * av[k].y\n if (s < minA) minA = s\n if (s > maxA) maxA = s\n }\n\n // project B\n const kUb = (nx * bux + ny * buy) * bsx\n const kVb = (nx * bvx + ny * bvy) * bsy\n const baseB = nx * bcx + ny * bcy\n let minB = Infinity, maxB = -Infinity\n for (k = 0; k < nb; k++) {\n const s = baseB + kUb * bv[k].x + kVb * bv[k].y\n if (s < minB) minB = s\n if (s > maxB) maxB = s\n }\n\n if (maxA < minB || maxB < minA) return false\n }\n\n return true\n}\n\n// Poly–Circle (LOCAL + Transform)\nfunction checkPolyCircleCollision(poly: PolygonCollider, tp: WorldTransform, c: CircleCollider, tc: WorldTransform): boolean {\n const v = poly.vertices; const n = v.length; if (n === 0) return false\n\n // Poly frame\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.rotation.cos, psn = tp.rotation.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n const pcx = tp.x.v + pux * pox + pvx * poy\n const pcy = tp.y.v + puy * pox + pvy * poy\n\n // Circle center + radius\n circleCenterScratch(c, tc)\n const CCx = _ccx, CCy = _ccy\n const rr = circleScaledRadius(c, tc)\n\n let i = 0, j = 0, k = 0\n\n // (A) Polygon edge axes\n for (i = 0; i < n; i++) {\n j = (i + 1) % n\n const dx = v[j].x - v[i].x\n const dy = v[j].y - v[i].y\n const ewx = pux * (psx * dx) + pvx * (psy * dy)\n const ewy = puy * (psx * dx) + pvy * (psy * dy)\n const nx = -ewy, ny = ewx\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (k = 0; k < n; k++) {\n const s = baseP + kUp * v[k].x + kVp * v[k].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const nlen = Math.hypot(nx, ny)\n const cProj = nx * CCx + ny * CCy\n const minC = cProj - rr * nlen\n const maxC = cProj + rr * nlen\n if (maxP < minC || maxC < minP) return false\n }\n\n // (B) Closest-vertex axis\n let bestDx = 0, bestDy = 0, bestD2 = Infinity\n for (i = 0; i < n; i++) {\n const wx = pcx + pux * (psx * v[i].x) + pvx * (psy * v[i].y)\n const wy = pcy + puy * (psx * v[i].x) + pvy * (psy * v[i].y)\n const dx = CCx - wx\n const dy = CCy - wy\n const d2 = dx * dx + dy * dy\n if (d2 < bestD2) { bestD2 = d2; bestDx = dx; bestDy = dy }\n }\n if (bestD2 === 0) return true\n {\n const nx = bestDx, ny = bestDy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const nlen = Math.hypot(nx, ny)\n const cProj = nx * CCx + ny * CCy\n const minC = cProj - rr * nlen\n const maxC = cProj + rr * nlen\n if (maxP < minC || maxC < minP) return false\n }\n\n return true\n}\n\n// Poly–Rect (LOCAL + Transform)\nfunction checkPolyRectCollision(poly: PolygonCollider, tp: WorldTransform, r: RectangleCollider, tr: WorldTransform): boolean {\n const v = poly.vertices; const n = v.length; if (n === 0) return false\n\n // Poly frame\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.rotation.cos, psn = tp.rotation.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n const pcx = tp.x.v + pux * pox + pvx * poy\n const pcy = tp.y.v + puy * pox + pvy * poy\n\n // Rect frame\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n const rhx = abs(r.width * rsx) * 0.5\n const rhy = abs(r.height * rsy) * 0.5\n const rc = tr.rotation.cos, rs = tr.rotation.sin\n const rux = rc, ruy = rs\n const rvx = -rs, rvy = rc\n const rox = (r.x || 0) * rsx, roy = (r.y || 0) * rsy\n const rcx = tr.x.v + rux * rox + rvx * roy\n const rcy = tr.y.v + ruy * rox + rvy * roy\n\n let i = 0, j = 0, k = 0\n\n // (A) polygon edge axes\n for (i = 0; i < n; i++) {\n j = (i + 1) % n\n const dx = v[j].x - v[i].x\n const dy = v[j].y - v[i].y\n const ewx = pux * (psx * dx) + pvx * (psy * dy)\n const ewy = puy * (psx * dx) + pvy * (psy * dy)\n const nx = -ewy, ny = ewx\n\n // poly projection\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (k = 0; k < n; k++) {\n const s = baseP + kUp * v[k].x + kVp * v[k].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n\n // rect projection radius on axis\n const nu = nx * rux + ny * ruy\n const nv = nx * rvx + ny * rvy\n const rRad = rhx * (nu < 0 ? -nu : nu) + rhy * (nv < 0 ? -nv : nv)\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rRad\n const maxR = cProj + rRad\n if (maxP < minR || maxR < minP) return false\n }\n\n // (B) rect axis u\n {\n const nx = rux, ny = ruy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rhx\n const maxR = cProj + rhx\n if (maxP < minR || maxR < minP) return false\n }\n // (C) rect axis v\n {\n const nx = rvx, ny = rvy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rhy\n const maxR = cProj + rhy\n if (maxP < minR || maxR < minP) return false\n }\n\n return true\n}\n\n// =====================================================================================\n// GJK (no allocations: global scratch + selectable supports) — FIXED/ROBUST\n// =====================================================================================\n\n// Global scratch for support result\nlet _sx = 0, _sy = 0\n\n// Support selectors\nconst enum SupportType { None = 0, Ellipse = 1, OBB = 2, Circle = 3, Poly = 4, PolyLocal = 5 }\nlet _supportAType = SupportType.None\nlet _supportBType = SupportType.None\n\n// A-shape params\nlet _Acx = 0, _Acy = 0, _Aux = 0, _Auy = 0, _Avx = 0, _Avy = 0, _Arx = 0, _Ary = 0, _Ahx = 0, _Ahy = 0, _Arr = 0\nlet _Apoly: { x: number, y: number }[] | null = null\n\n// B-shape params\nlet _Bcx = 0, _Bcy = 0, _Bux = 0, _Buy = 0, _Bvx = 0, _Bvy = 0, _Brx = 0, _Bry = 0, _Bhx = 0, _Bhy = 0, _Brr = 0\nlet _Bpoly: { x: number, y: number }[] | null = null\n\nfunction setSupportCircle(dx: number, dy: number, cx: number, cy: number, r: number) {\n const len = Math.hypot(dx, dy)\n if (len === 0) { _sx = cx; _sy = cy; return }\n const inv = 1 / len\n _sx = cx + dx * inv * r\n _sy = cy + dy * inv * r\n}\n\nfunction setSupportOBB(\n dx: number, dy: number,\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, hx: number, hy: number\n) {\n const du = dx * ux + dy * uy\n const dv = dx * vx + dy * vy\n const sx = du >= 0 ? 1 : -1\n const sy = dv >= 0 ? 1 : -1\n _sx = cx + ux * hx * sx + vx * hy * sy\n _sy = cy + uy * hx * sx + vy * hy * sy\n}\n\nfunction dvDy(dy: number, a: number) { return dy * a } // tiny inline helper (prevents temp vars)\n\nfunction setSupportEllipse(\n dx: number, dy: number,\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, rx: number, ry: number\n) {\n const du = dx * ux + dvDy(dy, uy)\n const dv = dx * vx + dvDy(dy, vy)\n const denom = Math.hypot(rx * du, ry * dv)\n if (denom === 0) { _sx = cx; _sy = cy; return }\n const kU = (rx * rx * du) / denom\n const kV = (ry * ry * dv) / denom\n _sx = cx + kU * ux + kV * vx\n _sy = cy + kU * uy + kV * vy\n}\n\nfunction setSupportPoly(dx: number, dy: number, verts: { x: number, y: number }[]) {\n let best = 0, bestDot = -Infinity\n for (let i = 0, n = verts.length; i < n; i++) {\n const vx = verts[i].x, vy = verts[i].y\n const d = dx * vx + dy * vy\n if (d > bestDot) { bestDot = d; best = i }\n }\n _sx = verts[best].x\n _sy = verts[best].y\n}\n\n// PolyLocal support: verts in LOCAL, with frame (cx,cy, U/V, sx/sy)\nfunction setSupportPolyLocal(\n dx: number, dy: number,\n verts: { x: number, y: number }[],\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, sx: number, sy: number\n) {\n const kU = (dx * ux + dy * uy) * sx\n const kV = (dx * vx + dy * vy) * sy\n let best = 0, bestDot = -Infinity\n for (let i = 0, n = verts.length; i < n; i++) {\n const s = kU * verts[i].x + kV * verts[i].y\n if (s > bestDot) { bestDot = s; best = i }\n }\n const lx = verts[best].x, ly = verts[best].y\n _sx = cx + ux * (sx * lx) + vx * (sy * ly)\n _sy = cy + uy * (sx * lx) + vy * (sy * ly)\n}\n\nfunction supportA(dx: number, dy: number) {\n if (_supportAType === SupportType.Ellipse) setSupportEllipse(dx, dy, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Arx, _Ary)\n else if (_supportAType === SupportType.OBB) setSupportOBB(dx, dy, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Ahx, _Ahy)\n else if (_supportAType === SupportType.Circle) setSupportCircle(dx, dy, _Acx, _Acy, _Arr)\n else if (_supportAType === SupportType.Poly) setSupportPoly(dx, dy, _Apoly!)\n else if (_supportAType === SupportType.PolyLocal) setSupportPolyLocal(dx, dy, _Apoly!, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Arx, _Ary)\n else { _sx = 0; _sy = 0 }\n}\nfunction supportB(dx: number, dy: number) {\n if (_supportBType === SupportType.Ellipse) setSupportEllipse(dx, dy, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Brx, _Bry)\n else if (_supportBType === SupportType.OBB) setSupportOBB(dx, dy, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Bhx, _Bhy)\n else if (_supportBType === SupportType.Circle) setSupportCircle(dx, dy, _Bcx, _Bcy, _Brr)\n else if (_supportBType === SupportType.Poly) setSupportPoly(dx, dy, _Bpoly!)\n else if (_supportBType === SupportType.PolyLocal) setSupportPolyLocal(dx, dy, _Bpoly!, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Brx, _Bry)\n else { _sx = 0; _sy = 0 }\n}\n\n// GJK core — returns true if intersection (robust; no allocations)\nfunction gjkIntersectsNoAlloc(): boolean {\n // EPS guards degenerate directions/points\n const EPS = 1e-9\n const EPS2 = EPS * EPS\n\n // simplex points (A = most recently added)\n let ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0\n let n = 0\n\n // search direction\n let dx = 1, dy = 0\n\n // Adds a new support point as A and shifts previous (C<-B, B<-A)\n function addPointAsA() {\n supportA(dx, dy); const pax = _sx, pay = _sy\n supportB(-dx, -dy); const pbx = _sx, pby = _sy\n const px = pax - pbx, py = pay - pby\n cx = bx; cy = by\n bx = ax; by = ay\n ax = px; ay = py\n if (n < 3) n++\n }\n\n addPointAsA()\n if (ax * ax + ay * ay <= EPS2) return true // origin exactly (or ~) hit\n dx = -ax; dy = -ay\n\n for (let iter = 0; iter < 32; iter++) {\n const dLen2 = dx * dx + dy * dy\n if (dLen2 <= EPS2) return true // direction collapsed → enclosed\n\n addPointAsA()\n\n // If new point A does not pass beyond origin along d, shapes are separated\n const Ad = ax * dx + ay * dy\n if (Ad <= 0) return false\n if (ax * ax + ay * ay <= EPS2) return true\n\n if (n === 2) {\n // Segment (B-A). Use triple product to get perpendicular toward origin: d = triple(AB, AO, AB)\n const abx = bx - ax, aby = by - ay\n const aox = -ax, aoy = -ay\n const ac = abx * abx + aby * aby // (AB·AB)\n const bc = aox * abx + aoy * aby // (AO·AB)\n dx = aox * ac - abx * bc // AO*(AB·AB) - AB*(AO·AB)\n dy = aoy * ac - aby * bc\n continue\n }\n\n // Triangle (C-B-A), A is the latest point\n const abx = bx - ax, aby = by - ay\n const acx = cx - ax, acy = cy - ay\n const aox = -ax, aoy = -ay\n\n // abPerp = triple(AC, AO, AB)\n const ac_ab = acx * abx + acy * aby // (AC·AB)\n const ao_ab = aox * abx + aoy * aby // (AO·AB)\n let t1x = aox * ac_ab - acx * ao_ab\n let t1y = aoy * ac_ab - acy * ao_ab\n if (t1x * aox + t1y * aoy > 0) {\n // Origin is in the AB region: drop C -> segment(B-A)\n cx = bx; cy = by; n = 2\n dx = t1x; dy = t1y\n continue\n }\n\n // acPerp = triple(AB, AO, AC)\n const ab_ac = abx * acx + aby * acy // (AB·AC)\n const ao_ac = aox * acx + aoy * acy // (AO·AC)\n let t2x = aox * ab_ac - abx * ao_ac\n let t2y = aoy * ab_ac - aby * ao_ac\n if (t2x * aox + t2y * aoy > 0) {\n // Origin is in the AC region: drop B -> segment(C-A)\n bx = cx; by = cy; n = 2\n dx = t2x; dy = t2y\n continue\n }\n\n // Origin is inside triangle\n return true\n }\n\n // Conservative fallback\n return false\n}\n\n// =====================================================================================\n// Ellipse interactions via GJK (no allocations)\n// =====================================================================================\n\nfunction checkEllipseRectCollision(\n e: EllipseCollider, te: WorldTransform,\n r: RectangleCollider, tr: WorldTransform\n): boolean {\n // A = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Arx = abs(e.width * esx) * 0.5\n _Ary = abs(e.height * esy) * 0.5\n const ecs = te.rotation.cos, esn = te.rotation.sin\n _Aux = ecs; _Auy = esn; _Avx = -esn; _Avy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Acx = te.x.v + _Aux * eox + _Avx * eoy\n _Acy = te.y.v + _Auy * eox + _Avy * eoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B = OBB (rect)\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n _Bhx = abs(r.width * rsx) * 0.5\n _Bhy = abs(r.height * rsy) * 0.5\n const rcs = tr.rotation.cos, rsn = tr.rotation.sin\n _Bux = rcs; _Buy = rsn; _Bvx = -rsn; _Bvy = rcs\n const rox = (r.x || 0) * rsx, roy = (r.y || 0) * rsy\n _Bcx = tr.x.v + _Bux * rox + _Bvx * roy\n _Bcy = tr.y.v + _Buy * rox + _Bvy * roy\n _supportBType = SupportType.OBB\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\nfunction checkEllipseCircleCollision(\n e: EllipseCollider, te: WorldTransform,\n c: CircleCollider, tc: WorldTransform\n): boolean {\n // A = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Arx = abs(e.width * esx) * 0.5\n _Ary = abs(e.height * esy) * 0.5\n const ecs = te.rotation.cos, esn = te.rotation.sin\n _Aux = ecs; _Auy = esn; _Avx = -esn; _Avy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Acx = te.x.v + _Aux * eox + _Avx * eoy\n _Acy = te.y.v + _Auy * eox + _Avy * eoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B = Circle\n circleCenterScratch(c, tc)\n _Bcx = _ccx; _Bcy = _ccy\n _Brr = circleScaledRadius(c, tc)\n _supportBType = SupportType.Circle\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\nfunction checkEllipseEllipseCollision(\n a: EllipseCollider, ta: WorldTransform,\n b: EllipseCollider, tb: WorldTransform\n): boolean {\n // A\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n _Arx = abs(a.width * asx) * 0.5\n _Ary = abs(a.height * asy) * 0.5\n const acs = ta.rotation.cos, asn = ta.rotation.sin\n _Aux = acs; _Auy = asn; _Avx = -asn; _Avy = acs\n const aox = (a.x || 0) * asx, aoy = (a.y || 0) * asy\n _Acx = ta.x.v + _Aux * aox + _Avx * aoy\n _Acy = ta.y.v + _Auy * aox + _Avy * aoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n _Brx = abs(b.width * bsx) * 0.5\n _Bry = abs(b.height * bsy) * 0.5\n const bcs = tb.rotation.cos, bsn = tb.rotation.sin\n _Bux = bcs; _Buy = bsn; _Bvx = -bsn; _Bvy = bcs\n const box = (b.x || 0) * bsx, boy = (b.y || 0) * bsy\n _Bcx = tb.x.v + _Bux * box + _Bvx * boy\n _Bcy = tb.y.v + _Buy * box + _Bvy * boy\n _supportBType = SupportType.Ellipse\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\n// Poly–Ellipse via GJK (Poly in LOCAL + Transform, Ellipse in LOCAL + Transform)\nfunction checkPolyEllipseCollision(poly: PolygonCollider, tp: WorldTransform, e: EllipseCollider, te: WorldTransform): boolean {\n // A = Poly (LOCAL + Transform) → use PolyLocal support; reuse A scratch slots\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.rotation.cos, psn = tp.rotation.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n _Acx = tp.x.v + pux * pox + pvx * poy\n _Acy = tp.y.v + puy * pox + pvy * poy\n _Aux = pux; _Auy = puy; _Avx = pvx; _Avy = pvy\n _Arx = psx; _Ary = psy\n _Apoly = poly.vertices\n _supportAType = SupportType.PolyLocal\n\n // B = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Brx = abs(e.width * esx) * 0.5\n _Bry = abs(e.height * esy) * 0.5\n const ecs = te.rotation.cos, esn = te.rotation.sin\n _Bux = ecs; _Buy = esn; _Bvx = -esn; _Bvy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Bcx = te.x.v + _Bux * eox + _Bvx * eoy\n _Bcy = te.y.v + _Buy * eox + _Bvy * eoy\n _Bpoly = null\n _supportBType = SupportType.Ellipse\n\n return gjkIntersectsNoAlloc()\n}\n\n// =====================================================================================\n// Dispatcher (no allocations)\n// =====================================================================================\n\nexport function checkCollision(ca: Collider, ta: WorldTransform, cb: Collider, tb: WorldTransform): boolean {\n // Rectangle–Rectangle\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Rectangle)\n return checkRectRectCollision(ca, ta, cb, tb)\n\n // Circle–Circle\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Circle)\n return checkCircleCircleCollision(ca, ta, cb, tb)\n\n // Rect–Circle (both orders)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Circle)\n return checkRectCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Rectangle)\n return checkRectCircleCollision(cb, tb, ca, ta)\n\n // Polygon–Polygon (LOCAL + Transform)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Polygon)\n return checkPolyPolyCollision(ca, ta, cb, tb)\n\n // Polygon–Circle (both orders; LOCAL + Transform for polygon)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Circle)\n return checkPolyCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Polygon)\n return checkPolyCircleCollision(cb, tb, ca, ta)\n\n // Polygon–Rect (both orders; LOCAL + Transform for polygon)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Rectangle)\n return checkPolyRectCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Polygon)\n return checkPolyRectCollision(cb, tb, ca, ta)\n\n // Ellipse interactions via GJK\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Rectangle)\n return checkEllipseRectCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Ellipse)\n return checkEllipseRectCollision(cb, tb, ca, ta)\n\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Circle)\n return checkEllipseCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Ellipse)\n return checkEllipseCircleCollision(cb, tb, ca, ta)\n\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Ellipse)\n return checkEllipseEllipseCollision(ca, ta, cb, tb)\n\n // Polygon–Ellipse (both orders; polygon is LOCAL + Transform via PolyLocal support)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Ellipse)\n return checkPolyEllipseCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Polygon)\n return checkPolyEllipseCollision(cb, tb, ca, ta)\n\n return false\n}\n"]}
1
+ {"version":3,"file":"check-collision.js","sourceRoot":"","sources":["../../src/collision/check-collision.ts"],"names":[],"mappings":"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","sourcesContent":["import { WorldTransform } from '../node/core/transform'\nimport { CircleCollider, Collider, ColliderType, EllipseCollider, PolygonCollider, RectangleCollider } from './colliders'\n\n// =====================================================================================\n// Utilities (scalar-only, no allocations at runtime)\n// =====================================================================================\n\nconst abs = (v: number) => (v < 0 ? -v : v)\n\n// =====================================================================================\n// OBB helpers (scalar-only)\n// =====================================================================================\n\nfunction obbRadiusOnAxis(\n Lx: number, Ly: number,\n ux: number, uy: number, vx: number, vy: number, hx: number, hy: number\n) {\n // hx, hy must be >= 0; project axis onto OBB's local axes and scale by half extents.\n const Lu = Lx * ux + Ly * uy\n const Lv = Lx * vx + Ly * vy\n const a = hx * (Lu < 0 ? -Lu : Lu)\n const b = hy * (Lv < 0 ? -Lv : Lv)\n return a + b\n}\n\nfunction axisSeparates(\n Lx: number, Ly: number, dx: number, dy: number,\n aux: number, auy: number, avx: number, avy: number, ahx: number, ahy: number,\n bux: number, buy: number, bvx: number, bvy: number, bhx: number, bhy: number\n) {\n const dist = dx * Lx + dy * Ly\n const ad = dist < 0 ? -dist : dist\n const rA = obbRadiusOnAxis(Lx, Ly, aux, auy, avx, avy, ahx, ahy)\n const rB = obbRadiusOnAxis(Lx, Ly, bux, buy, bvx, bvy, bhx, bhy)\n return ad > (rA + rB)\n}\n\n// =====================================================================================\n// Rectangle–Rectangle (OBB–OBB) — SAT with 4 axes (no allocations)\n// =====================================================================================\n\nfunction checkRectRectCollision(\n ca: RectangleCollider, ta: WorldTransform,\n cb: RectangleCollider, tb: WorldTransform\n): boolean {\n // A frame (half extents must be non-negative)\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n const ahx = abs(ca.width * asx) * 0.5\n const ahy = abs(ca.height * asy) * 0.5\n const cA = ta.cos, sA = ta.sin\n const aux = cA, auy = sA\n const avx = -sA, avy = cA\n // apply rotated local offset for center\n const aox = (ca.x || 0) * asx\n const aoy = (ca.y || 0) * asy\n const ax = ta.x.v + aux * aox + avx * aoy\n const ay = ta.y.v + auy * aox + avy * aoy\n\n // B frame\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n const bhx = abs(cb.width * bsx) * 0.5\n const bhy = abs(cb.height * bsy) * 0.5\n const cB = tb.cos, sB = tb.sin\n const bux = cB, buy = sB\n const bvx = -sB, bvy = cB\n const box = (cb.x || 0) * bsx\n const boy = (cb.y || 0) * bsy\n const bx = tb.x.v + bux * box + bvx * boy\n const by = tb.y.v + buy * box + bvy * boy\n\n // Fast axis-aligned branch if both rotations are zero\n const rotA = ta.rotation.v, rotB = tb.rotation.v\n if ((rotA === 0 || rotA === 0.0) && (rotB === 0 || rotB === 0.0)) {\n const dx0 = bx - ax; const adx0 = dx0 < 0 ? -dx0 : dx0\n const dy0 = by - ay; const ady0 = dy0 < 0 ? -dy0 : dy0\n return (adx0 <= ahx + bhx) && (ady0 <= ahy + bhy)\n }\n\n const dx = bx - ax\n const dy = by - ay\n\n if (axisSeparates(aux, auy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(avx, avy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(bux, buy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n if (axisSeparates(bvx, bvy, dx, dy, aux, auy, avx, avy, ahx, ahy, bux, buy, bvx, bvy, bhx, bhy)) return false\n\n return true\n}\n\n// =====================================================================================\n// Circle tools (no allocations)\n// =====================================================================================\n\n// scratch for circle center computations (reused everywhere; no runtime object creation)\nlet _ccx = 0, _ccy = 0\n\n// Writes the world-space center into (_ccx, _ccy).\nfunction circleCenterScratch(c: CircleCollider, t: WorldTransform): void {\n // No object/array allocation; scalar math only\n const sx = t.scaleX.v, sy = t.scaleY.v\n const cos = t.cos, sin = t.sin\n // local axes\n const ux = cos, uy = sin\n const vx = -sin, vy = cos\n // scaled local offset\n const ox = (c.x || 0) * sx\n const oy = (c.y || 0) * sy\n _ccx = t.x.v + ux * ox + vx * oy\n _ccy = t.y.v + uy * ox + vy * oy\n}\n\nfunction circleScaledRadius(c: CircleCollider, t: WorldTransform) {\n const sx = abs(t.scaleX.v), sy = abs(t.scaleY.v)\n return c.radius * (sx > sy ? sx : sy) // conservative\n}\n\nfunction checkCircleCircleCollision(\n ca: CircleCollider, ta: WorldTransform, cb: CircleCollider, tb: WorldTransform\n): boolean {\n circleCenterScratch(ca, ta); const ax = _ccx, ay = _ccy\n circleCenterScratch(cb, tb); const bx = _ccx, by = _ccy\n const ra = circleScaledRadius(ca, ta)\n const rb = circleScaledRadius(cb, tb)\n const dx = bx - ax, dy = by - ay\n const r = ra + rb\n return (dx * dx + dy * dy) <= r * r\n}\n\n// =====================================================================================\n// Rect–Circle (no allocations)\n// =====================================================================================\n\nfunction checkRectCircleCollision(\n r: RectangleCollider, tr: WorldTransform,\n c: CircleCollider, tc: WorldTransform\n): boolean {\n // Rect frame\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n const rhx = abs(r.width * rsx) * 0.5\n const rhy = abs(r.height * rsy) * 0.5\n const rc = tr.cos, rs = tr.sin\n const rux = rc, ruy = rs\n const rvx = -rs, rvy = rc\n const rox = (r.x || 0) * rsx\n const roy = (r.y || 0) * rsy\n const rcx = tr.x.v + rux * rox + rvx * roy\n const rcy = tr.y.v + ruy * rox + rvy * roy\n\n // Circle center + radius (into scratch scalars)\n circleCenterScratch(c, tc)\n const rr = circleScaledRadius(c, tc)\n\n // Project center delta onto rect local axes and clamp\n const dx = _ccx - rcx, dy = _ccy - rcy\n const qx = dx * rux + dy * ruy\n const qy = dx * rvx + dy * rvy\n const clx = qx < -rhx ? -rhx : (qx > rhx ? rhx : qx)\n const cly = qy < -rhy ? -rhy : (qy > rhy ? rhy : qy)\n const ddx = qx - clx\n const ddy = qy - cly\n return (ddx * ddx + ddy * ddy) <= rr * rr\n}\n\n// =====================================================================================\n// Polygon helpers — SAT (no allocations; polygons are in LOCAL space + Transform)\n// =====================================================================================\n\n/*\n Notes:\n - Polygons are stored in LOCAL space. We never allocate world-space copies.\n - For any world axis N = (nx, ny), projection of a local vertex (vx, vy) is:\n dot(N, C) + dot(N, U)*sx*vx + dot(N, V)*sy*vy\n where C is world center, U/V are world unit axes of the polygon frame,\n and sx/sy are scale on those local axes.\n - No objects/arrays are created at runtime. Only scalar computations and loops.\n*/\n\n// Poly–Poly (LOCAL + Transform)\nfunction checkPolyPolyCollision(\n a: PolygonCollider, ta: WorldTransform,\n b: PolygonCollider, tb: WorldTransform\n): boolean {\n const av = a.vertices, bv = b.vertices\n const na = av.length, nb = bv.length\n if (na === 0 || nb === 0) return false\n\n // Frame A\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n const acs = ta.cos, asn = ta.sin\n const aux = acs, auy = asn\n const avx = -asn, avy = acs\n const aox = ((a as any).x || 0) * asx\n const aoy = ((a as any).y || 0) * asy\n const acx = ta.x.v + aux * aox + avx * aoy\n const acy = ta.y.v + auy * aox + avy * aoy\n\n // Frame B\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n const bcs = tb.cos, bsn = tb.sin\n const bux = bcs, buy = bsn\n const bvx = -bsn, bvy = bcs\n const box = ((b as any).x || 0) * bsx\n const boy = ((b as any).y || 0) * bsy\n const bcx = tb.x.v + bux * box + bvx * boy\n const bcy = tb.y.v + buy * box + bvy * boy\n\n let i = 0, j = 0, k = 0\n\n // A's edge axes\n for (i = 0; i < na; i++) {\n j = (i + 1) % na\n const adx = av[j].x - av[i].x\n const ady = av[j].y - av[i].y\n // edge in world: Ew = U*(sx*dx) + V*(sy*dy)\n const ewx = aux * (asx * adx) + avx * (asy * ady)\n const ewy = auy * (asx * adx) + avy * (asy * ady)\n const nx = -ewy, ny = ewx // world normal (no normalization)\n\n // project A on (nx,ny)\n const kUa = (nx * aux + ny * auy) * asx\n const kVa = (nx * avx + ny * avy) * asy\n const baseA = nx * acx + ny * acy\n let minA = Infinity, maxA = -Infinity\n for (k = 0; k < na; k++) {\n const s = baseA + kUa * av[k].x + kVa * av[k].y\n if (s < minA) minA = s\n if (s > maxA) maxA = s\n }\n\n // project B on (nx,ny)\n const kUb = (nx * bux + ny * buy) * bsx\n const kVb = (nx * bvx + ny * bvy) * bsy\n const baseB = nx * bcx + ny * bcy\n let minB = Infinity, maxB = -Infinity\n for (k = 0; k < nb; k++) {\n const s = baseB + kUb * bv[k].x + kVb * bv[k].y\n if (s < minB) minB = s\n if (s > maxB) maxB = s\n }\n\n if (maxA < minB || maxB < minA) return false\n }\n\n // B's edge axes\n for (i = 0; i < nb; i++) {\n j = (i + 1) % nb\n const bdx = bv[j].x - bv[i].x\n const bdy = bv[j].y - bv[i].y\n const ewx = bux * (bsx * bdx) + bvx * (bsy * bdy)\n const ewy = buy * (bsx * bdx) + bvy * (bsy * bdy)\n const nx = -ewy, ny = ewx\n\n // project A\n const kUa = (nx * aux + ny * auy) * asx\n const kVa = (nx * avx + ny * avy) * asy\n const baseA = nx * acx + ny * acy\n let minA = Infinity, maxA = -Infinity\n for (k = 0; k < na; k++) {\n const s = baseA + kUa * av[k].x + kVa * av[k].y\n if (s < minA) minA = s\n if (s > maxA) maxA = s\n }\n\n // project B\n const kUb = (nx * bux + ny * buy) * bsx\n const kVb = (nx * bvx + ny * bvy) * bsy\n const baseB = nx * bcx + ny * bcy\n let minB = Infinity, maxB = -Infinity\n for (k = 0; k < nb; k++) {\n const s = baseB + kUb * bv[k].x + kVb * bv[k].y\n if (s < minB) minB = s\n if (s > maxB) maxB = s\n }\n\n if (maxA < minB || maxB < minA) return false\n }\n\n return true\n}\n\n// Poly–Circle (LOCAL + Transform)\nfunction checkPolyCircleCollision(poly: PolygonCollider, tp: WorldTransform, c: CircleCollider, tc: WorldTransform): boolean {\n const v = poly.vertices; const n = v.length; if (n === 0) return false\n\n // Poly frame\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.cos, psn = tp.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n const pcx = tp.x.v + pux * pox + pvx * poy\n const pcy = tp.y.v + puy * pox + pvy * poy\n\n // Circle center + radius\n circleCenterScratch(c, tc)\n const CCx = _ccx, CCy = _ccy\n const rr = circleScaledRadius(c, tc)\n\n let i = 0, j = 0, k = 0\n\n // (A) Polygon edge axes\n for (i = 0; i < n; i++) {\n j = (i + 1) % n\n const dx = v[j].x - v[i].x\n const dy = v[j].y - v[i].y\n const ewx = pux * (psx * dx) + pvx * (psy * dy)\n const ewy = puy * (psx * dx) + pvy * (psy * dy)\n const nx = -ewy, ny = ewx\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (k = 0; k < n; k++) {\n const s = baseP + kUp * v[k].x + kVp * v[k].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const nlen = Math.hypot(nx, ny)\n const cProj = nx * CCx + ny * CCy\n const minC = cProj - rr * nlen\n const maxC = cProj + rr * nlen\n if (maxP < minC || maxC < minP) return false\n }\n\n // (B) Closest-vertex axis\n let bestDx = 0, bestDy = 0, bestD2 = Infinity\n for (i = 0; i < n; i++) {\n const wx = pcx + pux * (psx * v[i].x) + pvx * (psy * v[i].y)\n const wy = pcy + puy * (psx * v[i].x) + pvy * (psy * v[i].y)\n const dx = CCx - wx\n const dy = CCy - wy\n const d2 = dx * dx + dy * dy\n if (d2 < bestD2) { bestD2 = d2; bestDx = dx; bestDy = dy }\n }\n if (bestD2 === 0) return true\n {\n const nx = bestDx, ny = bestDy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const nlen = Math.hypot(nx, ny)\n const cProj = nx * CCx + ny * CCy\n const minC = cProj - rr * nlen\n const maxC = cProj + rr * nlen\n if (maxP < minC || maxC < minP) return false\n }\n\n return true\n}\n\n// Poly–Rect (LOCAL + Transform)\nfunction checkPolyRectCollision(poly: PolygonCollider, tp: WorldTransform, r: RectangleCollider, tr: WorldTransform): boolean {\n const v = poly.vertices; const n = v.length; if (n === 0) return false\n\n // Poly frame\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.cos, psn = tp.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n const pcx = tp.x.v + pux * pox + pvx * poy\n const pcy = tp.y.v + puy * pox + pvy * poy\n\n // Rect frame\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n const rhx = abs(r.width * rsx) * 0.5\n const rhy = abs(r.height * rsy) * 0.5\n const rc = tr.cos, rs = tr.sin\n const rux = rc, ruy = rs\n const rvx = -rs, rvy = rc\n const rox = (r.x || 0) * rsx, roy = (r.y || 0) * rsy\n const rcx = tr.x.v + rux * rox + rvx * roy\n const rcy = tr.y.v + ruy * rox + rvy * roy\n\n let i = 0, j = 0, k = 0\n\n // (A) polygon edge axes\n for (i = 0; i < n; i++) {\n j = (i + 1) % n\n const dx = v[j].x - v[i].x\n const dy = v[j].y - v[i].y\n const ewx = pux * (psx * dx) + pvx * (psy * dy)\n const ewy = puy * (psx * dx) + pvy * (psy * dy)\n const nx = -ewy, ny = ewx\n\n // poly projection\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (k = 0; k < n; k++) {\n const s = baseP + kUp * v[k].x + kVp * v[k].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n\n // rect projection radius on axis\n const nu = nx * rux + ny * ruy\n const nv = nx * rvx + ny * rvy\n const rRad = rhx * (nu < 0 ? -nu : nu) + rhy * (nv < 0 ? -nv : nv)\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rRad\n const maxR = cProj + rRad\n if (maxP < minR || maxR < minP) return false\n }\n\n // (B) rect axis u\n {\n const nx = rux, ny = ruy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rhx\n const maxR = cProj + rhx\n if (maxP < minR || maxR < minP) return false\n }\n // (C) rect axis v\n {\n const nx = rvx, ny = rvy\n const kUp = (nx * pux + ny * puy) * psx\n const kVp = (nx * pvx + ny * pvy) * psy\n const baseP = nx * pcx + ny * pcy\n let minP = Infinity, maxP = -Infinity\n for (i = 0; i < n; i++) {\n const s = baseP + kUp * v[i].x + kVp * v[i].y\n if (s < minP) minP = s\n if (s > maxP) maxP = s\n }\n const cProj = nx * rcx + ny * rcy\n const minR = cProj - rhy\n const maxR = cProj + rhy\n if (maxP < minR || maxR < minP) return false\n }\n\n return true\n}\n\n// =====================================================================================\n// GJK (no allocations: global scratch + selectable supports) — FIXED/ROBUST\n// =====================================================================================\n\n// Global scratch for support result\nlet _sx = 0, _sy = 0\n\n// Support selectors\nconst enum SupportType { None = 0, Ellipse = 1, OBB = 2, Circle = 3, Poly = 4, PolyLocal = 5 }\nlet _supportAType = SupportType.None\nlet _supportBType = SupportType.None\n\n// A-shape params\nlet _Acx = 0, _Acy = 0, _Aux = 0, _Auy = 0, _Avx = 0, _Avy = 0, _Arx = 0, _Ary = 0, _Ahx = 0, _Ahy = 0, _Arr = 0\nlet _Apoly: { x: number, y: number }[] | null = null\n\n// B-shape params\nlet _Bcx = 0, _Bcy = 0, _Bux = 0, _Buy = 0, _Bvx = 0, _Bvy = 0, _Brx = 0, _Bry = 0, _Bhx = 0, _Bhy = 0, _Brr = 0\nlet _Bpoly: { x: number, y: number }[] | null = null\n\nfunction setSupportCircle(dx: number, dy: number, cx: number, cy: number, r: number) {\n const len = Math.hypot(dx, dy)\n if (len === 0) { _sx = cx; _sy = cy; return }\n const inv = 1 / len\n _sx = cx + dx * inv * r\n _sy = cy + dy * inv * r\n}\n\nfunction setSupportOBB(\n dx: number, dy: number,\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, hx: number, hy: number\n) {\n const du = dx * ux + dy * uy\n const dv = dx * vx + dy * vy\n const sx = du >= 0 ? 1 : -1\n const sy = dv >= 0 ? 1 : -1\n _sx = cx + ux * hx * sx + vx * hy * sy\n _sy = cy + uy * hx * sx + vy * hy * sy\n}\n\nfunction dvDy(dy: number, a: number) { return dy * a } // tiny inline helper (prevents temp vars)\n\nfunction setSupportEllipse(\n dx: number, dy: number,\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, rx: number, ry: number\n) {\n const du = dx * ux + dvDy(dy, uy)\n const dv = dx * vx + dvDy(dy, vy)\n const denom = Math.hypot(rx * du, ry * dv)\n if (denom === 0) { _sx = cx; _sy = cy; return }\n const kU = (rx * rx * du) / denom\n const kV = (ry * ry * dv) / denom\n _sx = cx + kU * ux + kV * vx\n _sy = cy + kU * uy + kV * vy\n}\n\nfunction setSupportPoly(dx: number, dy: number, verts: { x: number, y: number }[]) {\n let best = 0, bestDot = -Infinity\n for (let i = 0, n = verts.length; i < n; i++) {\n const vx = verts[i].x, vy = verts[i].y\n const d = dx * vx + dy * vy\n if (d > bestDot) { bestDot = d; best = i }\n }\n _sx = verts[best].x\n _sy = verts[best].y\n}\n\n// PolyLocal support: verts in LOCAL, with frame (cx,cy, U/V, sx/sy)\nfunction setSupportPolyLocal(\n dx: number, dy: number,\n verts: { x: number, y: number }[],\n cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, sx: number, sy: number\n) {\n const kU = (dx * ux + dy * uy) * sx\n const kV = (dx * vx + dy * vy) * sy\n let best = 0, bestDot = -Infinity\n for (let i = 0, n = verts.length; i < n; i++) {\n const s = kU * verts[i].x + kV * verts[i].y\n if (s > bestDot) { bestDot = s; best = i }\n }\n const lx = verts[best].x, ly = verts[best].y\n _sx = cx + ux * (sx * lx) + vx * (sy * ly)\n _sy = cy + uy * (sx * lx) + vy * (sy * ly)\n}\n\nfunction supportA(dx: number, dy: number) {\n if (_supportAType === SupportType.Ellipse) setSupportEllipse(dx, dy, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Arx, _Ary)\n else if (_supportAType === SupportType.OBB) setSupportOBB(dx, dy, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Ahx, _Ahy)\n else if (_supportAType === SupportType.Circle) setSupportCircle(dx, dy, _Acx, _Acy, _Arr)\n else if (_supportAType === SupportType.Poly) setSupportPoly(dx, dy, _Apoly!)\n else if (_supportAType === SupportType.PolyLocal) setSupportPolyLocal(dx, dy, _Apoly!, _Acx, _Acy, _Aux, _Auy, _Avx, _Avy, _Arx, _Ary)\n else { _sx = 0; _sy = 0 }\n}\nfunction supportB(dx: number, dy: number) {\n if (_supportBType === SupportType.Ellipse) setSupportEllipse(dx, dy, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Brx, _Bry)\n else if (_supportBType === SupportType.OBB) setSupportOBB(dx, dy, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Bhx, _Bhy)\n else if (_supportBType === SupportType.Circle) setSupportCircle(dx, dy, _Bcx, _Bcy, _Brr)\n else if (_supportBType === SupportType.Poly) setSupportPoly(dx, dy, _Bpoly!)\n else if (_supportBType === SupportType.PolyLocal) setSupportPolyLocal(dx, dy, _Bpoly!, _Bcx, _Bcy, _Bux, _Buy, _Bvx, _Bvy, _Brx, _Bry)\n else { _sx = 0; _sy = 0 }\n}\n\n// GJK core — returns true if intersection (robust; no allocations)\nfunction gjkIntersectsNoAlloc(): boolean {\n // EPS guards degenerate directions/points\n const EPS = 1e-9\n const EPS2 = EPS * EPS\n\n // simplex points (A = most recently added)\n let ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0\n let n = 0\n\n // search direction\n let dx = 1, dy = 0\n\n // Adds a new support point as A and shifts previous (C<-B, B<-A)\n function addPointAsA() {\n supportA(dx, dy); const pax = _sx, pay = _sy\n supportB(-dx, -dy); const pbx = _sx, pby = _sy\n const px = pax - pbx, py = pay - pby\n cx = bx; cy = by\n bx = ax; by = ay\n ax = px; ay = py\n if (n < 3) n++\n }\n\n addPointAsA()\n if (ax * ax + ay * ay <= EPS2) return true // origin exactly (or ~) hit\n dx = -ax; dy = -ay\n\n for (let iter = 0; iter < 32; iter++) {\n const dLen2 = dx * dx + dy * dy\n if (dLen2 <= EPS2) return true // direction collapsed → enclosed\n\n addPointAsA()\n\n // If new point A does not pass beyond origin along d, shapes are separated\n const Ad = ax * dx + ay * dy\n if (Ad <= 0) return false\n if (ax * ax + ay * ay <= EPS2) return true\n\n if (n === 2) {\n // Segment (B-A). Use triple product to get perpendicular toward origin: d = triple(AB, AO, AB)\n const abx = bx - ax, aby = by - ay\n const aox = -ax, aoy = -ay\n const ac = abx * abx + aby * aby // (AB·AB)\n const bc = aox * abx + aoy * aby // (AO·AB)\n dx = aox * ac - abx * bc // AO*(AB·AB) - AB*(AO·AB)\n dy = aoy * ac - aby * bc\n continue\n }\n\n // Triangle (C-B-A), A is the latest point\n const abx = bx - ax, aby = by - ay\n const acx = cx - ax, acy = cy - ay\n const aox = -ax, aoy = -ay\n\n // abPerp = triple(AC, AO, AB)\n const ac_ab = acx * abx + acy * aby // (AC·AB)\n const ao_ab = aox * abx + aoy * aby // (AO·AB)\n let t1x = aox * ac_ab - acx * ao_ab\n let t1y = aoy * ac_ab - acy * ao_ab\n if (t1x * aox + t1y * aoy > 0) {\n // Origin is in the AB region: drop C -> segment(B-A)\n cx = bx; cy = by; n = 2\n dx = t1x; dy = t1y\n continue\n }\n\n // acPerp = triple(AB, AO, AC)\n const ab_ac = abx * acx + aby * acy // (AB·AC)\n const ao_ac = aox * acx + aoy * acy // (AO·AC)\n let t2x = aox * ab_ac - abx * ao_ac\n let t2y = aoy * ab_ac - aby * ao_ac\n if (t2x * aox + t2y * aoy > 0) {\n // Origin is in the AC region: drop B -> segment(C-A)\n bx = cx; by = cy; n = 2\n dx = t2x; dy = t2y\n continue\n }\n\n // Origin is inside triangle\n return true\n }\n\n // Conservative fallback\n return false\n}\n\n// =====================================================================================\n// Ellipse interactions via GJK (no allocations)\n// =====================================================================================\n\nfunction checkEllipseRectCollision(\n e: EllipseCollider, te: WorldTransform,\n r: RectangleCollider, tr: WorldTransform\n): boolean {\n // A = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Arx = abs(e.width * esx) * 0.5\n _Ary = abs(e.height * esy) * 0.5\n const ecs = te.cos, esn = te.sin\n _Aux = ecs; _Auy = esn; _Avx = -esn; _Avy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Acx = te.x.v + _Aux * eox + _Avx * eoy\n _Acy = te.y.v + _Auy * eox + _Avy * eoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B = OBB (rect)\n const rsx = tr.scaleX.v, rsy = tr.scaleY.v\n _Bhx = abs(r.width * rsx) * 0.5\n _Bhy = abs(r.height * rsy) * 0.5\n const rcs = tr.cos, rsn = tr.sin\n _Bux = rcs; _Buy = rsn; _Bvx = -rsn; _Bvy = rcs\n const rox = (r.x || 0) * rsx, roy = (r.y || 0) * rsy\n _Bcx = tr.x.v + _Bux * rox + _Bvx * roy\n _Bcy = tr.y.v + _Buy * rox + _Bvy * roy\n _supportBType = SupportType.OBB\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\nfunction checkEllipseCircleCollision(\n e: EllipseCollider, te: WorldTransform,\n c: CircleCollider, tc: WorldTransform\n): boolean {\n // A = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Arx = abs(e.width * esx) * 0.5\n _Ary = abs(e.height * esy) * 0.5\n const ecs = te.cos, esn = te.sin\n _Aux = ecs; _Auy = esn; _Avx = -esn; _Avy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Acx = te.x.v + _Aux * eox + _Avx * eoy\n _Acy = te.y.v + _Auy * eox + _Avy * eoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B = Circle\n circleCenterScratch(c, tc)\n _Bcx = _ccx; _Bcy = _ccy\n _Brr = circleScaledRadius(c, tc)\n _supportBType = SupportType.Circle\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\nfunction checkEllipseEllipseCollision(\n a: EllipseCollider, ta: WorldTransform,\n b: EllipseCollider, tb: WorldTransform\n): boolean {\n // A\n const asx = ta.scaleX.v, asy = ta.scaleY.v\n _Arx = abs(a.width * asx) * 0.5\n _Ary = abs(a.height * asy) * 0.5\n const acs = ta.cos, asn = ta.sin\n _Aux = acs; _Auy = asn; _Avx = -asn; _Avy = acs\n const aox = (a.x || 0) * asx, aoy = (a.y || 0) * asy\n _Acx = ta.x.v + _Aux * aox + _Avx * aoy\n _Acy = ta.y.v + _Auy * aox + _Avy * aoy\n _supportAType = SupportType.Ellipse\n _Apoly = null\n\n // B\n const bsx = tb.scaleX.v, bsy = tb.scaleY.v\n _Brx = abs(b.width * bsx) * 0.5\n _Bry = abs(b.height * bsy) * 0.5\n const bcs = tb.cos, bsn = tb.sin\n _Bux = bcs; _Buy = bsn; _Bvx = -bsn; _Bvy = bcs\n const box = (b.x || 0) * bsx, boy = (b.y || 0) * bsy\n _Bcx = tb.x.v + _Bux * box + _Bvx * boy\n _Bcy = tb.y.v + _Buy * box + _Bvy * boy\n _supportBType = SupportType.Ellipse\n _Bpoly = null\n\n return gjkIntersectsNoAlloc()\n}\n\n// Poly–Ellipse via GJK (Poly in LOCAL + Transform, Ellipse in LOCAL + Transform)\nfunction checkPolyEllipseCollision(poly: PolygonCollider, tp: WorldTransform, e: EllipseCollider, te: WorldTransform): boolean {\n // A = Poly (LOCAL + Transform) → use PolyLocal support; reuse A scratch slots\n const psx = tp.scaleX.v, psy = tp.scaleY.v\n const pcs = tp.cos, psn = tp.sin\n const pux = pcs, puy = psn\n const pvx = -psn, pvy = pcs\n const pox = ((poly as any).x || 0) * psx\n const poy = ((poly as any).y || 0) * psy\n _Acx = tp.x.v + pux * pox + pvx * poy\n _Acy = tp.y.v + puy * pox + pvy * poy\n _Aux = pux; _Auy = puy; _Avx = pvx; _Avy = pvy\n _Arx = psx; _Ary = psy\n _Apoly = poly.vertices\n _supportAType = SupportType.PolyLocal\n\n // B = Ellipse\n const esx = te.scaleX.v, esy = te.scaleY.v\n _Brx = abs(e.width * esx) * 0.5\n _Bry = abs(e.height * esy) * 0.5\n const ecs = te.cos, esn = te.sin\n _Bux = ecs; _Buy = esn; _Bvx = -esn; _Bvy = ecs\n const eox = (e.x || 0) * esx, eoy = (e.y || 0) * esy\n _Bcx = te.x.v + _Bux * eox + _Bvx * eoy\n _Bcy = te.y.v + _Buy * eox + _Bvy * eoy\n _Bpoly = null\n _supportBType = SupportType.Ellipse\n\n return gjkIntersectsNoAlloc()\n}\n\n// =====================================================================================\n// Dispatcher (no allocations)\n// =====================================================================================\n\nexport function checkCollision(ca: Collider, ta: WorldTransform, cb: Collider, tb: WorldTransform): boolean {\n // Rectangle–Rectangle\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Rectangle)\n return checkRectRectCollision(ca, ta, cb, tb)\n\n // Circle–Circle\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Circle)\n return checkCircleCircleCollision(ca, ta, cb, tb)\n\n // Rect–Circle (both orders)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Circle)\n return checkRectCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Rectangle)\n return checkRectCircleCollision(cb, tb, ca, ta)\n\n // Polygon–Polygon (LOCAL + Transform)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Polygon)\n return checkPolyPolyCollision(ca, ta, cb, tb)\n\n // Polygon–Circle (both orders; LOCAL + Transform for polygon)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Circle)\n return checkPolyCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Polygon)\n return checkPolyCircleCollision(cb, tb, ca, ta)\n\n // Polygon–Rect (both orders; LOCAL + Transform for polygon)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Rectangle)\n return checkPolyRectCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Polygon)\n return checkPolyRectCollision(cb, tb, ca, ta)\n\n // Ellipse interactions via GJK\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Rectangle)\n return checkEllipseRectCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Rectangle && cb.type === ColliderType.Ellipse)\n return checkEllipseRectCollision(cb, tb, ca, ta)\n\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Circle)\n return checkEllipseCircleCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Circle && cb.type === ColliderType.Ellipse)\n return checkEllipseCircleCollision(cb, tb, ca, ta)\n\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Ellipse)\n return checkEllipseEllipseCollision(ca, ta, cb, tb)\n\n // Polygon–Ellipse (both orders; polygon is LOCAL + Transform via PolyLocal support)\n if (ca.type === ColliderType.Polygon && cb.type === ColliderType.Ellipse)\n return checkPolyEllipseCollision(ca, ta, cb, tb)\n if (ca.type === ColliderType.Ellipse && cb.type === ColliderType.Polygon)\n return checkPolyEllipseCollision(cb, tb, ca, ta)\n\n return false\n}\n"]}
@@ -5,11 +5,8 @@ export class DomAnimatedSpriteNode extends DomGameObject {
5
5
  #src;
6
6
  #atlas;
7
7
  #animation;
8
- #fps;
9
- #loop;
10
- #frames = [];
8
+ #animationData;
11
9
  #frameDuration;
12
- #textureScale = 1;
13
10
  #elapsedTime = 0;
14
11
  #currentFrameIdx = 0;
15
12
  constructor(options) {
@@ -17,8 +14,6 @@ export class DomAnimatedSpriteNode extends DomGameObject {
17
14
  this.#src = options.src;
18
15
  this.#atlas = options.atlas;
19
16
  this.#animation = options.animation;
20
- this.#fps = options.fps;
21
- this.#loop = options.loop ?? true;
22
17
  this.#load();
23
18
  }
24
19
  async #load() {
@@ -30,26 +25,26 @@ export class DomAnimatedSpriteNode extends DomGameObject {
30
25
  console.info(`Dom texture not preloaded. Loading now: ${this.#src}`);
31
26
  texture = await domTextureLoader.load(this.#src);
32
27
  }
33
- const S = this.#atlas.meta.scale === 'auto' ? 1 : Number(this.#atlas.meta.scale);
34
- this.#frameDuration = 1 / this.#fps;
35
- this.#frames = this.#atlas.animations?.[this.#animation] ?? [];
36
- this.#textureScale = S;
37
- const frameName = this.#frames[this.#currentFrameIdx];
38
- const frame = this.#atlas.frames[frameName].frame;
28
+ const a = this.#atlas.animations[this.#animation];
29
+ this.#animationData = a;
30
+ this.#frameDuration = 1 / a.fps;
31
+ const frameName = a.frames[this.#currentFrameIdx];
32
+ const frame = this.#atlas.frames[frameName];
39
33
  setStyle(this.el, !frameName || !texture ? { backgroundImage: 'none' } : {
40
34
  backgroundImage: `url(${this.#src})`,
41
- width: `${frame.w * S}px`,
42
- height: `${frame.h * S}px`,
43
- backgroundSize: `${texture.width * S}px ${texture.height * S}px`,
44
- backgroundPosition: `-${frame.x * S}px -${frame.y * S}px`
35
+ width: `${frame.w}px`,
36
+ height: `${frame.h}px`,
37
+ backgroundSize: `${texture.width}px ${texture.height}px`,
38
+ backgroundPosition: `-${frame.x}px -${frame.y}px`
45
39
  });
46
40
  }
47
41
  render(dt) {
48
42
  super.render(dt);
49
- if (this.#frameDuration === undefined || this.#frames.length === 0)
43
+ const a = this.#animationData;
44
+ if (!a || a.frames.length === 0 || this.#frameDuration === undefined)
50
45
  return;
51
- const lastIndex = this.#frames.length - 1;
52
- if (!this.#loop && this.#currentFrameIdx === lastIndex)
46
+ const lastIndex = a.frames.length - 1;
47
+ if (!a.loop && this.#currentFrameIdx === lastIndex)
53
48
  return;
54
49
  this.#elapsedTime += dt;
55
50
  if (this.#elapsedTime < this.#frameDuration)
@@ -58,7 +53,7 @@ export class DomAnimatedSpriteNode extends DomGameObject {
58
53
  this.#elapsedTime -= this.#frameDuration;
59
54
  if (this.#currentFrameIdx === lastIndex) {
60
55
  this.emit('animationend', this.#animation);
61
- if (this.#loop) {
56
+ if (a.loop) {
62
57
  this.#currentFrameIdx = 0;
63
58
  }
64
59
  else {
@@ -70,13 +65,12 @@ export class DomAnimatedSpriteNode extends DomGameObject {
70
65
  this.#currentFrameIdx++;
71
66
  }
72
67
  }
73
- const S = this.#textureScale;
74
- const frameName = this.#frames[this.#currentFrameIdx];
75
- const frame = this.#atlas.frames[frameName].frame;
68
+ const frameName = a.frames[this.#currentFrameIdx];
69
+ const frame = this.#atlas.frames[frameName];
76
70
  setStyle(this.el, {
77
- width: `${frame.w * S}px`,
78
- height: `${frame.h * S}px`,
79
- backgroundPosition: `-${frame.x * S}px -${frame.y * S}px`
71
+ width: `${frame.w}px`,
72
+ height: `${frame.h}px`,
73
+ backgroundPosition: `-${frame.x}px -${frame.y}px`
80
74
  });
81
75
  }
82
76
  set src(src) {
@@ -98,21 +92,12 @@ export class DomAnimatedSpriteNode extends DomGameObject {
98
92
  set animation(animation) {
99
93
  if (this.#animation !== animation) {
100
94
  this.#animation = animation;
101
- this.#frames = this.#atlas.animations?.[animation] ?? [];
95
+ this.#animationData = this.#atlas.animations[animation];
102
96
  this.#currentFrameIdx = 0;
103
97
  this.#elapsedTime = 0;
104
98
  }
105
99
  }
106
100
  get animation() { return this.#animation; }
107
- set fps(fps) {
108
- if (this.#fps !== fps) {
109
- this.#fps = fps;
110
- this.#frameDuration = 1 / fps;
111
- }
112
- }
113
- get fps() { return this.#fps; }
114
- set loop(loop) { this.#loop = loop; }
115
- get loop() { return this.#loop; }
116
101
  remove() {
117
102
  domTextureLoader.release(this.#src);
118
103
  super.remove();