kiwiengine 0.0.1-alpha → 0.5.2

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 (438) hide show
  1. package/README.ko.md +550 -0
  2. package/README.md +575 -4
  3. package/examples/collision-test/assets/cat.png +0 -0
  4. package/examples/collision-test/dist/game.js +2 -0
  5. package/examples/collision-test/dist/game.js.LICENSE.txt +35 -0
  6. package/examples/collision-test/index.ts +30 -0
  7. package/examples/dom-particle-test/assets/bird.png +0 -0
  8. package/examples/dom-particle-test/dist/game.js +2 -0
  9. package/examples/dom-particle-test/dist/game.js.LICENSE.txt +35 -0
  10. package/examples/dom-particle-test/index.html +24 -0
  11. package/examples/dom-particle-test/index.ts +27 -0
  12. package/examples/dom-sprite-test/assets/bird.png +0 -0
  13. package/examples/dom-sprite-test/assets/fire.png +0 -0
  14. package/examples/dom-sprite-test/assets/run.png +0 -0
  15. package/examples/dom-sprite-test/dist/game.js +2 -0
  16. package/examples/dom-sprite-test/dist/game.js.LICENSE.txt +35 -0
  17. package/examples/dom-sprite-test/index.html +24 -0
  18. package/examples/dom-sprite-test/index.ts +38 -0
  19. package/examples/dom-test/dist/game.js +2 -0
  20. package/examples/dom-test/dist/game.js.LICENSE.txt +35 -0
  21. package/examples/dom-test/index.html +24 -0
  22. package/examples/dom-test/index.ts +22 -0
  23. package/examples/flappy-cat/assets/bgm/bgm.ogg +0 -0
  24. package/examples/flappy-cat/assets/images/base.png +0 -0
  25. package/examples/flappy-cat/assets/images/bg.png +0 -0
  26. package/examples/flappy-cat/assets/images/cat.png +0 -0
  27. package/examples/flappy-cat/assets/images/pipe-green.png +0 -0
  28. package/examples/flappy-cat/assets/images/pipe-red.png +0 -0
  29. package/examples/flappy-cat/assets/sfx/die.wav +0 -0
  30. package/examples/flappy-cat/assets/sfx/hit.wav +0 -0
  31. package/examples/flappy-cat/assets/sfx/point.wav +0 -0
  32. package/examples/flappy-cat/assets/sfx/wing.wav +0 -0
  33. package/examples/flappy-cat/dist/game.js +0 -0
  34. package/examples/flappy-cat/index.html +24 -0
  35. package/examples/flappy-cat/index.ts +0 -0
  36. package/examples/particle-test/assets/bird.png +0 -0
  37. package/examples/particle-test/dist/game.js +2 -0
  38. package/examples/particle-test/dist/game.js.LICENSE.txt +35 -0
  39. package/examples/particle-test/index.html +24 -0
  40. package/examples/particle-test/index.ts +30 -0
  41. package/examples/renderer-test/dist/game.js +2 -0
  42. package/examples/renderer-test/dist/game.js.LICENSE.txt +35 -0
  43. package/examples/renderer-test/index.html +24 -0
  44. package/examples/renderer-test/index.ts +9 -0
  45. package/examples/simple-battle/assets/bgm/battle.mp3 +0 -0
  46. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  47. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  48. package/examples/simple-battle/assets/joystick/joystick.png +0 -0
  49. package/examples/simple-battle/assets/joystick/knob.png +0 -0
  50. package/examples/simple-battle/assets/sfx/hero/die/die.wav +0 -0
  51. package/examples/simple-battle/assets/sfx/hero/heal/heal.wav +0 -0
  52. package/examples/simple-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  53. package/examples/simple-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  54. package/examples/simple-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  55. package/examples/simple-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  56. package/examples/simple-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  57. package/examples/simple-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  58. package/examples/simple-battle/assets/sfx/orc/die/die.wav +0 -0
  59. package/examples/simple-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  60. package/examples/simple-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  61. package/examples/simple-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  62. package/examples/simple-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  63. package/examples/simple-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  64. package/examples/simple-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  65. package/examples/simple-battle/assets/spritesheets/hero-atlas.json +289 -0
  66. package/examples/simple-battle/assets/spritesheets/hero.png +0 -0
  67. package/examples/simple-battle/assets/spritesheets/orc-atlas.json +289 -0
  68. package/examples/simple-battle/assets/spritesheets/orc.png +0 -0
  69. package/examples/simple-battle/assets/spritesheets/potion-atlas.json +83 -0
  70. package/examples/simple-battle/assets/spritesheets/potion.png +0 -0
  71. package/examples/simple-battle/dist/game.js +2 -0
  72. package/examples/simple-battle/dist/game.js.LICENSE.txt +35 -0
  73. package/examples/simple-battle/hud/damage-text.ts +45 -0
  74. package/examples/simple-battle/hud/heal-text.ts +45 -0
  75. package/examples/simple-battle/hud/hp-bar.ts +38 -0
  76. package/examples/simple-battle/index.html +24 -0
  77. package/examples/simple-battle/index.ts +41 -0
  78. package/examples/simple-battle/objects/character.ts +95 -0
  79. package/examples/simple-battle/objects/hero.ts +113 -0
  80. package/examples/simple-battle/objects/orc.ts +109 -0
  81. package/examples/simple-battle/objects/potion.ts +29 -0
  82. package/examples/simple-battle/stage.ts +176 -0
  83. package/examples/spine-test/assets/spine/spineboy.atlas +95 -0
  84. package/examples/spine-test/assets/spine/spineboy.png +0 -0
  85. package/examples/spine-test/assets/spine/spineboy.skel +0 -0
  86. package/examples/spine-test/dist/game.js +2 -0
  87. package/examples/spine-test/dist/game.js.LICENSE.txt +35 -0
  88. package/examples/spine-test/index.html +24 -0
  89. package/examples/spine-test/index.ts +29 -0
  90. package/examples/sprite-test/assets/bird.png +0 -0
  91. package/examples/sprite-test/assets/fire.png +0 -0
  92. package/examples/sprite-test/dist/game.js +2 -0
  93. package/examples/sprite-test/dist/game.js.LICENSE.txt +35 -0
  94. package/examples/sprite-test/index.html +24 -0
  95. package/examples/sprite-test/index.ts +41 -0
  96. package/examples/tsconfig.json +2 -1
  97. package/examples/webpack.config.js +14 -3
  98. package/jest.config.ts +10 -0
  99. package/lib/asset/audio.js +47 -11
  100. package/lib/asset/audio.js.map +1 -1
  101. package/lib/asset/loaders/audio.js +3 -3
  102. package/lib/asset/loaders/audio.js.map +1 -1
  103. package/lib/asset/loaders/binary.js +3 -3
  104. package/lib/asset/loaders/binary.js.map +1 -1
  105. package/lib/asset/loaders/bitmap-font.js +71 -0
  106. package/lib/asset/loaders/bitmap-font.js.map +1 -0
  107. package/lib/asset/loaders/font.js +1 -1
  108. package/lib/asset/loaders/font.js.map +1 -1
  109. package/lib/asset/loaders/loader.js +17 -12
  110. package/lib/asset/loaders/loader.js.map +1 -1
  111. package/lib/asset/loaders/spritesheet.js +6 -7
  112. package/lib/asset/loaders/spritesheet.js.map +1 -1
  113. package/lib/asset/loaders/text.js +3 -3
  114. package/lib/asset/loaders/text.js.map +1 -1
  115. package/lib/asset/loaders/texture.js +5 -4
  116. package/lib/asset/loaders/texture.js.map +1 -1
  117. package/lib/asset/preload.js +60 -56
  118. package/lib/asset/preload.js.map +1 -1
  119. package/lib/collision/check-collision.js +804 -0
  120. package/lib/collision/check-collision.js.map +1 -0
  121. package/lib/collision/check-collision.test.js +300 -0
  122. package/lib/collision/check-collision.test.js.map +1 -0
  123. package/lib/collision/colliders.js +8 -0
  124. package/lib/collision/colliders.js.map +1 -0
  125. package/lib/debug.js.map +1 -0
  126. package/lib/dom/dom-animated-sprite.js +121 -0
  127. package/lib/dom/dom-animated-sprite.js.map +1 -0
  128. package/lib/dom/dom-game-object.js +106 -0
  129. package/lib/dom/dom-game-object.js.map +1 -0
  130. package/lib/dom/dom-particle.js +105 -0
  131. package/lib/dom/dom-particle.js.map +1 -0
  132. package/lib/dom/dom-preload.js +43 -0
  133. package/lib/dom/dom-preload.js.map +1 -0
  134. package/lib/dom/dom-sprite.js +40 -0
  135. package/lib/dom/dom-sprite.js.map +1 -0
  136. package/lib/dom/dom-texture-loader.js +36 -0
  137. package/lib/dom/dom-texture-loader.js.map +1 -0
  138. package/lib/dom/dom-utils.js +20 -0
  139. package/lib/dom/dom-utils.js.map +1 -0
  140. package/lib/index copy.js +16 -0
  141. package/lib/index copy.js.map +1 -0
  142. package/lib/index.js +35 -10
  143. package/lib/index.js.map +1 -1
  144. package/lib/input/joystick.js +262 -0
  145. package/lib/input/joystick.js.map +1 -0
  146. package/lib/node/core/dirty-number.js +38 -0
  147. package/lib/node/core/dirty-number.js.map +1 -0
  148. package/lib/node/core/game-node.js +63 -0
  149. package/lib/node/core/game-node.js.map +1 -0
  150. package/lib/node/core/game-object.js +8 -0
  151. package/lib/node/core/game-object.js.map +1 -0
  152. package/lib/node/core/renderable.js +52 -0
  153. package/lib/node/core/renderable.js.map +1 -0
  154. package/lib/node/core/transform.js +59 -0
  155. package/lib/node/core/transform.js.map +1 -0
  156. package/lib/node/core/transformable.js +85 -0
  157. package/lib/node/core/transformable.js.map +1 -0
  158. package/lib/node/ext/animated-sprite.js +96 -0
  159. package/lib/node/ext/animated-sprite.js.map +1 -0
  160. package/lib/node/ext/bitmap-text.js +89 -0
  161. package/lib/node/ext/bitmap-text.js.map +1 -0
  162. package/lib/node/ext/circle.js +28 -0
  163. package/lib/node/ext/circle.js.map +1 -0
  164. package/lib/node/ext/deplay.js +20 -0
  165. package/lib/node/ext/deplay.js.map +1 -0
  166. package/lib/node/ext/dom-container.js +51 -0
  167. package/lib/node/ext/dom-container.js.map +1 -0
  168. package/lib/node/ext/interval.js +20 -0
  169. package/lib/node/ext/interval.js.map +1 -0
  170. package/lib/node/ext/particle.js +98 -0
  171. package/lib/node/ext/particle.js.map +1 -0
  172. package/lib/node/ext/rectangle.js +32 -0
  173. package/lib/node/ext/rectangle.js.map +1 -0
  174. package/lib/node/ext/spine.js +272 -0
  175. package/lib/node/ext/spine.js.map +1 -0
  176. package/lib/node/ext/sprite.js +42 -0
  177. package/lib/node/ext/sprite.js.map +1 -0
  178. package/lib/node/physics/physics-object.js +112 -0
  179. package/lib/node/physics/physics-object.js.map +1 -0
  180. package/lib/node/physics/physics-world.js +27 -0
  181. package/lib/node/physics/physics-world.js.map +1 -0
  182. package/lib/renderer/camera.js +19 -0
  183. package/lib/renderer/camera.js.map +1 -0
  184. package/lib/renderer/container-manager.js +29 -0
  185. package/lib/renderer/container-manager.js.map +1 -0
  186. package/lib/renderer/fps-display.js +18 -0
  187. package/lib/renderer/fps-display.js.map +1 -0
  188. package/lib/renderer/layer.js +12 -0
  189. package/lib/renderer/layer.js.map +1 -0
  190. package/lib/renderer/renderer.js +145 -0
  191. package/lib/renderer/renderer.js.map +1 -0
  192. package/lib/renderer/ticker.js +56 -0
  193. package/lib/renderer/ticker.js.map +1 -0
  194. package/lib/renderer/ticker.test.js +241 -0
  195. package/lib/renderer/ticker.test.js.map +1 -0
  196. package/lib/types/asset/audio.d.ts +5 -4
  197. package/lib/types/asset/audio.d.ts.map +1 -1
  198. package/lib/types/asset/loaders/audio.d.ts +1 -1
  199. package/lib/types/asset/loaders/audio.d.ts.map +1 -1
  200. package/lib/types/asset/loaders/binary.d.ts +1 -1
  201. package/lib/types/asset/loaders/binary.d.ts.map +1 -1
  202. package/lib/types/asset/loaders/bitmap-font.d.ts +16 -0
  203. package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -0
  204. package/lib/types/asset/loaders/font.d.ts +1 -1
  205. package/lib/types/asset/loaders/font.d.ts.map +1 -1
  206. package/lib/types/asset/loaders/loader.d.ts +6 -6
  207. package/lib/types/asset/loaders/loader.d.ts.map +1 -1
  208. package/lib/types/asset/loaders/spritesheet.d.ts +5 -5
  209. package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
  210. package/lib/types/asset/loaders/text.d.ts +1 -1
  211. package/lib/types/asset/loaders/text.d.ts.map +1 -1
  212. package/lib/types/asset/loaders/texture.d.ts +2 -2
  213. package/lib/types/asset/loaders/texture.d.ts.map +1 -1
  214. package/lib/types/asset/preload.d.ts +5 -3
  215. package/lib/types/asset/preload.d.ts.map +1 -1
  216. package/lib/types/bitmap-font.js +2 -0
  217. package/lib/types/bitmap-font.js.map +1 -0
  218. package/lib/types/collision/check-collision.d.ts +4 -0
  219. package/lib/types/collision/check-collision.d.ts.map +1 -0
  220. package/lib/types/collision/check-collision.test.d.ts +2 -0
  221. package/lib/types/collision/check-collision.test.d.ts.map +1 -0
  222. package/lib/types/collision/colliders.d.ts +34 -0
  223. package/lib/types/collision/colliders.d.ts.map +1 -0
  224. package/lib/types/debug.d.ts.map +1 -0
  225. package/lib/types/dom/dom-animated-sprite.d.ts +29 -0
  226. package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -0
  227. package/lib/types/dom/dom-game-object.d.ts +44 -0
  228. package/lib/types/dom/dom-game-object.d.ts.map +1 -0
  229. package/lib/types/dom/dom-particle.d.ts +30 -0
  230. package/lib/types/dom/dom-particle.d.ts.map +1 -0
  231. package/lib/types/dom/dom-preload.d.ts +2 -0
  232. package/lib/types/dom/dom-preload.d.ts.map +1 -0
  233. package/lib/types/dom/dom-sprite.d.ts +13 -0
  234. package/lib/types/dom/dom-sprite.d.ts.map +1 -0
  235. package/lib/types/dom/dom-texture-loader.d.ts +8 -0
  236. package/lib/types/dom/dom-texture-loader.d.ts.map +1 -0
  237. package/lib/types/dom/dom-utils.d.ts +3 -0
  238. package/lib/types/dom/dom-utils.d.ts.map +1 -0
  239. package/lib/types/index copy.d.ts +16 -0
  240. package/lib/types/index copy.d.ts.map +1 -0
  241. package/lib/types/index.d.ts +25 -11
  242. package/lib/types/index.d.ts.map +1 -1
  243. package/lib/types/input/joystick.d.ts +28 -0
  244. package/lib/types/input/joystick.d.ts.map +1 -0
  245. package/lib/types/node/core/dirty-number.d.ts +17 -0
  246. package/lib/types/node/core/dirty-number.d.ts.map +1 -0
  247. package/lib/types/node/core/game-node.d.ts +16 -0
  248. package/lib/types/node/core/game-node.d.ts.map +1 -0
  249. package/lib/types/node/core/game-object.d.ts +8 -0
  250. package/lib/types/node/core/game-object.d.ts.map +1 -0
  251. package/lib/types/node/core/renderable.d.ts +22 -0
  252. package/lib/types/node/core/renderable.d.ts.map +1 -0
  253. package/lib/types/node/core/transform.d.ts +25 -0
  254. package/lib/types/node/core/transform.d.ts.map +1 -0
  255. package/lib/types/node/core/transformable.d.ts +44 -0
  256. package/lib/types/node/core/transformable.d.ts.map +1 -0
  257. package/lib/types/node/ext/animated-sprite.d.ts +28 -0
  258. package/lib/types/node/ext/animated-sprite.d.ts.map +1 -0
  259. package/lib/types/node/ext/bitmap-text.d.ts +14 -0
  260. package/lib/types/node/ext/bitmap-text.d.ts.map +1 -0
  261. package/lib/types/node/ext/circle.d.ts +19 -0
  262. package/lib/types/node/ext/circle.d.ts.map +1 -0
  263. package/lib/types/node/ext/deplay.d.ts +8 -0
  264. package/lib/types/node/ext/deplay.d.ts.map +1 -0
  265. package/lib/types/node/ext/dom-container.d.ts +12 -0
  266. package/lib/types/node/ext/dom-container.d.ts.map +1 -0
  267. package/lib/types/node/ext/interval.d.ts +9 -0
  268. package/lib/types/node/ext/interval.d.ts.map +1 -0
  269. package/lib/types/node/ext/particle.d.ts +30 -0
  270. package/lib/types/node/ext/particle.d.ts.map +1 -0
  271. package/lib/types/node/ext/rectangle.d.ts +22 -0
  272. package/lib/types/node/ext/rectangle.d.ts.map +1 -0
  273. package/lib/types/node/ext/spine.d.ts +36 -0
  274. package/lib/types/node/ext/spine.d.ts.map +1 -0
  275. package/lib/types/node/ext/sprite.d.ts +13 -0
  276. package/lib/types/node/ext/sprite.d.ts.map +1 -0
  277. package/lib/types/node/physics/physics-object.d.ts +38 -0
  278. package/lib/types/node/physics/physics-object.d.ts.map +1 -0
  279. package/lib/types/node/physics/physics-world.d.ts +18 -0
  280. package/lib/types/node/physics/physics-world.d.ts.map +1 -0
  281. package/lib/types/renderer/camera.d.ts +13 -0
  282. package/lib/types/renderer/camera.d.ts.map +1 -0
  283. package/lib/types/renderer/container-manager.d.ts +9 -0
  284. package/lib/types/renderer/container-manager.d.ts.map +1 -0
  285. package/lib/types/renderer/fps-display.d.ts +7 -0
  286. package/lib/types/renderer/fps-display.d.ts.map +1 -0
  287. package/lib/types/renderer/layer.d.ts +7 -0
  288. package/lib/types/renderer/layer.d.ts.map +1 -0
  289. package/lib/types/renderer/renderer.d.ts +40 -0
  290. package/lib/types/renderer/renderer.d.ts.map +1 -0
  291. package/lib/types/renderer/ticker.d.ts +6 -0
  292. package/lib/types/renderer/ticker.d.ts.map +1 -0
  293. package/lib/types/renderer/ticker.test.d.ts +40 -0
  294. package/lib/types/renderer/ticker.test.d.ts.map +1 -0
  295. package/lib/types/types/bitmap-font.d.ts +18 -0
  296. package/lib/types/types/bitmap-font.d.ts.map +1 -0
  297. package/lib/types/utils/device.d.ts +2 -0
  298. package/lib/types/utils/device.d.ts.map +1 -0
  299. package/lib/utils/device.js +2 -0
  300. package/lib/utils/device.js.map +1 -0
  301. package/package.json +8 -7
  302. package/src/asset/audio.ts +134 -90
  303. package/src/asset/loaders/audio.ts +19 -19
  304. package/src/asset/loaders/binary.ts +16 -16
  305. package/src/asset/loaders/bitmap-font.ts +85 -0
  306. package/src/asset/loaders/font.ts +14 -14
  307. package/src/asset/loaders/loader.ts +27 -23
  308. package/src/asset/loaders/spritesheet.ts +34 -36
  309. package/src/asset/loaders/text.ts +15 -15
  310. package/src/asset/loaders/texture.ts +29 -28
  311. package/src/asset/preload.ts +75 -64
  312. package/src/collision/check-collision.test.ts +349 -0
  313. package/src/collision/check-collision.ts +821 -0
  314. package/src/collision/colliders.ts +19 -0
  315. package/src/debug.ts +5 -0
  316. package/src/dom/dom-animated-sprite.ts +153 -0
  317. package/src/dom/dom-game-object.ts +131 -0
  318. package/src/dom/dom-particle.ts +151 -0
  319. package/src/dom/dom-preload.ts +54 -0
  320. package/src/dom/dom-sprite.ts +50 -0
  321. package/src/dom/dom-texture-loader.ts +44 -0
  322. package/src/dom/dom-utils.ts +19 -0
  323. package/src/index.ts +46 -13
  324. package/src/input/joystick.ts +316 -0
  325. package/src/node/core/dirty-number.ts +45 -0
  326. package/src/node/core/game-node.ts +74 -0
  327. package/src/node/core/game-object.ts +11 -0
  328. package/src/node/core/renderable.ts +65 -0
  329. package/src/node/core/transform.ts +70 -0
  330. package/src/node/core/transformable.ts +111 -0
  331. package/src/node/ext/animated-sprite.ts +123 -0
  332. package/src/node/ext/bitmap-text.ts +109 -0
  333. package/src/node/ext/circle.ts +40 -0
  334. package/src/node/ext/deplay.ts +24 -0
  335. package/src/node/ext/dom-container.ts +62 -0
  336. package/src/node/ext/interval.ts +24 -0
  337. package/src/node/ext/particle.ts +142 -0
  338. package/src/node/ext/rectangle.ts +51 -0
  339. package/src/node/ext/spine.ts +323 -0
  340. package/src/node/ext/sprite.ts +53 -0
  341. package/src/node/physics/physics-object.ts +156 -0
  342. package/src/node/physics/physics-world.ts +40 -0
  343. package/src/renderer/camera.ts +25 -0
  344. package/src/renderer/container-manager.ts +36 -0
  345. package/src/renderer/fps-display.ts +21 -0
  346. package/src/renderer/layer.ts +15 -0
  347. package/src/renderer/renderer.ts +180 -0
  348. package/src/renderer/ticker.test.ts +325 -0
  349. package/src/renderer/ticker.ts +54 -0
  350. package/src/types/bitmap-font.ts +19 -0
  351. package/src/utils/device.ts +1 -0
  352. package/examples/test-dom/index.ts +0 -21
  353. package/lib/game-object/game-object-physics.js +0 -188
  354. package/lib/game-object/game-object-physics.js.map +0 -1
  355. package/lib/game-object/game-object-rendering.js +0 -35
  356. package/lib/game-object/game-object-rendering.js.map +0 -1
  357. package/lib/game-object/game-object.js +0 -162
  358. package/lib/game-object/game-object.js.map +0 -1
  359. package/lib/game-object/transform.js +0 -118
  360. package/lib/game-object/transform.js.map +0 -1
  361. package/lib/game-object-ext/animated-sprite.js +0 -117
  362. package/lib/game-object-ext/animated-sprite.js.map +0 -1
  363. package/lib/game-object-ext/dom-container.js +0 -56
  364. package/lib/game-object-ext/dom-container.js.map +0 -1
  365. package/lib/game-object-ext/rect.js +0 -30
  366. package/lib/game-object-ext/rect.js.map +0 -1
  367. package/lib/game-object-ext/spine.js +0 -206
  368. package/lib/game-object-ext/spine.js.map +0 -1
  369. package/lib/game-object-ext/sprite.js +0 -46
  370. package/lib/game-object-ext/sprite.js.map +0 -1
  371. package/lib/game-object-ext/text.js +0 -68
  372. package/lib/game-object-ext/text.js.map +0 -1
  373. package/lib/game-object-ext/tiling-sprite.js +0 -64
  374. package/lib/game-object-ext/tiling-sprite.js.map +0 -1
  375. package/lib/types/game-object/game-object-physics.d.ts +0 -42
  376. package/lib/types/game-object/game-object-physics.d.ts.map +0 -1
  377. package/lib/types/game-object/game-object-rendering.d.ts +0 -15
  378. package/lib/types/game-object/game-object-rendering.d.ts.map +0 -1
  379. package/lib/types/game-object/game-object.d.ts +0 -81
  380. package/lib/types/game-object/game-object.d.ts.map +0 -1
  381. package/lib/types/game-object/transform.d.ts +0 -43
  382. package/lib/types/game-object/transform.d.ts.map +0 -1
  383. package/lib/types/game-object-ext/animated-sprite.d.ts +0 -29
  384. package/lib/types/game-object-ext/animated-sprite.d.ts.map +0 -1
  385. package/lib/types/game-object-ext/dom-container.d.ts +0 -16
  386. package/lib/types/game-object-ext/dom-container.d.ts.map +0 -1
  387. package/lib/types/game-object-ext/rect.d.ts +0 -17
  388. package/lib/types/game-object-ext/rect.d.ts.map +0 -1
  389. package/lib/types/game-object-ext/spine.d.ts +0 -35
  390. package/lib/types/game-object-ext/spine.d.ts.map +0 -1
  391. package/lib/types/game-object-ext/sprite.d.ts +0 -14
  392. package/lib/types/game-object-ext/sprite.d.ts.map +0 -1
  393. package/lib/types/game-object-ext/text.d.ts +0 -26
  394. package/lib/types/game-object-ext/text.d.ts.map +0 -1
  395. package/lib/types/game-object-ext/tiling-sprite.d.ts +0 -20
  396. package/lib/types/game-object-ext/tiling-sprite.d.ts.map +0 -1
  397. package/lib/types/utils/debug.d.ts.map +0 -1
  398. package/lib/types/utils/go.d.ts +0 -26
  399. package/lib/types/utils/go.d.ts.map +0 -1
  400. package/lib/types/world/world-debug.d.ts +0 -11
  401. package/lib/types/world/world-debug.d.ts.map +0 -1
  402. package/lib/types/world/world-physics.d.ts +0 -16
  403. package/lib/types/world/world-physics.d.ts.map +0 -1
  404. package/lib/types/world/world-rendering.d.ts +0 -28
  405. package/lib/types/world/world-rendering.d.ts.map +0 -1
  406. package/lib/types/world/world.d.ts +0 -38
  407. package/lib/types/world/world.d.ts.map +0 -1
  408. package/lib/utils/debug.js.map +0 -1
  409. package/lib/utils/go.js +0 -33
  410. package/lib/utils/go.js.map +0 -1
  411. package/lib/world/world-debug.js +0 -89
  412. package/lib/world/world-debug.js.map +0 -1
  413. package/lib/world/world-physics.js +0 -45
  414. package/lib/world/world-physics.js.map +0 -1
  415. package/lib/world/world-rendering.js +0 -123
  416. package/lib/world/world-rendering.js.map +0 -1
  417. package/lib/world/world.js +0 -147
  418. package/lib/world/world.js.map +0 -1
  419. package/src/game-object/game-object-physics.ts +0 -191
  420. package/src/game-object/game-object-rendering.ts +0 -27
  421. package/src/game-object/game-object.ts +0 -190
  422. package/src/game-object/transform.ts +0 -164
  423. package/src/game-object-ext/animated-sprite.ts +0 -140
  424. package/src/game-object-ext/dom-container.ts +0 -67
  425. package/src/game-object-ext/rect.ts +0 -40
  426. package/src/game-object-ext/spine.ts +0 -235
  427. package/src/game-object-ext/sprite.ts +0 -55
  428. package/src/game-object-ext/text.ts +0 -83
  429. package/src/game-object-ext/tiling-sprite.ts +0 -73
  430. package/src/utils/debug.ts +0 -5
  431. package/src/utils/go.ts +0 -53
  432. package/src/world/world-debug.ts +0 -114
  433. package/src/world/world-physics.ts +0 -52
  434. package/src/world/world-rendering.ts +0 -145
  435. package/src/world/world.ts +0 -171
  436. /package/examples/{test-dom → collision-test}/index.html +0 -0
  437. /package/lib/{utils/debug.js → debug.js} +0 -0
  438. /package/lib/types/{utils/debug.d.ts → debug.d.ts} +0 -0
@@ -1,188 +0,0 @@
1
- import Matter from 'matter-js';
2
- import { debugMode } from '../utils/debug';
3
- import { localOffsetToWorld, worldToLocalWithNewWorld } from './transform';
4
- export class GameObjectPhysics {
5
- #collider;
6
- #isStatic = false;
7
- #isSensor = false;
8
- #velocityX = 0;
9
- #velocityY = 0;
10
- #fixedRotation = false;
11
- #go;
12
- #matterBody;
13
- constructor(go) {
14
- this.#go = go;
15
- }
16
- #removeBody() {
17
- const world = this.#go._getWorld();
18
- if (!world || !this.#matterBody)
19
- return;
20
- world._worldPhysics.removeBody(this.#matterBody);
21
- }
22
- #lastScaleX = 1;
23
- #lastScaleY = 1;
24
- #initialInertia;
25
- #createBody() {
26
- const world = this.#go._getWorld();
27
- if (!this.#collider || !world)
28
- return;
29
- const wt = this.#go._wt;
30
- const { x: ox, y: oy } = localOffsetToWorld(wt, this.#collider?.x ?? 0, this.#collider?.y ?? 0);
31
- const x = wt.x.v + ox;
32
- const y = wt.y.v + oy;
33
- const bodyOpts = {
34
- angle: wt.rotation.v,
35
- isStatic: this.#isStatic,
36
- isSensor: this.#isSensor,
37
- velocity: { x: this.#velocityX, y: this.#velocityY },
38
- };
39
- if (this.#collider.type === 'rect')
40
- this.#matterBody = Matter.Bodies.rectangle(x, y, this.#collider.width, this.#collider.height, bodyOpts);
41
- else if (this.#collider.type === 'circle')
42
- this.#matterBody = Matter.Bodies.circle(x, y, this.#collider.radius, bodyOpts);
43
- else if (this.#collider.type === 'vert')
44
- this.#matterBody = Matter.Bodies.fromVertices(x, y, [this.#collider.vertices], bodyOpts);
45
- else
46
- throw new Error('Invalid collider type');
47
- this.#matterBody.plugin.owner = this.#go;
48
- this.#lastScaleX = wt.scaleX.v;
49
- this.#lastScaleY = wt.scaleY.v;
50
- Matter.Body.scale(this.#matterBody, wt.scaleX.v, wt.scaleY.v);
51
- this.#initialInertia = this.#matterBody.inertia;
52
- if (this.#fixedRotation) {
53
- Matter.Body.setInertia(this.#matterBody, Infinity);
54
- Matter.Body.setAngularVelocity(this.#matterBody, 0);
55
- }
56
- world._worldPhysics.addBody(this.#matterBody);
57
- this.#setDebugRenderStyle();
58
- }
59
- applyChanges() {
60
- if (this.#collider && !this.#matterBody)
61
- this.#createBody();
62
- if (!this.#matterBody)
63
- return;
64
- const wt = this.#go._wt;
65
- const { x: ox, y: oy } = localOffsetToWorld(wt, this.#collider?.x ?? 0, this.#collider?.y ?? 0);
66
- if (wt.x.dirty || wt.scaleX.dirty || wt.y.dirty || wt.scaleY.dirty) {
67
- if ((wt.x.dirty || wt.scaleX.dirty) && (wt.y.dirty || wt.scaleY.dirty))
68
- Matter.Body.setPosition(this.#matterBody, { x: wt.x.v + ox, y: wt.y.v + oy });
69
- else if (wt.x.dirty || wt.scaleX.dirty)
70
- Matter.Body.setPosition(this.#matterBody, { x: wt.x.v + ox, y: this.#matterBody.position.y });
71
- else if (wt.y.dirty || wt.scaleY.dirty)
72
- Matter.Body.setPosition(this.#matterBody, { x: this.#matterBody.position.x, y: wt.y.v + oy });
73
- }
74
- if (wt.scaleX.dirty || wt.scaleY.dirty) {
75
- const scaleDiffX = wt.scaleX.v / this.#lastScaleX;
76
- const scaleDiffY = wt.scaleY.v / this.#lastScaleY;
77
- Matter.Body.scale(this.#matterBody, scaleDiffX, scaleDiffY);
78
- this.#lastScaleX = wt.scaleX.v;
79
- this.#lastScaleY = wt.scaleY.v;
80
- }
81
- if (wt.rotation.dirty)
82
- Matter.Body.setAngle(this.#matterBody, wt.rotation.v);
83
- const lt = this.#go._lt;
84
- if (!wt.x.dirty || !wt.y.dirty || !wt.rotation.dirty) {
85
- const { x, y, rotation, newWorldX, newWorldY, newWorldRotation } = worldToLocalWithNewWorld(wt, lt, this.#matterBody.position.x - ox, this.#matterBody.position.y - oy, this.#matterBody.angle);
86
- if (!wt.x.dirty) {
87
- lt.x.v = x;
88
- wt.x.v = newWorldX;
89
- }
90
- if (!wt.y.dirty) {
91
- lt.y.v = y;
92
- wt.y.v = newWorldY;
93
- }
94
- if (!wt.rotation.dirty) {
95
- lt.rotation.v = rotation;
96
- wt.rotation.v = newWorldRotation;
97
- }
98
- }
99
- }
100
- destroy() {
101
- this.#removeBody();
102
- }
103
- get collider() { return this.#collider; }
104
- set collider(value) {
105
- this.#removeBody();
106
- this.#collider = value;
107
- }
108
- get isStatic() {
109
- if (this.#matterBody)
110
- return this.#matterBody.isStatic;
111
- else
112
- return this.#isStatic;
113
- }
114
- set isStatic(value) {
115
- this.#isStatic = value;
116
- if (this.#matterBody)
117
- Matter.Body.setStatic(this.#matterBody, value);
118
- this.#setDebugRenderStyle();
119
- }
120
- get isSensor() {
121
- if (this.#matterBody)
122
- return this.#matterBody.isSensor;
123
- else
124
- return this.#isSensor;
125
- }
126
- set isSensor(value) {
127
- this.#isSensor = value;
128
- if (this.#matterBody)
129
- this.#matterBody.isSensor = value;
130
- this.#setDebugRenderStyle();
131
- }
132
- get velocityX() {
133
- if (this.#matterBody)
134
- return this.#matterBody.velocity.x;
135
- else
136
- return this.#velocityX;
137
- }
138
- set velocityX(value) {
139
- this.#velocityX = value;
140
- if (this.#matterBody)
141
- Matter.Body.setVelocity(this.#matterBody, { x: value, y: this.#velocityY });
142
- }
143
- get velocityY() {
144
- if (this.#matterBody)
145
- return this.#matterBody.velocity.y;
146
- else
147
- return this.#velocityY;
148
- }
149
- set velocityY(value) {
150
- this.#velocityY = value;
151
- if (this.#matterBody)
152
- Matter.Body.setVelocity(this.#matterBody, { x: this.#velocityX, y: value });
153
- }
154
- get fixedRotation() { return this.#fixedRotation; }
155
- set fixedRotation(value) {
156
- this.#fixedRotation = value;
157
- if (this.#matterBody) {
158
- if (value) {
159
- Matter.Body.setInertia(this.#matterBody, Infinity);
160
- Matter.Body.setAngularVelocity(this.#matterBody, 0);
161
- }
162
- else {
163
- Matter.Body.setInertia(this.#matterBody, this.#initialInertia);
164
- Matter.Body.setAngularVelocity(this.#matterBody, 0);
165
- }
166
- }
167
- }
168
- #setDebugRenderStyle() {
169
- if (!debugMode || !this.#matterBody)
170
- return;
171
- if (this.#isSensor) {
172
- this.#matterBody.render.fillStyle = 'rgba(255,255,0,0.1)';
173
- this.#matterBody.render.strokeStyle = 'rgba(255,255,0,0.25)';
174
- this.#matterBody.render.lineWidth = 1;
175
- }
176
- else if (this.#isStatic) {
177
- this.#matterBody.render.fillStyle = 'rgba(255,0,0,0.1)';
178
- this.#matterBody.render.strokeStyle = 'rgba(255,0,0,0.25)';
179
- this.#matterBody.render.lineWidth = 1;
180
- }
181
- else {
182
- this.#matterBody.render.fillStyle = 'rgba(0,255,0,0.1)';
183
- this.#matterBody.render.strokeStyle = 'rgba(0,255,0,0.25)';
184
- this.#matterBody.render.lineWidth = 1;
185
- }
186
- }
187
- }
188
- //# sourceMappingURL=game-object-physics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"game-object-physics.js","sourceRoot":"","sources":["../../src/game-object/game-object-physics.ts"],"names":[],"mappings":"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","sourcesContent":["import Matter, { IChamferableBodyDefinition } from 'matter-js';\nimport { debugMode } from '../utils/debug';\nimport { GameObject } from './game-object';\nimport { localOffsetToWorld, worldToLocalWithNewWorld } from './transform';\n\ntype BaseCollider = { x?: number; y?: number; };\ntype RectangleCollider = BaseCollider & { type: 'rect'; width: number; height: number };\ntype CircleCollider = BaseCollider & { type: 'circle'; radius: number };\ntype VerticesCollider = BaseCollider & { type: 'vert'; vertices: { x: number; y: number }[] };\nexport type Collider = RectangleCollider | CircleCollider | VerticesCollider;\n\nexport class GameObjectPhysics {\n #collider?: Collider;\n #isStatic = false;\n #isSensor = false;\n #velocityX = 0;\n #velocityY = 0;\n #fixedRotation = false;\n\n #go: GameObject;\n #matterBody?: Matter.Body;\n\n constructor(go: GameObject) {\n this.#go = go;\n }\n\n #removeBody() {\n const world = this.#go._getWorld();\n if (!world || !this.#matterBody) return;\n world._worldPhysics.removeBody(this.#matterBody);\n }\n\n #lastScaleX = 1;\n #lastScaleY = 1;\n #initialInertia?: number;\n\n #createBody() {\n const world = this.#go._getWorld();\n if (!this.#collider || !world) return;\n\n const wt = this.#go._wt;\n const { x: ox, y: oy } = localOffsetToWorld(wt, this.#collider?.x ?? 0, this.#collider?.y ?? 0);\n const x = wt.x.v + ox;\n const y = wt.y.v + oy;\n\n const bodyOpts: IChamferableBodyDefinition = {\n angle: wt.rotation.v,\n isStatic: this.#isStatic,\n isSensor: this.#isSensor,\n velocity: { x: this.#velocityX, y: this.#velocityY },\n };\n\n if (this.#collider.type === 'rect') this.#matterBody = Matter.Bodies.rectangle(x, y, this.#collider.width, this.#collider.height, bodyOpts);\n else if (this.#collider.type === 'circle') this.#matterBody = Matter.Bodies.circle(x, y, this.#collider.radius, bodyOpts);\n else if (this.#collider.type === 'vert') this.#matterBody = Matter.Bodies.fromVertices(x, y, [this.#collider.vertices], bodyOpts);\n else throw new Error('Invalid collider type');\n\n this.#matterBody.plugin.owner = this.#go;\n this.#lastScaleX = wt.scaleX.v;\n this.#lastScaleY = wt.scaleY.v;\n Matter.Body.scale(this.#matterBody, wt.scaleX.v, wt.scaleY.v);\n\n this.#initialInertia = this.#matterBody.inertia;\n if (this.#fixedRotation) {\n Matter.Body.setInertia(this.#matterBody, Infinity);\n Matter.Body.setAngularVelocity(this.#matterBody, 0);\n }\n\n world._worldPhysics.addBody(this.#matterBody);\n this.#setDebugRenderStyle();\n }\n\n applyChanges() {\n if (this.#collider && !this.#matterBody) this.#createBody();\n if (!this.#matterBody) return;\n\n const wt = this.#go._wt;\n const { x: ox, y: oy } = localOffsetToWorld(wt, this.#collider?.x ?? 0, this.#collider?.y ?? 0);\n\n if (wt.x.dirty || wt.scaleX.dirty || wt.y.dirty || wt.scaleY.dirty) {\n if ((wt.x.dirty || wt.scaleX.dirty) && (wt.y.dirty || wt.scaleY.dirty)) Matter.Body.setPosition(this.#matterBody, { x: wt.x.v + ox, y: wt.y.v + oy });\n else if (wt.x.dirty || wt.scaleX.dirty) Matter.Body.setPosition(this.#matterBody, { x: wt.x.v + ox, y: this.#matterBody.position.y });\n else if (wt.y.dirty || wt.scaleY.dirty) Matter.Body.setPosition(this.#matterBody, { x: this.#matterBody.position.x, y: wt.y.v + oy });\n }\n if (wt.scaleX.dirty || wt.scaleY.dirty) {\n const scaleDiffX = wt.scaleX.v / this.#lastScaleX;\n const scaleDiffY = wt.scaleY.v / this.#lastScaleY;\n Matter.Body.scale(this.#matterBody, scaleDiffX, scaleDiffY);\n this.#lastScaleX = wt.scaleX.v;\n this.#lastScaleY = wt.scaleY.v;\n }\n if (wt.rotation.dirty) Matter.Body.setAngle(this.#matterBody, wt.rotation.v);\n\n const lt = this.#go._lt;\n if (!wt.x.dirty || !wt.y.dirty || !wt.rotation.dirty) {\n const { x, y, rotation, newWorldX, newWorldY, newWorldRotation } =\n worldToLocalWithNewWorld(\n wt,\n lt,\n this.#matterBody.position.x - ox,\n this.#matterBody.position.y - oy,\n this.#matterBody.angle\n );\n if (!wt.x.dirty) { lt.x.v = x; wt.x.v = newWorldX; }\n if (!wt.y.dirty) { lt.y.v = y; wt.y.v = newWorldY; }\n if (!wt.rotation.dirty) { lt.rotation.v = rotation; wt.rotation.v = newWorldRotation; }\n }\n }\n\n destroy() {\n this.#removeBody();\n }\n\n get collider() { return this.#collider; }\n set collider(value: Collider | undefined) {\n this.#removeBody();\n this.#collider = value;\n }\n\n get isStatic() {\n if (this.#matterBody) return this.#matterBody.isStatic;\n else return this.#isStatic;\n }\n set isStatic(value: boolean) {\n this.#isStatic = value;\n if (this.#matterBody) Matter.Body.setStatic(this.#matterBody, value);\n this.#setDebugRenderStyle();\n }\n\n get isSensor() {\n if (this.#matterBody) return this.#matterBody.isSensor;\n else return this.#isSensor;\n }\n set isSensor(value: boolean) {\n this.#isSensor = value;\n if (this.#matterBody) this.#matterBody.isSensor = value;\n this.#setDebugRenderStyle();\n }\n\n get velocityX() {\n if (this.#matterBody) return this.#matterBody.velocity.x;\n else return this.#velocityX;\n }\n set velocityX(value: number) {\n this.#velocityX = value;\n if (this.#matterBody) Matter.Body.setVelocity(this.#matterBody, { x: value, y: this.#velocityY });\n }\n\n get velocityY() {\n if (this.#matterBody) return this.#matterBody.velocity.y;\n else return this.#velocityY;\n }\n set velocityY(value: number) {\n this.#velocityY = value;\n if (this.#matterBody) Matter.Body.setVelocity(this.#matterBody, { x: this.#velocityX, y: value });\n }\n\n get fixedRotation() { return this.#fixedRotation; }\n set fixedRotation(value: boolean) {\n this.#fixedRotation = value;\n if (this.#matterBody) {\n if (value) {\n Matter.Body.setInertia(this.#matterBody, Infinity);\n Matter.Body.setAngularVelocity(this.#matterBody, 0);\n } else {\n Matter.Body.setInertia(this.#matterBody, this.#initialInertia!);\n Matter.Body.setAngularVelocity(this.#matterBody, 0);\n }\n }\n }\n\n #setDebugRenderStyle() {\n if (!debugMode || !this.#matterBody) return;\n\n if (this.#isSensor) {\n this.#matterBody.render.fillStyle = 'rgba(255,255,0,0.1)';\n this.#matterBody.render.strokeStyle = 'rgba(255,255,0,0.25)';\n this.#matterBody.render.lineWidth = 1;\n }\n else if (this.#isStatic) {\n this.#matterBody.render.fillStyle = 'rgba(255,0,0,0.1)';\n this.#matterBody.render.strokeStyle = 'rgba(255,0,0,0.25)';\n this.#matterBody.render.lineWidth = 1;\n }\n else {\n this.#matterBody.render.fillStyle = 'rgba(0,255,0,0.1)';\n this.#matterBody.render.strokeStyle = 'rgba(0,255,0,0.25)';\n this.#matterBody.render.lineWidth = 1;\n }\n }\n}\n"]}
@@ -1,35 +0,0 @@
1
- import { Container } from 'pixi.js';
2
- export class GameObjectRendering {
3
- _container = new Container({ sortableChildren: true });
4
- #yBasedDrawOrder = false;
5
- addChild(child) { this._container.addChild(child._container); }
6
- removeChild(child) { this._container.removeChild(child._container); }
7
- destroy() { this._container.destroy({ children: true }); }
8
- applyChanges(lt) {
9
- if (lt.x.dirty)
10
- this._container.x = lt.x.v;
11
- if (lt.y.dirty) {
12
- this._container.y = lt.y.v;
13
- if (this.#yBasedDrawOrder)
14
- this.drawOrder = lt.y.v;
15
- }
16
- if (lt.pivotX.dirty)
17
- this._container.pivot.x = lt.pivotX.v;
18
- if (lt.pivotY.dirty)
19
- this._container.pivot.y = lt.pivotY.v;
20
- if (lt.scaleX.dirty)
21
- this._container.scale.x = lt.scaleX.v;
22
- if (lt.scaleY.dirty)
23
- this._container.scale.y = lt.scaleY.v;
24
- if (lt.rotation.dirty)
25
- this._container.rotation = lt.rotation.v;
26
- if (lt.alpha.dirty)
27
- this._container.alpha = lt.alpha.v;
28
- }
29
- get drawOrder() { return this._container.zIndex; }
30
- set drawOrder(v) { this._container.zIndex = v; }
31
- get yBasedDrawOrder() { return this.#yBasedDrawOrder; }
32
- set yBasedDrawOrder(v) { this.#yBasedDrawOrder = v; if (v)
33
- this.drawOrder = this._container.y; }
34
- }
35
- //# sourceMappingURL=game-object-rendering.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"game-object-rendering.js","sourceRoot":"","sources":["../../src/game-object/game-object-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,MAAM,OAAO,mBAAmB;IAC9B,UAAU,GAAG,IAAI,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,gBAAgB,GAAG,KAAK,CAAC;IAEzB,QAAQ,CAAC,KAA0B,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpF,WAAW,CAAC,KAA0B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1D,YAAY,CAAC,EAAkB;QAC7B,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACnG,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,CAAC,CAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvD,IAAI,eAAe,CAAC,CAAU,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1G","sourcesContent":["import { Container } from 'pixi.js';\nimport { LocalTransform } from './transform';\n\nexport class GameObjectRendering {\n _container = new Container({ sortableChildren: true });\n #yBasedDrawOrder = false;\n\n addChild(child: GameObjectRendering) { this._container.addChild(child._container); }\n removeChild(child: GameObjectRendering) { this._container.removeChild(child._container); }\n destroy() { this._container.destroy({ children: true }); }\n\n applyChanges(lt: LocalTransform) {\n if (lt.x.dirty) this._container.x = lt.x.v;\n if (lt.y.dirty) { this._container.y = lt.y.v; if (this.#yBasedDrawOrder) this.drawOrder = lt.y.v; }\n if (lt.pivotX.dirty) this._container.pivot.x = lt.pivotX.v;\n if (lt.pivotY.dirty) this._container.pivot.y = lt.pivotY.v;\n if (lt.scaleX.dirty) this._container.scale.x = lt.scaleX.v;\n if (lt.scaleY.dirty) this._container.scale.y = lt.scaleY.v;\n if (lt.rotation.dirty) this._container.rotation = lt.rotation.v;\n if (lt.alpha.dirty) this._container.alpha = lt.alpha.v;\n }\n\n get drawOrder() { return this._container.zIndex; }\n set drawOrder(v: number) { this._container.zIndex = v; }\n get yBasedDrawOrder() { return this.#yBasedDrawOrder; }\n set yBasedDrawOrder(v: boolean) { this.#yBasedDrawOrder = v; if (v) this.drawOrder = this._container.y; }\n}\n"]}
@@ -1,162 +0,0 @@
1
- import { EventEmitter } from '@webtaku/event-emitter';
2
- import { Sprite } from 'pixi.js';
3
- import { textureLoader } from '../asset/loaders/texture';
4
- import { GameObjectPhysics } from './game-object-physics';
5
- import { GameObjectRendering } from './game-object-rendering';
6
- import { LocalTransform, WorldTransform } from './transform';
7
- export class GameObject extends EventEmitter {
8
- _lt = new LocalTransform();
9
- _wt = new WorldTransform();
10
- _rendering = new GameObjectRendering();
11
- #physics = new GameObjectPhysics(this);
12
- #world;
13
- #parent;
14
- #children = [];
15
- data = {};
16
- _setWorld(world) {
17
- this.#world = world;
18
- for (const child of this.#children) {
19
- child._setWorld(world);
20
- }
21
- }
22
- _getWorld() { return this.#world; }
23
- add(...children) {
24
- for (const child of children) {
25
- if (child.#parent) {
26
- const idx = child.#parent.#children.indexOf(child);
27
- if (idx !== -1)
28
- child.#parent.#children.splice(idx, 1);
29
- child.#parent._rendering.removeChild(child._rendering);
30
- }
31
- if (this.#world)
32
- child._setWorld(this.#world);
33
- child.#parent = this;
34
- this.#children.push(child);
35
- this._rendering.addChild(child._rendering);
36
- }
37
- }
38
- remove() {
39
- if (this.#parent) {
40
- const idx = this.#parent.#children.indexOf(this);
41
- if (idx !== -1)
42
- this.#parent.#children.splice(idx, 1);
43
- this.#parent = undefined;
44
- }
45
- for (const child of this.#children) {
46
- child.#parent = undefined;
47
- child.remove();
48
- }
49
- this.#children.length = 0;
50
- this._rendering.destroy();
51
- this.#physics.destroy();
52
- }
53
- update(dt) { }
54
- _afterRender() { }
55
- _engineUpdate(dt, pt) {
56
- this.update(dt);
57
- this._wt.update(pt, this._lt);
58
- this.#physics.applyChanges();
59
- this._rendering.applyChanges(this._lt);
60
- this._afterRender();
61
- this._lt.markClean();
62
- this.emit('update', dt);
63
- for (const child of this.#children) {
64
- child._engineUpdate(dt, this._wt);
65
- }
66
- this._wt.markClean();
67
- }
68
- constructor(opts) {
69
- super();
70
- if (opts) {
71
- if (opts.x !== undefined)
72
- this.x = opts.x;
73
- if (opts.y !== undefined)
74
- this.y = opts.y;
75
- if (opts.pivotX !== undefined)
76
- this.pivotX = opts.pivotX;
77
- if (opts.pivotY !== undefined)
78
- this.pivotY = opts.pivotY;
79
- if (opts.scale !== undefined)
80
- this.scale = opts.scale;
81
- if (opts.scaleX !== undefined)
82
- this.scaleX = opts.scaleX;
83
- if (opts.scaleY !== undefined)
84
- this.scaleY = opts.scaleY;
85
- if (opts.rotation !== undefined)
86
- this.rotation = opts.rotation;
87
- if (opts.alpha !== undefined)
88
- this.alpha = opts.alpha;
89
- if (opts.drawOrder !== undefined)
90
- this.drawOrder = opts.drawOrder;
91
- if (opts.yBasedDrawOrder !== undefined)
92
- this.yBasedDrawOrder = opts.yBasedDrawOrder;
93
- if (opts.collider !== undefined)
94
- this.collider = opts.collider;
95
- if (opts.isStatic !== undefined)
96
- this.isStatic = opts.isStatic;
97
- if (opts.isSensor !== undefined)
98
- this.isSensor = opts.isSensor;
99
- if (opts.velocityX !== undefined)
100
- this.velocityX = opts.velocityX;
101
- if (opts.velocityY !== undefined)
102
- this.velocityY = opts.velocityY;
103
- if (opts.fixedRotation !== undefined)
104
- this.fixedRotation = opts.fixedRotation;
105
- if (opts.image !== undefined)
106
- this.image = opts.image;
107
- }
108
- }
109
- get x() { return this._lt.x.v; }
110
- set x(v) { this._lt.x.v = v; }
111
- get y() { return this._lt.y.v; }
112
- set y(v) { this._lt.y.v = v; }
113
- get pivotX() { return this._lt.pivotX.v; }
114
- set pivotX(v) { this._lt.pivotX.v = v; }
115
- get pivotY() { return this._lt.pivotY.v; }
116
- set pivotY(v) { this._lt.pivotY.v = v; }
117
- get scale() { return this._lt.scaleX.v; }
118
- set scale(v) { this._lt.scaleX.v = v; this._lt.scaleY.v = v; }
119
- get scaleX() { return this._lt.scaleX.v; }
120
- set scaleX(v) { this._lt.scaleX.v = v; }
121
- get scaleY() { return this._lt.scaleY.v; }
122
- set scaleY(v) { this._lt.scaleY.v = v; }
123
- get rotation() { return this._lt.rotation.v; }
124
- set rotation(v) { this._lt.rotation.v = v; }
125
- get alpha() { return this._lt.alpha.v; }
126
- set alpha(v) { this._lt.alpha.v = v; }
127
- get drawOrder() { return this._rendering.drawOrder; }
128
- set drawOrder(v) { this._rendering.drawOrder = v; }
129
- get yBasedDrawOrder() { return this._rendering.yBasedDrawOrder; }
130
- set yBasedDrawOrder(v) { this._rendering.yBasedDrawOrder = v; }
131
- get collider() { return this.#physics.collider; }
132
- set collider(v) { this.#physics.collider = v; }
133
- get isStatic() { return this.#physics.isStatic; }
134
- set isStatic(v) { this.#physics.isStatic = v; }
135
- get isSensor() { return this.#physics.isSensor; }
136
- set isSensor(v) { this.#physics.isSensor = v; }
137
- get velocityX() { return this.#physics.velocityX; }
138
- set velocityX(v) { this.#physics.velocityX = v; }
139
- get velocityY() { return this.#physics.velocityY; }
140
- set velocityY(v) { this.#physics.velocityY = v; }
141
- get fixedRotation() { return this.#physics.fixedRotation; }
142
- set fixedRotation(v) { this.#physics.fixedRotation = v; }
143
- _addPixiChild(child) { this._rendering._container.addChild(child); }
144
- #image;
145
- get image() { return this.#image; }
146
- set image(value) {
147
- if (value) {
148
- if (!textureLoader.checkLoaded(value)) {
149
- console.info(`Image not preloaded. Loading now: ${value}`);
150
- }
151
- textureLoader.load(value).then((texture) => {
152
- if (texture)
153
- this._addPixiChild(new Sprite({
154
- texture,
155
- anchor: { x: 0.5, y: 0.5 },
156
- zIndex: -999999,
157
- }));
158
- });
159
- }
160
- }
161
- }
162
- //# sourceMappingURL=game-object.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"game-object.js","sourceRoot":"","sources":["../../src/game-object/game-object.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter, EventMap } from '@webtaku/event-emitter';\nimport { Container, Sprite } from 'pixi.js';\nimport { textureLoader } from '../asset/loaders/texture';\nimport { World } from '../world/world';\nimport { Collider, GameObjectPhysics } from './game-object-physics';\nimport { GameObjectRendering } from './game-object-rendering';\nimport { LocalTransform, WorldTransform } from './transform';\n\nexport class GameObject<E extends EventMap = EventMap> extends EventEmitter<E & {\n update: (dt: number) => void\n}> {\n _lt = new LocalTransform();\n _wt = new WorldTransform();\n\n _rendering = new GameObjectRendering();\n #physics = new GameObjectPhysics(this);\n\n #world?: World;\n #parent?: GameObject;\n #children: GameObject[] = [];\n\n data: Record<string, any> = {};\n\n protected _setWorld(world: World) {\n this.#world = world;\n for (const child of this.#children) {\n child._setWorld(world);\n }\n }\n _getWorld() { return this.#world; }\n\n add(...children: GameObject[]) {\n for (const child of children) {\n if (child.#parent) {\n const idx = child.#parent.#children.indexOf(child);\n if (idx !== -1) child.#parent.#children.splice(idx, 1);\n child.#parent._rendering.removeChild(child._rendering);\n }\n if (this.#world) child._setWorld(this.#world);\n child.#parent = this;\n\n this.#children.push(child);\n this._rendering.addChild(child._rendering);\n }\n }\n\n remove() {\n if (this.#parent) {\n const idx = this.#parent.#children.indexOf(this);\n if (idx !== -1) this.#parent.#children.splice(idx, 1);\n this.#parent = undefined;\n }\n\n for (const child of this.#children) {\n child.#parent = undefined;\n child.remove();\n }\n this.#children.length = 0;\n\n this._rendering.destroy();\n this.#physics.destroy();\n }\n\n protected update(dt: number): void { }\n\n protected _afterRender() { }\n _engineUpdate(dt: number, pt: WorldTransform) {\n this.update(dt);\n\n this._wt.update(pt, this._lt);\n this.#physics.applyChanges();\n this._rendering.applyChanges(this._lt);\n this._afterRender();\n this._lt.markClean();\n\n (this as any).emit('update', dt);\n\n for (const child of this.#children) {\n child._engineUpdate(dt, this._wt);\n }\n this._wt.markClean();\n }\n\n constructor(opts?: GameObjectOptions) {\n super();\n if (opts) {\n if (opts.x !== undefined) this.x = opts.x;\n if (opts.y !== undefined) this.y = opts.y;\n if (opts.pivotX !== undefined) this.pivotX = opts.pivotX;\n if (opts.pivotY !== undefined) this.pivotY = opts.pivotY;\n if (opts.scale !== undefined) this.scale = opts.scale;\n if (opts.scaleX !== undefined) this.scaleX = opts.scaleX;\n if (opts.scaleY !== undefined) this.scaleY = opts.scaleY;\n if (opts.rotation !== undefined) this.rotation = opts.rotation;\n if (opts.alpha !== undefined) this.alpha = opts.alpha;\n\n if (opts.drawOrder !== undefined) this.drawOrder = opts.drawOrder;\n if (opts.yBasedDrawOrder !== undefined) this.yBasedDrawOrder = opts.yBasedDrawOrder;\n\n if (opts.collider !== undefined) this.collider = opts.collider;\n if (opts.isStatic !== undefined) this.isStatic = opts.isStatic;\n if (opts.isSensor !== undefined) this.isSensor = opts.isSensor;\n if (opts.velocityX !== undefined) this.velocityX = opts.velocityX;\n if (opts.velocityY !== undefined) this.velocityY = opts.velocityY;\n if (opts.fixedRotation !== undefined) this.fixedRotation = opts.fixedRotation;\n\n if (opts.image !== undefined) this.image = opts.image;\n }\n }\n\n get x() { return this._lt.x.v; }\n set x(v: number) { this._lt.x.v = v; }\n get y() { return this._lt.y.v; }\n set y(v: number) { this._lt.y.v = v; }\n get pivotX() { return this._lt.pivotX.v; }\n set pivotX(v: number) { this._lt.pivotX.v = v; }\n get pivotY() { return this._lt.pivotY.v; }\n set pivotY(v: number) { this._lt.pivotY.v = v; }\n get scale() { return this._lt.scaleX.v; }\n set scale(v: number) { this._lt.scaleX.v = v; this._lt.scaleY.v = v; }\n get scaleX() { return this._lt.scaleX.v; }\n set scaleX(v: number) { this._lt.scaleX.v = v; }\n get scaleY() { return this._lt.scaleY.v; }\n set scaleY(v: number) { this._lt.scaleY.v = v; }\n get rotation() { return this._lt.rotation.v; }\n set rotation(v: number) { this._lt.rotation.v = v; }\n get alpha() { return this._lt.alpha.v; }\n set alpha(v: number) { this._lt.alpha.v = v; }\n\n get drawOrder() { return this._rendering.drawOrder; }\n set drawOrder(v: number) { this._rendering.drawOrder = v; }\n get yBasedDrawOrder() { return this._rendering.yBasedDrawOrder; }\n set yBasedDrawOrder(v: boolean) { this._rendering.yBasedDrawOrder = v; }\n\n get collider() { return this.#physics.collider; }\n set collider(v: Collider | undefined) { this.#physics.collider = v; }\n get isStatic() { return this.#physics.isStatic; }\n set isStatic(v: boolean) { this.#physics.isStatic = v; }\n get isSensor() { return this.#physics.isSensor; }\n set isSensor(v: boolean) { this.#physics.isSensor = v; }\n get velocityX() { return this.#physics.velocityX; }\n set velocityX(v: number) { this.#physics.velocityX = v; }\n get velocityY() { return this.#physics.velocityY; }\n set velocityY(v: number) { this.#physics.velocityY = v; }\n get fixedRotation() { return this.#physics.fixedRotation; }\n set fixedRotation(v: boolean) { this.#physics.fixedRotation = v; }\n\n _addPixiChild(child: Container) { this._rendering._container.addChild(child); }\n\n #image?: string;\n get image() { return this.#image; }\n set image(value: string | undefined) {\n if (value) {\n if (!textureLoader.checkLoaded(value)) {\n console.info(`Image not preloaded. Loading now: ${value}`);\n }\n textureLoader.load(value).then((texture) => {\n if (texture) this._addPixiChild(new Sprite({\n texture,\n anchor: { x: 0.5, y: 0.5 },\n zIndex: -999999,\n }));\n });\n }\n }\n}\n\nexport type GameObjectOptions = {\n x?: number;\n y?: number;\n pivotX?: number;\n pivotY?: number;\n scale?: number;\n scaleX?: number;\n scaleY?: number;\n rotation?: number;\n alpha?: number;\n\n drawOrder?: number;\n yBasedDrawOrder?: boolean;\n\n collider?: Collider;\n isStatic?: boolean;\n isSensor?: boolean;\n velocityX?: number;\n velocityY?: number;\n fixedRotation?: boolean;\n\n image?: string;\n};\n"]}
@@ -1,118 +0,0 @@
1
- class DirtyNumber {
2
- #v;
3
- #dirty;
4
- constructor(v) {
5
- this.#v = v;
6
- this.#dirty = false;
7
- }
8
- get dirty() {
9
- return this.#dirty;
10
- }
11
- get v() {
12
- return this.#v;
13
- }
14
- set v(v) {
15
- if (this.#v !== v)
16
- this.#dirty = true;
17
- this.#v = v;
18
- }
19
- markClean() {
20
- this.#dirty = false;
21
- }
22
- }
23
- export class LocalTransform {
24
- x = new DirtyNumber(0);
25
- y = new DirtyNumber(0);
26
- pivotX = new DirtyNumber(0);
27
- pivotY = new DirtyNumber(0);
28
- scaleX = new DirtyNumber(1);
29
- scaleY = new DirtyNumber(1);
30
- rotation = new DirtyNumber(0);
31
- alpha = new DirtyNumber(1);
32
- markClean() {
33
- this.x.markClean();
34
- this.y.markClean();
35
- this.pivotX.markClean();
36
- this.pivotY.markClean();
37
- this.scaleX.markClean();
38
- this.scaleY.markClean();
39
- this.rotation.markClean();
40
- this.alpha.markClean();
41
- }
42
- }
43
- export class WorldTransform {
44
- x = new DirtyNumber(0);
45
- y = new DirtyNumber(0);
46
- scaleX = new DirtyNumber(1);
47
- scaleY = new DirtyNumber(1);
48
- rotation = new DirtyNumber(0);
49
- alpha = new DirtyNumber(1);
50
- update(parent, local) {
51
- const rx = local.x.v * parent.scaleX.v;
52
- const ry = local.y.v * parent.scaleY.v;
53
- const pCos = Math.cos(parent.rotation.v);
54
- const pSin = Math.sin(parent.rotation.v);
55
- this.scaleX.v = parent.scaleX.v * local.scaleX.v;
56
- this.scaleY.v = parent.scaleY.v * local.scaleY.v;
57
- const pivotX = local.pivotX.v * this.scaleX.v;
58
- const pivotY = local.pivotY.v * this.scaleY.v;
59
- const cos = Math.cos(local.rotation.v);
60
- const sin = Math.sin(local.rotation.v);
61
- this.x.v = parent.x.v + (rx * pCos - ry * pSin) - (pivotX * cos - pivotY * sin);
62
- this.y.v = parent.y.v + (rx * pSin + ry * pCos) - (pivotX * sin + pivotY * cos);
63
- this.rotation.v = parent.rotation.v + local.rotation.v;
64
- this.alpha.v = parent.alpha.v * local.alpha.v;
65
- }
66
- markClean() {
67
- this.x.markClean();
68
- this.y.markClean();
69
- this.scaleX.markClean();
70
- this.scaleY.markClean();
71
- this.rotation.markClean();
72
- this.alpha.markClean();
73
- }
74
- }
75
- export function localOffsetToWorld(world, ox, oy) {
76
- const cos = Math.cos(world.rotation.v);
77
- const sin = Math.sin(world.rotation.v);
78
- const sx = ox * world.scaleX.v;
79
- const sy = oy * world.scaleY.v;
80
- const x = sx * cos - sy * sin;
81
- const y = sx * sin + sy * cos;
82
- return { x, y };
83
- }
84
- export function worldToLocalWithNewWorld(world, local, targetWorldX, targetWorldY, targetWorldRotation) {
85
- const invLocalScaleX = local.scaleX.v !== 0 ? 1 / local.scaleX.v : 0;
86
- const invLocalScaleY = local.scaleY.v !== 0 ? 1 / local.scaleY.v : 0;
87
- const parentScaleX = world.scaleX.v * invLocalScaleX;
88
- const parentScaleY = world.scaleY.v * invLocalScaleY;
89
- const parentRot = world.rotation.v - local.rotation.v;
90
- const pCos = Math.cos(parentRot);
91
- const pSin = Math.sin(parentRot);
92
- const cosOld = Math.cos(local.rotation.v);
93
- const sinOld = Math.sin(local.rotation.v);
94
- const pivotX = local.pivotX.v * world.scaleX.v;
95
- const pivotY = local.pivotY.v * world.scaleY.v;
96
- const rx0 = local.x.v * parentScaleX;
97
- const ry0 = local.y.v * parentScaleY;
98
- const parentX = world.x.v - (rx0 * pCos - ry0 * pSin) + (pivotX * cosOld - pivotY * sinOld);
99
- const parentY = world.y.v - (rx0 * pSin + ry0 * pCos) + (pivotX * sinOld + pivotY * cosOld);
100
- const rotation = targetWorldRotation - parentRot;
101
- const cosNew = Math.cos(rotation);
102
- const sinNew = Math.sin(rotation);
103
- const tx = (targetWorldX - parentX) + (pivotX * cosNew - pivotY * sinNew);
104
- const ty = (targetWorldY - parentY) + (pivotX * sinNew + pivotY * cosNew);
105
- const rx = tx * pCos + ty * pSin;
106
- const ry = -tx * pSin + ty * pCos;
107
- const invParentScaleX = parentScaleX !== 0 ? 1 / parentScaleX : 0;
108
- const invParentScaleY = parentScaleY !== 0 ? 1 / parentScaleY : 0;
109
- const x = rx * invParentScaleX;
110
- const y = ry * invParentScaleY;
111
- const newRx = x * parentScaleX;
112
- const newRy = y * parentScaleY;
113
- const newWorldX = parentX + (newRx * pCos - newRy * pSin) - (pivotX * cosNew - pivotY * sinNew);
114
- const newWorldY = parentY + (newRx * pSin + newRy * pCos) - (pivotX * sinNew + pivotY * cosNew);
115
- const newWorldRotation = parentRot + rotation;
116
- return { x, y, rotation, newWorldX, newWorldY, newWorldRotation };
117
- }
118
- //# sourceMappingURL=transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/game-object/transform.ts"],"names":[],"mappings":"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","sourcesContent":["class DirtyNumber {\n #v: number;\n #dirty: boolean;\n\n constructor(v: number) {\n this.#v = v;\n this.#dirty = false;\n }\n\n get dirty(): boolean {\n return this.#dirty;\n }\n\n get v(): number {\n return this.#v;\n }\n\n set v(v: number) {\n if (this.#v !== v) this.#dirty = true;\n this.#v = v;\n }\n\n markClean() {\n this.#dirty = false;\n }\n}\n\nexport class LocalTransform {\n x = new DirtyNumber(0);\n y = new DirtyNumber(0);\n pivotX = new DirtyNumber(0);\n pivotY = new DirtyNumber(0);\n scaleX = new DirtyNumber(1);\n scaleY = new DirtyNumber(1);\n rotation = new DirtyNumber(0);\n alpha = new DirtyNumber(1);\n\n markClean() {\n this.x.markClean();\n this.y.markClean();\n this.pivotX.markClean();\n this.pivotY.markClean();\n this.scaleX.markClean();\n this.scaleY.markClean();\n this.rotation.markClean();\n this.alpha.markClean();\n }\n}\n\nexport class WorldTransform {\n x = new DirtyNumber(0);\n y = new DirtyNumber(0);\n scaleX = new DirtyNumber(1);\n scaleY = new DirtyNumber(1);\n rotation = new DirtyNumber(0);\n alpha = new DirtyNumber(1);\n\n update(parent: WorldTransform, local: LocalTransform) {\n const rx = local.x.v * parent.scaleX.v;\n const ry = local.y.v * parent.scaleY.v;\n const pCos = Math.cos(parent.rotation.v);\n const pSin = Math.sin(parent.rotation.v);\n\n this.scaleX.v = parent.scaleX.v * local.scaleX.v;\n this.scaleY.v = parent.scaleY.v * local.scaleY.v;\n\n const pivotX = local.pivotX.v * this.scaleX.v;\n const pivotY = local.pivotY.v * this.scaleY.v;\n const cos = Math.cos(local.rotation.v);\n const sin = Math.sin(local.rotation.v);\n\n this.x.v = parent.x.v + (rx * pCos - ry * pSin) - (pivotX * cos - pivotY * sin);\n this.y.v = parent.y.v + (rx * pSin + ry * pCos) - (pivotX * sin + pivotY * cos);\n\n this.rotation.v = parent.rotation.v + local.rotation.v;\n this.alpha.v = parent.alpha.v * local.alpha.v;\n }\n\n markClean() {\n this.x.markClean();\n this.y.markClean();\n this.scaleX.markClean();\n this.scaleY.markClean();\n this.rotation.markClean();\n this.alpha.markClean();\n }\n}\n\nexport function localOffsetToWorld(\n world: WorldTransform,\n ox: number,\n oy: number\n): { x: number; y: number } {\n const cos = Math.cos(world.rotation.v);\n const sin = Math.sin(world.rotation.v);\n const sx = ox * world.scaleX.v;\n const sy = oy * world.scaleY.v;\n\n const x = sx * cos - sy * sin;\n const y = sx * sin + sy * cos;\n return { x, y };\n}\n\nexport function worldToLocalWithNewWorld(\n world: WorldTransform,\n local: LocalTransform,\n targetWorldX: number,\n targetWorldY: number,\n targetWorldRotation: number\n): {\n x: number;\n y: number;\n rotation: number;\n newWorldX: number;\n newWorldY: number;\n newWorldRotation: number;\n} {\n const invLocalScaleX = local.scaleX.v !== 0 ? 1 / local.scaleX.v : 0;\n const invLocalScaleY = local.scaleY.v !== 0 ? 1 / local.scaleY.v : 0;\n\n const parentScaleX = world.scaleX.v * invLocalScaleX;\n const parentScaleY = world.scaleY.v * invLocalScaleY;\n const parentRot = world.rotation.v - local.rotation.v;\n\n const pCos = Math.cos(parentRot);\n const pSin = Math.sin(parentRot);\n\n const cosOld = Math.cos(local.rotation.v);\n const sinOld = Math.sin(local.rotation.v);\n\n const pivotX = local.pivotX.v * world.scaleX.v;\n const pivotY = local.pivotY.v * world.scaleY.v;\n\n const rx0 = local.x.v * parentScaleX;\n const ry0 = local.y.v * parentScaleY;\n\n const parentX = world.x.v - (rx0 * pCos - ry0 * pSin) + (pivotX * cosOld - pivotY * sinOld);\n const parentY = world.y.v - (rx0 * pSin + ry0 * pCos) + (pivotX * sinOld + pivotY * cosOld);\n\n const rotation = targetWorldRotation - parentRot;\n\n const cosNew = Math.cos(rotation);\n const sinNew = Math.sin(rotation);\n\n const tx = (targetWorldX - parentX) + (pivotX * cosNew - pivotY * sinNew);\n const ty = (targetWorldY - parentY) + (pivotX * sinNew + pivotY * cosNew);\n\n const rx = tx * pCos + ty * pSin;\n const ry = -tx * pSin + ty * pCos;\n\n const invParentScaleX = parentScaleX !== 0 ? 1 / parentScaleX : 0;\n const invParentScaleY = parentScaleY !== 0 ? 1 / parentScaleY : 0;\n\n const x = rx * invParentScaleX;\n const y = ry * invParentScaleY;\n\n const newRx = x * parentScaleX;\n const newRy = y * parentScaleY;\n const newWorldX = parentX + (newRx * pCos - newRy * pSin) - (pivotX * cosNew - pivotY * sinNew);\n const newWorldY = parentY + (newRx * pSin + newRy * pCos) - (pivotX * sinNew + pivotY * cosNew);\n const newWorldRotation = parentRot + rotation;\n\n return { x, y, rotation, newWorldX, newWorldY, newWorldRotation };\n}\n"]}