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
@@ -0,0 +1,123 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { AnimatedSprite as PixiAnimatedSprite, Spritesheet, SpritesheetData } from 'pixi.js'
3
+ import { getCachedAtlasId, spritesheetLoader } from '../../asset/loaders/spritesheet'
4
+ import { GameObject, GameObjectOptions } from '../core/game-object'
5
+
6
+ export type AnimatedSpriteNodeOptions = {
7
+ src: string
8
+ atlas: SpritesheetData
9
+ animation: string
10
+ fps: number
11
+ loop?: boolean
12
+ } & GameObjectOptions
13
+
14
+ export class AnimatedSpriteNode<E extends EventMap = EventMap> extends GameObject<E & {
15
+ animationend: (animation: string) => void
16
+ }> {
17
+ #src: string
18
+ #atlas: SpritesheetData
19
+ #animation: string
20
+ #fps: number
21
+ #loop: boolean
22
+
23
+ #atlasId!: string
24
+ #sheet?: Spritesheet
25
+ #sprite?: PixiAnimatedSprite
26
+
27
+ constructor(options: AnimatedSpriteNodeOptions) {
28
+ super(options)
29
+ this.#src = options.src
30
+ this.#atlas = options.atlas
31
+ this.#animation = options.animation
32
+ this.#fps = options.fps
33
+ this.#loop = options.loop ?? true
34
+ this.#load()
35
+ }
36
+
37
+ async #load() {
38
+ this.#atlasId = getCachedAtlasId(this.#src, this.#atlas)
39
+
40
+ if (spritesheetLoader.checkCached(this.#atlasId)) {
41
+ this.#sheet = spritesheetLoader.getCached(this.#atlasId)
42
+ } else {
43
+ console.info(`Spritesheet not preloaded. Loading now: ${this.#atlasId}`)
44
+ this.#sheet = await spritesheetLoader.load(this.#atlasId, this.#src, this.#atlas)
45
+ }
46
+
47
+ this.#updateAnimation()
48
+ }
49
+
50
+ #updateAnimation() {
51
+ this.#sprite?.destroy()
52
+ this.#sprite = undefined
53
+
54
+ if (this.#sheet) {
55
+ if (!this.#sheet.animations[this.#animation]) {
56
+ console.error(`Animation not found: ${this.#animation}`)
57
+ return
58
+ }
59
+
60
+ const s = new PixiAnimatedSprite(this.#sheet.animations[this.#animation])
61
+ s.anchor.set(0.5, 0.5)
62
+ s.loop = this.#loop
63
+ s.animationSpeed = (this.#fps ?? 0) / 60
64
+ s.play()
65
+ s.onLoop = () => (this as any).emit('animationend', this.#animation)
66
+ s.onComplete = () => (this as any).emit('animationend', this.#animation)
67
+ this._pixiContainer.addChild(s)
68
+ this.#sprite = s
69
+ }
70
+ }
71
+
72
+ set src(src) {
73
+ if (this.#src !== src) {
74
+ spritesheetLoader.release(this.#atlasId)
75
+ this.#src = src
76
+ this.#load()
77
+ }
78
+ }
79
+
80
+ get src() { return this.#src }
81
+
82
+ set atlas(atlas) {
83
+ if (this.#atlas !== atlas) {
84
+ spritesheetLoader.release(this.#atlasId)
85
+ this.#atlas = atlas
86
+ this.#load()
87
+ }
88
+ }
89
+
90
+ get atlas() { return this.#atlas }
91
+
92
+ set animation(animation) {
93
+ if (this.#animation !== animation) {
94
+ this.#animation = animation
95
+ this.#updateAnimation()
96
+ }
97
+ }
98
+
99
+ get animation() { return this.#animation }
100
+
101
+ set fps(fps) {
102
+ if (this.#fps !== fps) {
103
+ this.#fps = fps
104
+ if (this.#sprite) this.#sprite.animationSpeed = (fps ?? 0) / 60
105
+ }
106
+ }
107
+
108
+ get fps() { return this.#fps }
109
+
110
+ set loop(loop) {
111
+ if (this.#loop !== loop) {
112
+ this.#loop = loop
113
+ if (this.#sprite) this.#sprite.loop = loop
114
+ }
115
+ }
116
+
117
+ get loop() { return this.#loop }
118
+
119
+ remove() {
120
+ spritesheetLoader.release(this.#atlasId)
121
+ super.remove()
122
+ }
123
+ }
@@ -0,0 +1,109 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { Rectangle as PixiRectangle, Sprite as PixiSprite, Texture as PixiTexture } from 'pixi.js'
3
+ import { bitmapFontLoader } from '../../asset/loaders/bitmap-font'
4
+ import { GameObject, GameObjectOptions } from '../core/game-object'
5
+
6
+ export type BitmapTextNodeOptions = {
7
+ fnt: string
8
+ src: string
9
+ text: string
10
+ } & GameObjectOptions
11
+
12
+ export class BitmapTextNode<E extends EventMap = EventMap> extends GameObject<E> {
13
+ #fnt: string
14
+ #src: string
15
+ #text: string
16
+
17
+ constructor(options: BitmapTextNodeOptions) {
18
+ super(options)
19
+ this.#fnt = options.fnt
20
+ this.#src = options.src
21
+ this.#text = options.text
22
+ this.#load()
23
+ }
24
+
25
+ async #load() {
26
+ let font
27
+ if (bitmapFontLoader.checkCached(this.#fnt)) {
28
+ font = bitmapFontLoader.getCached(this.#fnt)
29
+ } else {
30
+ console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`)
31
+ font = await bitmapFontLoader.load(this.#fnt, this.#src)
32
+ }
33
+ if (!font) return
34
+
35
+ const sprites: PixiSprite[] = []
36
+
37
+ let xPos = 0, yPos = 0
38
+ let minX = Infinity, minY = Infinity
39
+ let maxX = -Infinity, maxY = -Infinity
40
+
41
+ for (let i = 0; i < this.#text.length; i++) {
42
+ const charCode = this.#text.charCodeAt(i)
43
+
44
+ if (charCode === 10) {
45
+ xPos = 0
46
+ yPos += font.lineHeight
47
+ continue
48
+ }
49
+
50
+ const c = font.chars[charCode]
51
+ if (!c) continue
52
+
53
+ const frame = new PixiRectangle(c.x, c.y, c.width, c.height)
54
+ const texture = new PixiTexture({ source: font.texture.source, frame })
55
+ const sprite = new PixiSprite(texture)
56
+
57
+ const x0 = xPos + c.xoffset
58
+ const y0 = yPos + c.yoffset
59
+
60
+ sprite.x = x0
61
+ sprite.y = y0
62
+
63
+ sprites.push(sprite)
64
+
65
+ const x1 = x0 + c.width
66
+ const y1 = y0 + c.height
67
+
68
+ if (x0 < minX) minX = x0
69
+ if (y0 < minY) minY = y0
70
+ if (x1 > maxX) maxX = x1
71
+ if (y1 > maxY) maxY = y1
72
+
73
+ xPos += c.xadvance
74
+ }
75
+
76
+ if (minX === Infinity) {
77
+ minX = 0
78
+ minY = 0
79
+ }
80
+
81
+ if (maxX === -Infinity) {
82
+ maxX = 0
83
+ maxY = 0
84
+ }
85
+
86
+ const width = maxX - minX
87
+ const height = maxY - minY
88
+
89
+ for (const s of sprites) {
90
+ s.x -= width / 2
91
+ s.y -= height / 2
92
+ this._pixiContainer.addChild(s)
93
+ }
94
+ }
95
+
96
+ changeFont(fnt: string, src: string) {
97
+ if (this.#fnt !== fnt || this.#src !== src) {
98
+ bitmapFontLoader.release(this.#fnt)
99
+ this.#fnt = fnt
100
+ this.#src = src
101
+ this.#load()
102
+ }
103
+ }
104
+
105
+ override remove() {
106
+ bitmapFontLoader.release(this.#fnt)
107
+ super.remove()
108
+ }
109
+ }
@@ -0,0 +1,40 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { FillInput, Graphics, StrokeInput } from 'pixi.js'
3
+ import { TransformableNode, TransformableNodeOptions } from '../core/transformable'
4
+
5
+ export type CircleNodeOptions = {
6
+ radius: number
7
+ fill?: FillInput
8
+ stroke?: StrokeInput
9
+ } & TransformableNodeOptions
10
+
11
+ export class CircleNode extends TransformableNode<Graphics, EventMap> {
12
+ #radius: number
13
+ #fill?: FillInput
14
+ #stroke?: StrokeInput
15
+
16
+ constructor(options: CircleNodeOptions) {
17
+ super(new Graphics({ sortableChildren: true }), options)
18
+
19
+ this.#radius = options.radius
20
+ this.#fill = options.fill
21
+ this.#stroke = options.stroke
22
+
23
+ this.#draw()
24
+ }
25
+
26
+ #draw() {
27
+ this._pixiContainer.clear().circle(0, 0, this.#radius)
28
+ if (this.#fill) this._pixiContainer.fill(this.#fill)
29
+ if (this.#stroke) this._pixiContainer.stroke(this.#stroke)
30
+ }
31
+
32
+ get radius() { return this.#radius }
33
+ set radius(v) { this.#radius = v; this.#draw() }
34
+
35
+ get fill() { return this.#fill }
36
+ set fill(v) { this.#fill = v; this.#draw() }
37
+
38
+ get stroke() { return this.#stroke }
39
+ set stroke(v) { this.#stroke = v; this.#draw() }
40
+ }
@@ -0,0 +1,24 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { GameNode } from '../core/game-node'
3
+
4
+ export class DelayNode extends GameNode<EventMap> {
5
+ #delay: number
6
+ #accumulated = 0
7
+ #callback: () => void
8
+
9
+ constructor(delay: number, callback: () => void) {
10
+ super()
11
+ this.#delay = delay
12
+ this.#callback = callback
13
+ }
14
+
15
+ protected override update(dt: number) {
16
+ super.update(dt)
17
+
18
+ this.#accumulated += dt
19
+ if (this.#accumulated >= this.#delay) {
20
+ this.#callback()
21
+ this.remove()
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,62 @@
1
+ import { Renderer } from '../../renderer/renderer'
2
+ import { GameObject, GameObjectOptions } from '../core/game-object'
3
+
4
+ export type DomContainerNodeOptions = {} & GameObjectOptions
5
+
6
+ export class DomContainerNode extends GameObject {
7
+ #el: HTMLElement
8
+
9
+ constructor(el: HTMLElement, options?: DomContainerNodeOptions) {
10
+ super(options)
11
+ el.style.position = 'absolute'
12
+ el.style.left = '0'
13
+ el.style.top = '0'
14
+ el.style.zIndex = '1'
15
+ this.#el = el
16
+ }
17
+
18
+ #syncTransform() {
19
+ const renderer = this.renderer
20
+ if (renderer) {
21
+ const wt = this.worldTransform
22
+ const S = renderer.viewportScale
23
+
24
+ this.#el.style.transform = `
25
+ translate(
26
+ calc(-50% + ${wt.x.v * S + renderer.canvasLeft + renderer.centerX * S}px),
27
+ calc(-50% + ${wt.y.v * S + renderer.canvasTop + renderer.centerY * S}px)
28
+ )
29
+ scale(${wt.scaleX.v * S}, ${wt.scaleY.v * S})
30
+ rotate(${wt.rotation.v}rad)
31
+ `
32
+ }
33
+ }
34
+
35
+ protected override set renderer(renderer: Renderer | undefined) {
36
+ super.renderer = renderer
37
+
38
+ if (renderer) {
39
+ renderer.container.appendChild(this.#el)
40
+ this.#syncTransform()
41
+ }
42
+ }
43
+
44
+ protected override get renderer() {
45
+ return super.renderer
46
+ }
47
+
48
+ protected update(dt: number): void {
49
+ super.update(dt)
50
+
51
+ const renderer = this.renderer
52
+ if (renderer && (renderer._isSizeDirty || this.worldTransform.dirty)) {
53
+ this.#syncTransform()
54
+ }
55
+ if (this.worldAlpha.dirty) this.#el.style.opacity = this.worldAlpha.v.toString()
56
+ }
57
+
58
+ override remove() {
59
+ this.#el.remove()
60
+ super.remove()
61
+ }
62
+ }
@@ -0,0 +1,24 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { GameNode } from '../core/game-node'
3
+
4
+ export class IntervalNode extends GameNode<EventMap> {
5
+ interval: number
6
+ #accumulated = 0
7
+ #callback: () => void
8
+
9
+ constructor(interval: number, callback: () => void) {
10
+ super()
11
+ this.interval = interval
12
+ this.#callback = callback
13
+ }
14
+
15
+ protected override update(dt: number) {
16
+ super.update(dt)
17
+
18
+ this.#accumulated += dt
19
+ if (this.#accumulated >= this.interval) {
20
+ this.#accumulated %= this.interval
21
+ this.#callback()
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,142 @@
1
+ import { BLEND_MODES, Sprite as PixiSprite, Texture as PixiTexture } from 'pixi.js'
2
+ import { textureLoader } from '../../asset/loaders/texture'
3
+ import { GameObject, GameObjectOptions } from '../core/game-object'
4
+
5
+ type RandomRange = { min: number, max: number }
6
+
7
+ export type ParticleSystemOptions = {
8
+ texture: string
9
+
10
+ count: RandomRange
11
+ lifespan: RandomRange
12
+ angle: RandomRange
13
+ velocity: RandomRange
14
+ particleScale: RandomRange
15
+
16
+ startAlpha?: number
17
+ fadeRate: number
18
+ orientToVelocity: boolean
19
+
20
+ blendMode?: BLEND_MODES // ex) 'screen', 'multiply'
21
+ } & GameObjectOptions
22
+
23
+ interface Particle {
24
+ sprite: PixiSprite
25
+
26
+ age: number
27
+ lifespan: number
28
+
29
+ velocityX: number
30
+ velocityY: number
31
+
32
+ fadeRate: number
33
+ }
34
+
35
+ function random(min: number, max: number) {
36
+ return Math.random() * (max - min) + min
37
+ }
38
+
39
+ export class ParticleSystem extends GameObject {
40
+ #textureSrc: string
41
+ #count: RandomRange
42
+ #lifespan: RandomRange
43
+ #angle: RandomRange
44
+ #velocity: RandomRange
45
+ #scale: RandomRange
46
+ #startAlpha?: number
47
+ #fadeRate: number
48
+ #orientToVelocity: boolean
49
+ #blendMode?: BLEND_MODES
50
+
51
+ #texture?: PixiTexture
52
+ #loadTexturePromise: Promise<void>
53
+ #particles: Particle[] = []
54
+
55
+ constructor(options: ParticleSystemOptions) {
56
+ super(options)
57
+
58
+ this.#textureSrc = options.texture
59
+ this.#count = options.count
60
+ this.#lifespan = options.lifespan
61
+ this.#angle = options.angle
62
+ this.#velocity = options.velocity
63
+ this.#scale = options.particleScale
64
+ this.#startAlpha = options.startAlpha
65
+ this.#fadeRate = options.fadeRate
66
+ this.#orientToVelocity = options.orientToVelocity
67
+ this.#blendMode = options.blendMode
68
+
69
+ this.#loadTexturePromise = this.#loadTexture()
70
+ }
71
+
72
+ async #loadTexture() {
73
+ if (textureLoader.checkCached(this.#textureSrc)) {
74
+ this.#texture = textureLoader.getCached(this.#textureSrc)
75
+ } else {
76
+ console.info(`Texture not preloaded. Loading now: ${this.#textureSrc}`)
77
+ this.#texture = await textureLoader.load(this.#textureSrc)
78
+ }
79
+ }
80
+
81
+ async burst({ x, y }: { x: number; y: number }) {
82
+ if (!this.#texture) await this.#loadTexturePromise
83
+
84
+ const count = random(this.#count.min, this.#count.max)
85
+ for (let i = 0; i < count; i++) {
86
+ const lifespan = random(this.#lifespan.min, this.#lifespan.max)
87
+ const angle = random(this.#angle.min, this.#angle.max)
88
+ const sin = Math.sin(angle)
89
+ const cos = Math.cos(angle)
90
+ const velocity = random(this.#velocity.min, this.#velocity.max)
91
+ const scale = random(this.#scale.min, this.#scale.max)
92
+
93
+ const sprite = new PixiSprite({
94
+ x, y,
95
+ texture: this.#texture,
96
+ anchor: { x: 0.5, y: 0.5 },
97
+ scale: { x: scale, y: scale },
98
+ alpha: this.#startAlpha,
99
+ blendMode: this.#blendMode,
100
+ rotation: this.#orientToVelocity ? angle : undefined,
101
+ })
102
+
103
+ this.#particles.push({
104
+ sprite,
105
+ age: 0,
106
+ lifespan,
107
+ velocityX: velocity * cos,
108
+ velocityY: velocity * sin,
109
+ fadeRate: this.#fadeRate,
110
+ })
111
+
112
+ this._pixiContainer.addChild(sprite)
113
+ }
114
+ }
115
+
116
+ protected update(dt: number) {
117
+ super.update(dt)
118
+
119
+ const ps = this.#particles
120
+ for (let i = 0; i < ps.length; i++) {
121
+ const p = ps[i]
122
+ const g = p.sprite
123
+
124
+ p.age += dt
125
+ if (p.age > p.lifespan) {
126
+ g.destroy({ children: true })
127
+ ps.splice(i, 1)
128
+ i--
129
+ continue
130
+ }
131
+
132
+ g.x += p.velocityX * dt
133
+ g.y += p.velocityY * dt
134
+ g.alpha += p.fadeRate * dt
135
+ }
136
+ }
137
+
138
+ override remove() {
139
+ textureLoader.release(this.#textureSrc)
140
+ super.remove()
141
+ }
142
+ }
@@ -0,0 +1,51 @@
1
+ import { EventMap } from '@webtaku/event-emitter'
2
+ import { FillInput, Graphics, StrokeInput } from 'pixi.js'
3
+ import { TransformableNode, TransformableNodeOptions } from '../core/transformable'
4
+
5
+ export type RectangleNodeOptions = {
6
+ width: number
7
+ height: number
8
+ fill?: FillInput
9
+ stroke?: StrokeInput
10
+ } & TransformableNodeOptions
11
+
12
+ export class RectangleNode extends TransformableNode<Graphics, EventMap> {
13
+ #width: number
14
+ #height: number
15
+ #fill?: FillInput
16
+ #stroke?: StrokeInput
17
+
18
+ constructor(options: RectangleNodeOptions) {
19
+ super(new Graphics({ sortableChildren: true }), options)
20
+
21
+ this.#width = options.width
22
+ this.#height = options.height
23
+ this.#fill = options.fill
24
+ this.#stroke = options.stroke
25
+
26
+ this.#draw()
27
+ }
28
+
29
+ #draw() {
30
+ this._pixiContainer.clear().rect(
31
+ -this.#width / 2,
32
+ -this.#height / 2,
33
+ this.#width,
34
+ this.#height,
35
+ )
36
+ if (this.#fill) this._pixiContainer.fill(this.#fill)
37
+ if (this.#stroke) this._pixiContainer.stroke(this.#stroke)
38
+ }
39
+
40
+ get width() { return this.#width }
41
+ set width(v) { this.#width = v; this.#draw() }
42
+
43
+ get height() { return this.#height }
44
+ set height(v) { this.#height = v; this.#draw() }
45
+
46
+ get fill() { return this.#fill }
47
+ set fill(v) { this.#fill = v; this.#draw() }
48
+
49
+ get stroke() { return this.#stroke }
50
+ set stroke(v) { this.#stroke = v; this.#draw() }
51
+ }