kiwiengine 0.0.1-alpha → 0.5.3

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 (599) hide show
  1. package/README.ko.md +550 -0
  2. package/README.md +575 -4
  3. package/examples/auto-battle/assets/bgm/battle.mp3 +0 -0
  4. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  5. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  6. package/examples/auto-battle/assets/joystick/joystick.png +0 -0
  7. package/examples/auto-battle/assets/joystick/knob.png +0 -0
  8. package/examples/auto-battle/assets/sfx/hero/die/die.wav +0 -0
  9. package/examples/auto-battle/assets/sfx/hero/heal/heal.wav +0 -0
  10. package/examples/auto-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  11. package/examples/auto-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  12. package/examples/auto-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  13. package/examples/auto-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  14. package/examples/auto-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  15. package/examples/auto-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  16. package/examples/auto-battle/assets/sfx/orc/die/die.wav +0 -0
  17. package/examples/auto-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  18. package/examples/auto-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  19. package/examples/auto-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  20. package/examples/auto-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  21. package/examples/auto-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  22. package/examples/auto-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  23. package/examples/auto-battle/assets/spritesheets/hero-atlas.json +246 -0
  24. package/examples/auto-battle/assets/spritesheets/hero.png +0 -0
  25. package/examples/auto-battle/assets/spritesheets/orc-atlas.json +246 -0
  26. package/examples/auto-battle/assets/spritesheets/orc.png +0 -0
  27. package/examples/auto-battle/assets/spritesheets/potion-atlas.json +68 -0
  28. package/examples/auto-battle/assets/spritesheets/potion.png +0 -0
  29. package/examples/auto-battle/dist/game.js +2 -0
  30. package/examples/auto-battle/dist/game.js.LICENSE.txt +35 -0
  31. package/examples/auto-battle/hud/damage-text.ts +46 -0
  32. package/examples/auto-battle/hud/heal-text.ts +46 -0
  33. package/examples/auto-battle/hud/hp-bar.ts +38 -0
  34. package/examples/auto-battle/index.ts +41 -0
  35. package/examples/auto-battle/objects/character.ts +95 -0
  36. package/examples/auto-battle/objects/hero.ts +119 -0
  37. package/examples/auto-battle/objects/orc.ts +107 -0
  38. package/examples/auto-battle/objects/potion.ts +27 -0
  39. package/examples/auto-battle/stage.ts +366 -0
  40. package/examples/battle-benchmark-matterjs/assets/bgm/battle.mp3 +0 -0
  41. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  42. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.png +0 -0
  43. package/examples/battle-benchmark-matterjs/assets/joystick/joystick.png +0 -0
  44. package/examples/battle-benchmark-matterjs/assets/joystick/knob.png +0 -0
  45. package/examples/battle-benchmark-matterjs/assets/sfx/hero/die/die.wav +0 -0
  46. package/examples/battle-benchmark-matterjs/assets/sfx/hero/heal/heal.wav +0 -0
  47. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit1.wav +0 -0
  48. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit2.wav +0 -0
  49. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit3.wav +0 -0
  50. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss1.wav +0 -0
  51. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss2.wav +0 -0
  52. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss3.wav +0 -0
  53. package/examples/battle-benchmark-matterjs/assets/sfx/orc/die/die.wav +0 -0
  54. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit1.wav +0 -0
  55. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit2.wav +0 -0
  56. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit3.wav +0 -0
  57. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss1.wav +0 -0
  58. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss2.wav +0 -0
  59. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss3.wav +0 -0
  60. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero-atlas.json +246 -0
  61. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero.png +0 -0
  62. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc-atlas.json +246 -0
  63. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc.png +0 -0
  64. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion-atlas.json +68 -0
  65. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion.png +0 -0
  66. package/examples/battle-benchmark-matterjs/dist/game.js +2 -0
  67. package/examples/battle-benchmark-matterjs/dist/game.js.LICENSE.txt +35 -0
  68. package/examples/battle-benchmark-matterjs/hud/damage-text.ts +46 -0
  69. package/examples/battle-benchmark-matterjs/hud/heal-text.ts +46 -0
  70. package/examples/battle-benchmark-matterjs/hud/hp-bar.ts +38 -0
  71. package/examples/battle-benchmark-matterjs/index.html +24 -0
  72. package/examples/battle-benchmark-matterjs/index.ts +41 -0
  73. package/examples/battle-benchmark-matterjs/objects/character.ts +95 -0
  74. package/examples/battle-benchmark-matterjs/objects/hero.ts +111 -0
  75. package/examples/battle-benchmark-matterjs/objects/orc.ts +107 -0
  76. package/examples/battle-benchmark-matterjs/objects/potion.ts +27 -0
  77. package/examples/battle-benchmark-matterjs/stage.ts +177 -0
  78. package/examples/battle-benchmark-separation/assets/bgm/battle.mp3 +0 -0
  79. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  80. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.png +0 -0
  81. package/examples/battle-benchmark-separation/assets/joystick/joystick.png +0 -0
  82. package/examples/battle-benchmark-separation/assets/joystick/knob.png +0 -0
  83. package/examples/battle-benchmark-separation/assets/sfx/hero/die/die.wav +0 -0
  84. package/examples/battle-benchmark-separation/assets/sfx/hero/heal/heal.wav +0 -0
  85. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit1.wav +0 -0
  86. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit2.wav +0 -0
  87. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit3.wav +0 -0
  88. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss1.wav +0 -0
  89. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss2.wav +0 -0
  90. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss3.wav +0 -0
  91. package/examples/battle-benchmark-separation/assets/sfx/orc/die/die.wav +0 -0
  92. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit1.wav +0 -0
  93. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit2.wav +0 -0
  94. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit3.wav +0 -0
  95. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss1.wav +0 -0
  96. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss2.wav +0 -0
  97. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss3.wav +0 -0
  98. package/examples/battle-benchmark-separation/assets/spritesheets/hero-atlas.json +246 -0
  99. package/examples/battle-benchmark-separation/assets/spritesheets/hero.png +0 -0
  100. package/examples/battle-benchmark-separation/assets/spritesheets/orc-atlas.json +246 -0
  101. package/examples/battle-benchmark-separation/assets/spritesheets/orc.png +0 -0
  102. package/examples/battle-benchmark-separation/assets/spritesheets/potion-atlas.json +68 -0
  103. package/examples/battle-benchmark-separation/assets/spritesheets/potion.png +0 -0
  104. package/examples/battle-benchmark-separation/dist/game.js +2 -0
  105. package/examples/battle-benchmark-separation/dist/game.js.LICENSE.txt +35 -0
  106. package/examples/battle-benchmark-separation/hud/damage-text.ts +46 -0
  107. package/examples/battle-benchmark-separation/hud/heal-text.ts +46 -0
  108. package/examples/battle-benchmark-separation/hud/hp-bar.ts +38 -0
  109. package/examples/battle-benchmark-separation/index.html +24 -0
  110. package/examples/battle-benchmark-separation/index.ts +41 -0
  111. package/examples/battle-benchmark-separation/objects/character.ts +225 -0
  112. package/examples/battle-benchmark-separation/objects/hero.ts +110 -0
  113. package/examples/battle-benchmark-separation/objects/orc.ts +213 -0
  114. package/examples/battle-benchmark-separation/objects/potion.ts +27 -0
  115. package/examples/battle-benchmark-separation/stage.ts +178 -0
  116. package/examples/battle-benchmark-separation2/assets/bgm/battle.mp3 +0 -0
  117. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  118. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.png +0 -0
  119. package/examples/battle-benchmark-separation2/assets/joystick/joystick.png +0 -0
  120. package/examples/battle-benchmark-separation2/assets/joystick/knob.png +0 -0
  121. package/examples/battle-benchmark-separation2/assets/sfx/hero/die/die.wav +0 -0
  122. package/examples/battle-benchmark-separation2/assets/sfx/hero/heal/heal.wav +0 -0
  123. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit1.wav +0 -0
  124. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit2.wav +0 -0
  125. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit3.wav +0 -0
  126. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss1.wav +0 -0
  127. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss2.wav +0 -0
  128. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss3.wav +0 -0
  129. package/examples/battle-benchmark-separation2/assets/sfx/orc/die/die.wav +0 -0
  130. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit1.wav +0 -0
  131. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit2.wav +0 -0
  132. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit3.wav +0 -0
  133. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss1.wav +0 -0
  134. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss2.wav +0 -0
  135. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss3.wav +0 -0
  136. package/examples/battle-benchmark-separation2/assets/spritesheets/hero-atlas.json +246 -0
  137. package/examples/battle-benchmark-separation2/assets/spritesheets/hero.png +0 -0
  138. package/examples/battle-benchmark-separation2/assets/spritesheets/orc-atlas.json +246 -0
  139. package/examples/battle-benchmark-separation2/assets/spritesheets/orc.png +0 -0
  140. package/examples/battle-benchmark-separation2/assets/spritesheets/potion-atlas.json +68 -0
  141. package/examples/battle-benchmark-separation2/assets/spritesheets/potion.png +0 -0
  142. package/examples/battle-benchmark-separation2/dist/game.js +2 -0
  143. package/examples/battle-benchmark-separation2/dist/game.js.LICENSE.txt +35 -0
  144. package/examples/battle-benchmark-separation2/hud/damage-text.ts +46 -0
  145. package/examples/battle-benchmark-separation2/hud/heal-text.ts +46 -0
  146. package/examples/battle-benchmark-separation2/hud/hp-bar.ts +38 -0
  147. package/examples/battle-benchmark-separation2/index.html +24 -0
  148. package/examples/battle-benchmark-separation2/index.ts +41 -0
  149. package/examples/battle-benchmark-separation2/objects/character.ts +195 -0
  150. package/examples/battle-benchmark-separation2/objects/hero.ts +110 -0
  151. package/examples/battle-benchmark-separation2/objects/orc.ts +213 -0
  152. package/examples/battle-benchmark-separation2/objects/potion.ts +27 -0
  153. package/examples/battle-benchmark-separation2/stage.ts +178 -0
  154. package/examples/collision-test/assets/cat.png +0 -0
  155. package/examples/collision-test/dist/game.js +2 -0
  156. package/examples/collision-test/dist/game.js.LICENSE.txt +35 -0
  157. package/examples/collision-test/index.html +24 -0
  158. package/examples/collision-test/index.ts +30 -0
  159. package/examples/dom-particle-test/assets/bird.png +0 -0
  160. package/examples/dom-particle-test/dist/game.js +2 -0
  161. package/examples/dom-particle-test/dist/game.js.LICENSE.txt +35 -0
  162. package/examples/dom-particle-test/index.html +24 -0
  163. package/examples/dom-particle-test/index.ts +27 -0
  164. package/examples/dom-sprite-test/assets/bird.png +0 -0
  165. package/examples/dom-sprite-test/assets/fire.png +0 -0
  166. package/examples/dom-sprite-test/assets/run.png +0 -0
  167. package/examples/dom-sprite-test/dist/game.js +2 -0
  168. package/examples/dom-sprite-test/dist/game.js.LICENSE.txt +35 -0
  169. package/examples/dom-sprite-test/index.html +24 -0
  170. package/examples/dom-sprite-test/index.ts +35 -0
  171. package/examples/dom-test/dist/game.js +2 -0
  172. package/examples/dom-test/dist/game.js.LICENSE.txt +35 -0
  173. package/examples/dom-test/index.html +24 -0
  174. package/examples/dom-test/index.ts +22 -0
  175. package/examples/particle-test/assets/bird.png +0 -0
  176. package/examples/particle-test/dist/game.js +2 -0
  177. package/examples/particle-test/dist/game.js.LICENSE.txt +35 -0
  178. package/examples/particle-test/index.html +24 -0
  179. package/examples/particle-test/index.ts +30 -0
  180. package/examples/renderer-test/dist/game.js +2 -0
  181. package/examples/renderer-test/dist/game.js.LICENSE.txt +35 -0
  182. package/examples/renderer-test/index.html +24 -0
  183. package/examples/renderer-test/index.ts +9 -0
  184. package/examples/simple-battle/assets/bgm/battle.mp3 +0 -0
  185. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  186. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  187. package/examples/simple-battle/assets/joystick/joystick.png +0 -0
  188. package/examples/simple-battle/assets/joystick/knob.png +0 -0
  189. package/examples/simple-battle/assets/sfx/hero/die/die.wav +0 -0
  190. package/examples/simple-battle/assets/sfx/hero/heal/heal.wav +0 -0
  191. package/examples/simple-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  192. package/examples/simple-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  193. package/examples/simple-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  194. package/examples/simple-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  195. package/examples/simple-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  196. package/examples/simple-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  197. package/examples/simple-battle/assets/sfx/orc/die/die.wav +0 -0
  198. package/examples/simple-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  199. package/examples/simple-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  200. package/examples/simple-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  201. package/examples/simple-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  202. package/examples/simple-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  203. package/examples/simple-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  204. package/examples/simple-battle/assets/spritesheets/hero-atlas.json +246 -0
  205. package/examples/simple-battle/assets/spritesheets/hero.png +0 -0
  206. package/examples/simple-battle/assets/spritesheets/orc-atlas.json +246 -0
  207. package/examples/simple-battle/assets/spritesheets/orc.png +0 -0
  208. package/examples/simple-battle/assets/spritesheets/potion-atlas.json +68 -0
  209. package/examples/simple-battle/assets/spritesheets/potion.png +0 -0
  210. package/examples/simple-battle/dist/game.js +2 -0
  211. package/examples/simple-battle/dist/game.js.LICENSE.txt +35 -0
  212. package/examples/simple-battle/hud/damage-text.ts +46 -0
  213. package/examples/simple-battle/hud/heal-text.ts +46 -0
  214. package/examples/simple-battle/hud/hp-bar.ts +38 -0
  215. package/examples/simple-battle/index.html +24 -0
  216. package/examples/simple-battle/index.ts +41 -0
  217. package/examples/simple-battle/objects/character.ts +95 -0
  218. package/examples/simple-battle/objects/hero.ts +111 -0
  219. package/examples/simple-battle/objects/orc.ts +107 -0
  220. package/examples/simple-battle/objects/potion.ts +27 -0
  221. package/examples/simple-battle/stage.ts +174 -0
  222. package/examples/spine-test/assets/spine/spineboy.atlas +95 -0
  223. package/examples/spine-test/assets/spine/spineboy.png +0 -0
  224. package/examples/spine-test/assets/spine/spineboy.skel +0 -0
  225. package/examples/spine-test/dist/game.js +2 -0
  226. package/examples/spine-test/dist/game.js.LICENSE.txt +35 -0
  227. package/examples/spine-test/index.html +24 -0
  228. package/examples/spine-test/index.ts +29 -0
  229. package/examples/sprite-test/assets/bird.png +0 -0
  230. package/examples/sprite-test/assets/fire.png +0 -0
  231. package/examples/sprite-test/dist/game.js +2 -0
  232. package/examples/sprite-test/dist/game.js.LICENSE.txt +35 -0
  233. package/examples/sprite-test/index.html +24 -0
  234. package/examples/sprite-test/index.ts +38 -0
  235. package/examples/tsconfig.json +2 -1
  236. package/examples/webpack.config.js +17 -3
  237. package/jest.config.ts +10 -0
  238. package/lib/asset/audio.js +47 -11
  239. package/lib/asset/audio.js.map +1 -1
  240. package/lib/asset/loaders/audio.js +7 -4
  241. package/lib/asset/loaders/audio.js.map +1 -1
  242. package/lib/asset/loaders/binary.js +7 -4
  243. package/lib/asset/loaders/binary.js.map +1 -1
  244. package/lib/asset/loaders/bitmap-font.js +74 -0
  245. package/lib/asset/loaders/bitmap-font.js.map +1 -0
  246. package/lib/asset/loaders/font.js +4 -1
  247. package/lib/asset/loaders/font.js.map +1 -1
  248. package/lib/asset/loaders/loader.js +17 -12
  249. package/lib/asset/loaders/loader.js.map +1 -1
  250. package/lib/asset/loaders/spritesheet.js +18 -8
  251. package/lib/asset/loaders/spritesheet.js.map +1 -1
  252. package/lib/asset/loaders/text.js +6 -3
  253. package/lib/asset/loaders/text.js.map +1 -1
  254. package/lib/asset/loaders/texture.js +22 -26
  255. package/lib/asset/loaders/texture.js.map +1 -1
  256. package/lib/asset/preload.js +60 -56
  257. package/lib/asset/preload.js.map +1 -1
  258. package/lib/collision/check-collision.js +804 -0
  259. package/lib/collision/check-collision.js.map +1 -0
  260. package/lib/collision/check-collision.test.js +300 -0
  261. package/lib/collision/check-collision.test.js.map +1 -0
  262. package/lib/collision/colliders.js +8 -0
  263. package/lib/collision/colliders.js.map +1 -0
  264. package/lib/debug.js.map +1 -0
  265. package/lib/dom/dom-animated-sprite.js +106 -0
  266. package/lib/dom/dom-animated-sprite.js.map +1 -0
  267. package/lib/dom/dom-game-object.js +108 -0
  268. package/lib/dom/dom-game-object.js.map +1 -0
  269. package/lib/dom/dom-particle.js +105 -0
  270. package/lib/dom/dom-particle.js.map +1 -0
  271. package/lib/dom/dom-preload.js +43 -0
  272. package/lib/dom/dom-preload.js.map +1 -0
  273. package/lib/dom/dom-sprite.js +40 -0
  274. package/lib/dom/dom-sprite.js.map +1 -0
  275. package/lib/dom/dom-texture-loader.js +36 -0
  276. package/lib/dom/dom-texture-loader.js.map +1 -0
  277. package/lib/dom/dom-utils.js +20 -0
  278. package/lib/dom/dom-utils.js.map +1 -0
  279. package/lib/index copy.js +16 -0
  280. package/lib/index copy.js.map +1 -0
  281. package/lib/index.js +36 -10
  282. package/lib/index.js.map +1 -1
  283. package/lib/input/joystick.js +262 -0
  284. package/lib/input/joystick.js.map +1 -0
  285. package/lib/node/core/dirty-number.js +19 -0
  286. package/lib/node/core/dirty-number.js.map +1 -0
  287. package/lib/node/core/game-node.js +63 -0
  288. package/lib/node/core/game-node.js.map +1 -0
  289. package/lib/node/core/game-object.js +8 -0
  290. package/lib/node/core/game-object.js.map +1 -0
  291. package/lib/node/core/renderable.js +59 -0
  292. package/lib/node/core/renderable.js.map +1 -0
  293. package/lib/node/core/transform.js +70 -0
  294. package/lib/node/core/transform.js.map +1 -0
  295. package/lib/node/core/transformable.js +85 -0
  296. package/lib/node/core/transformable.js.map +1 -0
  297. package/lib/node/ext/animated-sprite.js +77 -0
  298. package/lib/node/ext/animated-sprite.js.map +1 -0
  299. package/lib/node/ext/bitmap-text.js +93 -0
  300. package/lib/node/ext/bitmap-text.js.map +1 -0
  301. package/lib/node/ext/circle.js +43 -0
  302. package/lib/node/ext/circle.js.map +1 -0
  303. package/lib/node/ext/deplay.js +22 -0
  304. package/lib/node/ext/deplay.js.map +1 -0
  305. package/lib/node/ext/dom-container.js +51 -0
  306. package/lib/node/ext/dom-container.js.map +1 -0
  307. package/lib/node/ext/interval.js +22 -0
  308. package/lib/node/ext/interval.js.map +1 -0
  309. package/lib/node/ext/particle.js +98 -0
  310. package/lib/node/ext/particle.js.map +1 -0
  311. package/lib/node/ext/rectangle.js +52 -0
  312. package/lib/node/ext/rectangle.js.map +1 -0
  313. package/lib/node/ext/spine.js +272 -0
  314. package/lib/node/ext/spine.js.map +1 -0
  315. package/lib/node/ext/sprite.js +42 -0
  316. package/lib/node/ext/sprite.js.map +1 -0
  317. package/lib/node/physics/physics-object.js +92 -0
  318. package/lib/node/physics/physics-object.js.map +1 -0
  319. package/lib/node/physics/physics-world.js +29 -0
  320. package/lib/node/physics/physics-world.js.map +1 -0
  321. package/lib/node/physics/rigidbodies.js +7 -0
  322. package/lib/node/physics/rigidbodies.js.map +1 -0
  323. package/lib/renderer/camera.js +19 -0
  324. package/lib/renderer/camera.js.map +1 -0
  325. package/lib/renderer/container-manager.js +29 -0
  326. package/lib/renderer/container-manager.js.map +1 -0
  327. package/lib/renderer/fps-display.js +18 -0
  328. package/lib/renderer/fps-display.js.map +1 -0
  329. package/lib/renderer/layer.js +12 -0
  330. package/lib/renderer/layer.js.map +1 -0
  331. package/lib/renderer/renderer.js +146 -0
  332. package/lib/renderer/renderer.js.map +1 -0
  333. package/lib/renderer/ticker.js +56 -0
  334. package/lib/renderer/ticker.js.map +1 -0
  335. package/lib/renderer/ticker.test.js +241 -0
  336. package/lib/renderer/ticker.test.js.map +1 -0
  337. package/lib/types/animation-atlas.js +2 -0
  338. package/lib/types/animation-atlas.js.map +1 -0
  339. package/lib/types/asset/audio.d.ts +5 -4
  340. package/lib/types/asset/audio.d.ts.map +1 -1
  341. package/lib/types/asset/loaders/audio.d.ts +2 -1
  342. package/lib/types/asset/loaders/audio.d.ts.map +1 -1
  343. package/lib/types/asset/loaders/binary.d.ts +2 -1
  344. package/lib/types/asset/loaders/binary.d.ts.map +1 -1
  345. package/lib/types/asset/loaders/bitmap-font.d.ts +17 -0
  346. package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -0
  347. package/lib/types/asset/loaders/font.d.ts +2 -1
  348. package/lib/types/asset/loaders/font.d.ts.map +1 -1
  349. package/lib/types/asset/loaders/loader.d.ts +6 -6
  350. package/lib/types/asset/loaders/loader.d.ts.map +1 -1
  351. package/lib/types/asset/loaders/spritesheet.d.ts +14 -6
  352. package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
  353. package/lib/types/asset/loaders/text.d.ts +2 -1
  354. package/lib/types/asset/loaders/text.d.ts.map +1 -1
  355. package/lib/types/asset/loaders/texture.d.ts +2 -2
  356. package/lib/types/asset/loaders/texture.d.ts.map +1 -1
  357. package/lib/types/asset/preload.d.ts +7 -5
  358. package/lib/types/asset/preload.d.ts.map +1 -1
  359. package/lib/types/atlas copy.js +2 -0
  360. package/lib/types/atlas copy.js.map +1 -0
  361. package/lib/types/atlas.js +2 -0
  362. package/lib/types/atlas.js.map +1 -0
  363. package/lib/types/bitmap-font.js +2 -0
  364. package/lib/types/bitmap-font.js.map +1 -0
  365. package/lib/types/collision/check-collision.d.ts +4 -0
  366. package/lib/types/collision/check-collision.d.ts.map +1 -0
  367. package/lib/types/collision/check-collision.test.d.ts +2 -0
  368. package/lib/types/collision/check-collision.test.d.ts.map +1 -0
  369. package/lib/types/collision/colliders.d.ts +34 -0
  370. package/lib/types/collision/colliders.d.ts.map +1 -0
  371. package/lib/types/debug.d.ts.map +1 -0
  372. package/lib/types/dom/dom-animated-sprite.d.ts +23 -0
  373. package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -0
  374. package/lib/types/dom/dom-game-object.d.ts +44 -0
  375. package/lib/types/dom/dom-game-object.d.ts.map +1 -0
  376. package/lib/types/dom/dom-particle.d.ts +30 -0
  377. package/lib/types/dom/dom-particle.d.ts.map +1 -0
  378. package/lib/types/dom/dom-preload.d.ts +2 -0
  379. package/lib/types/dom/dom-preload.d.ts.map +1 -0
  380. package/lib/types/dom/dom-sprite.d.ts +13 -0
  381. package/lib/types/dom/dom-sprite.d.ts.map +1 -0
  382. package/lib/types/dom/dom-texture-loader.d.ts +8 -0
  383. package/lib/types/dom/dom-texture-loader.d.ts.map +1 -0
  384. package/lib/types/dom/dom-utils.d.ts +3 -0
  385. package/lib/types/dom/dom-utils.d.ts.map +1 -0
  386. package/lib/types/index copy.d.ts +16 -0
  387. package/lib/types/index copy.d.ts.map +1 -0
  388. package/lib/types/index.d.ts +26 -11
  389. package/lib/types/index.d.ts.map +1 -1
  390. package/lib/types/input/joystick.d.ts +28 -0
  391. package/lib/types/input/joystick.d.ts.map +1 -0
  392. package/lib/types/node/core/dirty-number.d.ts +9 -0
  393. package/lib/types/node/core/dirty-number.d.ts.map +1 -0
  394. package/lib/types/node/core/game-node.d.ts +16 -0
  395. package/lib/types/node/core/game-node.d.ts.map +1 -0
  396. package/lib/types/node/core/game-object.d.ts +8 -0
  397. package/lib/types/node/core/game-object.d.ts.map +1 -0
  398. package/lib/types/node/core/renderable.d.ts +23 -0
  399. package/lib/types/node/core/renderable.d.ts.map +1 -0
  400. package/lib/types/node/core/transform.d.ts +27 -0
  401. package/lib/types/node/core/transform.d.ts.map +1 -0
  402. package/lib/types/node/core/transformable.d.ts +44 -0
  403. package/lib/types/node/core/transformable.d.ts.map +1 -0
  404. package/lib/types/node/ext/animated-sprite.d.ts +22 -0
  405. package/lib/types/node/ext/animated-sprite.d.ts.map +1 -0
  406. package/lib/types/node/ext/bitmap-text.d.ts +14 -0
  407. package/lib/types/node/ext/bitmap-text.d.ts.map +1 -0
  408. package/lib/types/node/ext/circle.d.ts +19 -0
  409. package/lib/types/node/ext/circle.d.ts.map +1 -0
  410. package/lib/types/node/ext/deplay.d.ts +8 -0
  411. package/lib/types/node/ext/deplay.d.ts.map +1 -0
  412. package/lib/types/node/ext/dom-container.d.ts +12 -0
  413. package/lib/types/node/ext/dom-container.d.ts.map +1 -0
  414. package/lib/types/node/ext/interval.d.ts +9 -0
  415. package/lib/types/node/ext/interval.d.ts.map +1 -0
  416. package/lib/types/node/ext/particle.d.ts +30 -0
  417. package/lib/types/node/ext/particle.d.ts.map +1 -0
  418. package/lib/types/node/ext/rectangle.d.ts +22 -0
  419. package/lib/types/node/ext/rectangle.d.ts.map +1 -0
  420. package/lib/types/node/ext/spine.d.ts +36 -0
  421. package/lib/types/node/ext/spine.d.ts.map +1 -0
  422. package/lib/types/node/ext/sprite.d.ts +13 -0
  423. package/lib/types/node/ext/sprite.d.ts.map +1 -0
  424. package/lib/types/node/physics/physics-object.d.ts +38 -0
  425. package/lib/types/node/physics/physics-object.d.ts.map +1 -0
  426. package/lib/types/node/physics/physics-world.d.ts +18 -0
  427. package/lib/types/node/physics/physics-world.d.ts.map +1 -0
  428. package/lib/types/node/physics/rigidbodies.d.ts +23 -0
  429. package/lib/types/node/physics/rigidbodies.d.ts.map +1 -0
  430. package/lib/types/renderer/camera.d.ts +13 -0
  431. package/lib/types/renderer/camera.d.ts.map +1 -0
  432. package/lib/types/renderer/container-manager.d.ts +9 -0
  433. package/lib/types/renderer/container-manager.d.ts.map +1 -0
  434. package/lib/types/renderer/fps-display.d.ts +7 -0
  435. package/lib/types/renderer/fps-display.d.ts.map +1 -0
  436. package/lib/types/renderer/layer.d.ts +7 -0
  437. package/lib/types/renderer/layer.d.ts.map +1 -0
  438. package/lib/types/renderer/renderer.d.ts +40 -0
  439. package/lib/types/renderer/renderer.d.ts.map +1 -0
  440. package/lib/types/renderer/ticker.d.ts +6 -0
  441. package/lib/types/renderer/ticker.d.ts.map +1 -0
  442. package/lib/types/renderer/ticker.test.d.ts +40 -0
  443. package/lib/types/renderer/ticker.test.d.ts.map +1 -0
  444. package/lib/types/sprite-atlas.js +2 -0
  445. package/lib/types/sprite-atlas.js.map +1 -0
  446. package/lib/types/types/animation-atlas.d.ts +14 -0
  447. package/lib/types/types/animation-atlas.d.ts.map +1 -0
  448. package/lib/types/types/atlas copy.d.ts +12 -0
  449. package/lib/types/types/atlas copy.d.ts.map +1 -0
  450. package/lib/types/types/atlas.d.ts +16 -0
  451. package/lib/types/types/atlas.d.ts.map +1 -0
  452. package/lib/types/types/bitmap-font.d.ts +18 -0
  453. package/lib/types/types/bitmap-font.d.ts.map +1 -0
  454. package/lib/types/types/sprite-atlas.d.ts +13 -0
  455. package/lib/types/types/sprite-atlas.d.ts.map +1 -0
  456. package/lib/types/utils/device.d.ts +2 -0
  457. package/lib/types/utils/device.d.ts.map +1 -0
  458. package/lib/utils/device.js +2 -0
  459. package/lib/utils/device.js.map +1 -0
  460. package/package.json +8 -7
  461. package/src/asset/audio.ts +134 -90
  462. package/src/asset/loaders/audio.ts +23 -20
  463. package/src/asset/loaders/binary.ts +20 -16
  464. package/src/asset/loaders/bitmap-font.ts +91 -0
  465. package/src/asset/loaders/font.ts +18 -14
  466. package/src/asset/loaders/loader.ts +27 -23
  467. package/src/asset/loaders/spritesheet.ts +47 -36
  468. package/src/asset/loaders/text.ts +19 -15
  469. package/src/asset/loaders/texture.ts +30 -37
  470. package/src/asset/preload.ts +71 -64
  471. package/src/collision/check-collision.test.ts +349 -0
  472. package/src/collision/check-collision.ts +821 -0
  473. package/src/collision/colliders.ts +19 -0
  474. package/src/debug.ts +5 -0
  475. package/src/dom/dom-animated-sprite.ts +132 -0
  476. package/src/dom/dom-game-object.ts +134 -0
  477. package/src/dom/dom-particle.ts +151 -0
  478. package/src/dom/dom-preload.ts +54 -0
  479. package/src/dom/dom-sprite.ts +50 -0
  480. package/src/dom/dom-texture-loader.ts +44 -0
  481. package/src/dom/dom-utils.ts +19 -0
  482. package/src/index.ts +47 -13
  483. package/src/input/joystick.ts +316 -0
  484. package/src/node/core/dirty-number.ts +21 -0
  485. package/src/node/core/game-node.ts +74 -0
  486. package/src/node/core/game-object.ts +11 -0
  487. package/src/node/core/renderable.ts +72 -0
  488. package/src/node/core/transform.ts +82 -0
  489. package/src/node/core/transformable.ts +111 -0
  490. package/src/node/ext/animated-sprite.ts +103 -0
  491. package/src/node/ext/bitmap-text.ts +113 -0
  492. package/src/node/ext/circle.ts +55 -0
  493. package/src/node/ext/deplay.ts +25 -0
  494. package/src/node/ext/dom-container.ts +62 -0
  495. package/src/node/ext/interval.ts +25 -0
  496. package/src/node/ext/particle.ts +142 -0
  497. package/src/node/ext/rectangle.ts +71 -0
  498. package/src/node/ext/spine.ts +323 -0
  499. package/src/node/ext/sprite.ts +53 -0
  500. package/src/node/physics/physics-object.ts +127 -0
  501. package/src/node/physics/physics-world.ts +41 -0
  502. package/src/node/physics/rigidbodies.ts +14 -0
  503. package/src/renderer/camera.ts +25 -0
  504. package/src/renderer/container-manager.ts +36 -0
  505. package/src/renderer/fps-display.ts +21 -0
  506. package/src/renderer/layer.ts +15 -0
  507. package/src/renderer/renderer.ts +181 -0
  508. package/src/renderer/ticker.test.ts +325 -0
  509. package/src/renderer/ticker.ts +54 -0
  510. package/src/types/atlas.ts +17 -0
  511. package/src/types/bitmap-font.ts +19 -0
  512. package/src/utils/device.ts +1 -0
  513. package/examples/test-dom/index.ts +0 -21
  514. package/lib/game-object/game-object-physics.js +0 -188
  515. package/lib/game-object/game-object-physics.js.map +0 -1
  516. package/lib/game-object/game-object-rendering.js +0 -35
  517. package/lib/game-object/game-object-rendering.js.map +0 -1
  518. package/lib/game-object/game-object.js +0 -162
  519. package/lib/game-object/game-object.js.map +0 -1
  520. package/lib/game-object/transform.js +0 -118
  521. package/lib/game-object/transform.js.map +0 -1
  522. package/lib/game-object-ext/animated-sprite.js +0 -117
  523. package/lib/game-object-ext/animated-sprite.js.map +0 -1
  524. package/lib/game-object-ext/dom-container.js +0 -56
  525. package/lib/game-object-ext/dom-container.js.map +0 -1
  526. package/lib/game-object-ext/rect.js +0 -30
  527. package/lib/game-object-ext/rect.js.map +0 -1
  528. package/lib/game-object-ext/spine.js +0 -206
  529. package/lib/game-object-ext/spine.js.map +0 -1
  530. package/lib/game-object-ext/sprite.js +0 -46
  531. package/lib/game-object-ext/sprite.js.map +0 -1
  532. package/lib/game-object-ext/text.js +0 -68
  533. package/lib/game-object-ext/text.js.map +0 -1
  534. package/lib/game-object-ext/tiling-sprite.js +0 -64
  535. package/lib/game-object-ext/tiling-sprite.js.map +0 -1
  536. package/lib/types/game-object/game-object-physics.d.ts +0 -42
  537. package/lib/types/game-object/game-object-physics.d.ts.map +0 -1
  538. package/lib/types/game-object/game-object-rendering.d.ts +0 -15
  539. package/lib/types/game-object/game-object-rendering.d.ts.map +0 -1
  540. package/lib/types/game-object/game-object.d.ts +0 -81
  541. package/lib/types/game-object/game-object.d.ts.map +0 -1
  542. package/lib/types/game-object/transform.d.ts +0 -43
  543. package/lib/types/game-object/transform.d.ts.map +0 -1
  544. package/lib/types/game-object-ext/animated-sprite.d.ts +0 -29
  545. package/lib/types/game-object-ext/animated-sprite.d.ts.map +0 -1
  546. package/lib/types/game-object-ext/dom-container.d.ts +0 -16
  547. package/lib/types/game-object-ext/dom-container.d.ts.map +0 -1
  548. package/lib/types/game-object-ext/rect.d.ts +0 -17
  549. package/lib/types/game-object-ext/rect.d.ts.map +0 -1
  550. package/lib/types/game-object-ext/spine.d.ts +0 -35
  551. package/lib/types/game-object-ext/spine.d.ts.map +0 -1
  552. package/lib/types/game-object-ext/sprite.d.ts +0 -14
  553. package/lib/types/game-object-ext/sprite.d.ts.map +0 -1
  554. package/lib/types/game-object-ext/text.d.ts +0 -26
  555. package/lib/types/game-object-ext/text.d.ts.map +0 -1
  556. package/lib/types/game-object-ext/tiling-sprite.d.ts +0 -20
  557. package/lib/types/game-object-ext/tiling-sprite.d.ts.map +0 -1
  558. package/lib/types/utils/debug.d.ts.map +0 -1
  559. package/lib/types/utils/go.d.ts +0 -26
  560. package/lib/types/utils/go.d.ts.map +0 -1
  561. package/lib/types/world/world-debug.d.ts +0 -11
  562. package/lib/types/world/world-debug.d.ts.map +0 -1
  563. package/lib/types/world/world-physics.d.ts +0 -16
  564. package/lib/types/world/world-physics.d.ts.map +0 -1
  565. package/lib/types/world/world-rendering.d.ts +0 -28
  566. package/lib/types/world/world-rendering.d.ts.map +0 -1
  567. package/lib/types/world/world.d.ts +0 -38
  568. package/lib/types/world/world.d.ts.map +0 -1
  569. package/lib/utils/debug.js.map +0 -1
  570. package/lib/utils/go.js +0 -33
  571. package/lib/utils/go.js.map +0 -1
  572. package/lib/world/world-debug.js +0 -89
  573. package/lib/world/world-debug.js.map +0 -1
  574. package/lib/world/world-physics.js +0 -45
  575. package/lib/world/world-physics.js.map +0 -1
  576. package/lib/world/world-rendering.js +0 -123
  577. package/lib/world/world-rendering.js.map +0 -1
  578. package/lib/world/world.js +0 -147
  579. package/lib/world/world.js.map +0 -1
  580. package/src/game-object/game-object-physics.ts +0 -191
  581. package/src/game-object/game-object-rendering.ts +0 -27
  582. package/src/game-object/game-object.ts +0 -190
  583. package/src/game-object/transform.ts +0 -164
  584. package/src/game-object-ext/animated-sprite.ts +0 -140
  585. package/src/game-object-ext/dom-container.ts +0 -67
  586. package/src/game-object-ext/rect.ts +0 -40
  587. package/src/game-object-ext/spine.ts +0 -235
  588. package/src/game-object-ext/sprite.ts +0 -55
  589. package/src/game-object-ext/text.ts +0 -83
  590. package/src/game-object-ext/tiling-sprite.ts +0 -73
  591. package/src/utils/debug.ts +0 -5
  592. package/src/utils/go.ts +0 -53
  593. package/src/world/world-debug.ts +0 -114
  594. package/src/world/world-physics.ts +0 -52
  595. package/src/world/world-rendering.ts +0 -145
  596. package/src/world/world.ts +0 -171
  597. /package/examples/{test-dom → auto-battle}/index.html +0 -0
  598. /package/lib/{utils/debug.js → debug.js} +0 -0
  599. /package/lib/types/{utils/debug.d.ts → debug.d.ts} +0 -0
package/README.md CHANGED
@@ -1,8 +1,579 @@
1
1
  # Kiwi Engine
2
- TypeScript 기반 2D 웹 게임 엔진입니다.
3
2
 
4
- ## 키위인가?
5
- 개발자가 키위를 좋아합니다.
3
+ **Kiwi Engine** is a **TypeScript-based 2D web game engine**.
4
+
5
+ * **Center-origin coordinates**: `(0, 0)` is always the **center of the canvas** (not the top-left).
6
+ * **Responsive canvas**: the canvas **matches its parent element’s size** and resizes when the parent changes (e.g., `body` → full-window games).
7
+ * Built for **time-based updates**, mobile/desktop input, and both **Canvas** and **DOM-based** rendering nodes.
8
+
9
+ ---
10
+
11
+ ## Coordinate System
12
+
13
+ Most 2D engines use `(0, 0)` at the top-left. Kiwi flips that: the center of the canvas is `(0, 0)`.
14
+ This makes layout and UI easier on the web’s fluid screens.
15
+
16
+ * Top-left is `(-width/2, -height/2)`, bottom-right is `(width/2, height/2)`.
17
+ * Use `Renderer.screenToWorld(x, y)` to convert browser (screen) coordinates to **world** coordinates.
18
+
19
+ ---
20
+
21
+ ## Canvas Size
22
+
23
+ The canvas always **matches its parent element**. If the parent resizes, the canvas follows.
24
+ If the parent is `document.body` and the body fills the window, the canvas will also fill the window and resize on window changes.
25
+
26
+ ---
27
+
28
+ ## API
29
+
30
+ ### Ticker (Game Loop)
31
+
32
+ `Ticker` is a **`requestAnimationFrame`-based loop manager**. It calls your `onTick(dt)` each frame so you can do **time-based updates**.
33
+
34
+ ```ts
35
+ import { Ticker } from 'kiwiengine'
36
+
37
+ // dt = seconds since the previous tick (≈ 0.0167 at 60 FPS)
38
+ const speed = 120
39
+ const ticker = new Ticker((dt) => {
40
+ player.x += speed * dt
41
+ })
42
+
43
+ // When done, clean up:
44
+ ticker.remove()
45
+ ```
46
+
47
+ #### Constructor
48
+
49
+ ```ts
50
+ new Ticker(onTick: (dt: number) => void)
51
+ ```
52
+
53
+ * `dt` is in **seconds** and is valid even on the first frame.
54
+ * Called **once or more per frame** depending on internal catch-up behavior (see below).
55
+
56
+ #### Fixed Step & FPS Cap (Debug-only)
57
+
58
+ When **`debugMode`** is enabled and the browser tab is **unfocused or inactive**:
59
+
60
+ * The loop is **capped at 6 FPS** to save CPU/GPU.
61
+ * The loop switches to a **fixed step**:
62
+
63
+ * Step size: `1 / fpsCap` (default: `1/6 ≈ 0.1667s`).
64
+ * If accumulated lag exceeds one step, `onTick()` runs once with the **fixed step**.
65
+ * If lag is **≥ 2×** the step, an **extra** `onTick()` runs with the **accumulated dt** to catch up.
66
+ * When the tab regains focus, the cap is lifted and the loop returns to normal rAF.
67
+ * On **`pageshow`** (e.g., returning from bfcache), the cap/lag state is reset and the normal loop resumes.
68
+
69
+ > `fpsCap` is internal; you don’t set it. It only activates in **debug mode** when the page is **not focused**.
70
+
71
+ #### Lifecycle
72
+
73
+ ```ts
74
+ Ticker#remove(): void
75
+ ```
76
+
77
+ * Stops the loop and removes focus/blur/page listeners.
78
+ * `Renderer.remove()` will also remove its internal `Ticker`.
79
+
80
+ #### Tips
81
+
82
+ * **Prefer time-based updates** (multiply by `dt`) for physics/movement/animation:
83
+
84
+ ```ts
85
+ velocity.y += GRAVITY * dt
86
+ position.x += velocity.x * dt
87
+ ```
88
+ * **Avoid double loops**: if your `Renderer` is already driving a frame loop, use its **update hooks** (e.g., `GameObject.update`) instead of starting another `Ticker`.
89
+ * **Always clean up**: call `remove()` on scene changes or unmount to prevent leaks.
90
+
91
+ ---
92
+
93
+ ## Renderer
94
+
95
+ `Renderer` manages **drawing**, **camera**, **layers**, **resizing**, and its **render loop** (internally powered by `Ticker`).
96
+
97
+ ```ts
98
+ import { Renderer } from 'kiwiengine'
99
+
100
+ const renderer = new Renderer(document.body, {
101
+ layers: [
102
+ { name: 'background', drawOrder: 0 },
103
+ { name: 'game', drawOrder: 1 },
104
+ { name: 'ui', drawOrder: 2 },
105
+ ],
106
+ logicalWidth: 1920,
107
+ logicalHeight: 1080,
108
+ backgroundColor: 0x000000,
109
+ })
110
+ ```
111
+
112
+ ### Key Features
113
+
114
+ * **Layer system**: Define named layers with draw order; each `GameObject` chooses its `layer`.
115
+ * **Auto-resize**: Canvas follows parent size; transforms stay center-origin.
116
+ * **Camera**: Pan and zoom via `Renderer.camera`.
117
+ * **FPS display (debug)**: Shown when `debugMode` is on.
118
+ * **Screen → World conversion**: `screenToWorld(x, y)` converts `clientX/Y` into world space.
119
+ * **Loop management**: Uses `Ticker`; in debug mode, inherits the **6 FPS cap** on unfocused tabs.
120
+
121
+ ### Options (`RendererOptions`)
122
+
123
+ ```ts
124
+ type RendererOptions = {
125
+ logicalWidth?: number
126
+ logicalHeight?: number
127
+ backgroundColor?: ColorSource
128
+ backgroundAlpha?: number
129
+ layers?: { name: string; drawOrder: number }[]
130
+ }
131
+ ```
132
+
133
+ * `logicalWidth/Height`: Set a **logical resolution**; the renderer scales proportionally to the screen.
134
+
135
+ ### Methods
136
+
137
+ #### `screenToWorld(x: number, y: number): { x: number, y: number }`
138
+
139
+ ```ts
140
+ const worldPos = renderer.screenToWorld(event.clientX, event.clientY)
141
+ ```
142
+
143
+ #### `remove(): void`
144
+
145
+ Tears down the renderer, its **Ticker**, canvas, FPS overlay, and DOM bindings.
146
+
147
+ ---
148
+
149
+ ## GameObject
150
+
151
+ `GameObject` is the basic renderable node with **position/rotation/scale**, optional **children**, and **layer**.
152
+
153
+ ```ts
154
+ import { GameObject } from 'kiwiengine'
155
+
156
+ const player = new GameObject({
157
+ x: 0,
158
+ y: 0,
159
+ scale: 1,
160
+ rotation: 0,
161
+ layer: 'game',
162
+ useYSort: true, // draw in front if y is larger
163
+ alpha: 1,
164
+ })
165
+
166
+ root.add(player)
167
+ ```
168
+
169
+ ### `GameObjectOptions`
170
+
171
+ * `x`, `y`: local position.
172
+ * `scale`, `scaleX`, `scaleY`: scaling.
173
+ * `pivotX`, `pivotY`: pivot for rotation/scale.
174
+ * `rotation`: radians.
175
+ * `alpha`: 0–1.
176
+ * `layer`: target layer name.
177
+ * `useYSort`: if `true`, container `drawOrder` follows current `y`.
178
+
179
+ ### Children & Control
180
+
181
+ ```ts
182
+ const parent = new GameObject({ x: -100, y: 0, layer: 'game' })
183
+ const child = new GameObject({ x: 50, y: 0 })
184
+
185
+ parent.add(child) // parent transforms propagate
186
+ root.add(parent)
187
+
188
+ // Lifecycle helpers:
189
+ parent.pause()
190
+ parent.resume()
191
+ parent.remove() // removes self and all descendants
192
+ ```
193
+
194
+ ### Y-Sorting Example
195
+
196
+ ```ts
197
+ const a = new GameObject({ y: -50, useYSort: true })
198
+ const b = new GameObject({ y: 30, useYSort: true })
199
+ // If both share the same parent, b renders in front of a.
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Assets
205
+
206
+ ### `preload(assets, progressCallback?) => () => void`
207
+
208
+ Preload textures/audio/fonts/spritesheets. Returns a **release** function to clear the cache.
209
+
210
+ ```ts
211
+ import { preload } from 'kiwiengine'
212
+
213
+ const release = await preload(
214
+ [
215
+ 'assets/player.png',
216
+ { src: 'assets/atlas.png', atlas: atlasJson },
217
+ { fnt: 'myFont', src: 'assets/myFont.fnt' },
218
+ 'assets/bgm.mp3',
219
+ ],
220
+ (p) => console.log(`loading: ${(p * 100) | 0}%`)
221
+ )
222
+
223
+ // later, when no longer needed:
224
+ release()
225
+ ```
226
+
227
+ ### `musicPlayer` (BGM)
228
+
229
+ Simple background-music player. Volume is persisted in `localStorage`.
230
+
231
+ ```ts
232
+ import { musicPlayer } from 'kiwiengine'
233
+
234
+ musicPlayer.volume = 0.5 // 0..1
235
+ musicPlayer.play('bgm.mp3') // reusing same src won’t duplicate
236
+ musicPlayer.pause()
237
+ musicPlayer.stop()
238
+ ```
239
+
240
+ ### `sfxPlayer` (SFX)
241
+
242
+ One-shot, lightweight effect playback. Volume persisted in `localStorage`.
243
+
244
+ ```ts
245
+ import { sfxPlayer } from 'kiwiengine'
246
+
247
+ sfxPlayer.volume = 0.8
248
+ sfxPlayer.play('click.wav')
249
+ sfxPlayer.playRandom('hit1.ogg', 'hit2.ogg', 'hit3.ogg')
250
+ ```
251
+
252
+ ---
253
+
254
+ ## Collision
255
+
256
+ ### Collider Types
257
+
258
+ ```ts
259
+ import {
260
+ ColliderType,
261
+ type RectangleCollider, type CircleCollider,
262
+ type EllipseCollider, type PolygonCollider,
263
+ type Collider
264
+ } from 'kiwiengine'
265
+ ```
266
+
267
+ * `RectangleCollider`: `{ type: Rectangle, width, height, x?, y? }`
268
+ * `CircleCollider`: `{ type: Circle, radius, x?, y? }`
269
+ * `EllipseCollider`: `{ type: Ellipse, width, height, x?, y? }`
270
+ * `PolygonCollider`: `{ type: Polygon, vertices: {x,y}[], x?, y? }`
271
+
272
+ ### `checkCollision(ca, ta, cb, tb): boolean`
273
+
274
+ Generic collision test between rectangles/circles/ellipses/polygons.
275
+ `ta/tb` are the **world transforms** (position/rotation/scale) for each collider.
276
+
277
+ ```ts
278
+ import { checkCollision } from 'kiwiengine'
279
+
280
+ const hit = checkCollision(colA, worldTransformA, colB, worldTransformB)
281
+ ```
282
+
283
+ ---
284
+
285
+ ## Built-in Nodes & Extensions
286
+
287
+ ### `AnimatedSpriteNode`
288
+
289
+ Spritesheet animation.
290
+
291
+ ```ts
292
+ import { AnimatedSpriteNode } from 'kiwiengine'
293
+
294
+ const run = new AnimatedSpriteNode({
295
+ src: 'atlas.png',
296
+ atlas: atlasJson,
297
+ animation: 'run',
298
+ fps: 12,
299
+ loop: true,
300
+ x: 0, y: 0, layer: 'game',
301
+ })
302
+ run.on('animationend', (name) => console.log(name, 'ended'))
303
+ ```
304
+
305
+ ### `BitmapTextNode`
306
+
307
+ Bitmap-font text.
308
+
309
+ ```ts
310
+ import { BitmapTextNode } from 'kiwiengine'
311
+
312
+ const txt = new BitmapTextNode({
313
+ fnt: 'myFont',
314
+ src: 'myFont.fnt',
315
+ text: 'HELLO',
316
+ layer: 'ui',
317
+ })
318
+ txt.changeFont('myFont2', 'myFont2.fnt')
319
+ ```
320
+
321
+ ### `CircleNode` / `RectangleNode`
322
+
323
+ Primitive shapes.
324
+
325
+ ```ts
326
+ new CircleNode({ radius: 40, fill: 0xffffff, layer:'game' })
327
+ new RectangleNode({ width: 200, height: 80, stroke: { color: 0x00ff00, width: 2 } })
328
+ ```
329
+
330
+ ### `SpriteNode`
331
+
332
+ Single-texture sprite.
333
+
334
+ ```ts
335
+ import { SpriteNode } from 'kiwiengine'
336
+ const logo = new SpriteNode({ src: 'logo.png', layer: 'ui' })
337
+ ```
338
+
339
+ ### `SpineNode`
340
+
341
+ [Spine](http://esotericsoftware.com/) animation support with `animationend` event.
342
+
343
+ ```ts
344
+ import { SpineNode } from 'kiwiengine'
345
+
346
+ const spine = new SpineNode({
347
+ atlas: 'spine.atlas',
348
+ texture: { 'page0': 'spine_page0.png' }, // single or multi textures
349
+ json: 'spine.json', // or skel/rawSkeletonData
350
+ skins: ['base', 'hat'],
351
+ animation: 'idle',
352
+ loop: true,
353
+ })
354
+ spine.on('animationend', (a) => console.log(a, 'done'))
355
+ ```
356
+
357
+ ### `ParticleSystem`
358
+
359
+ Simple particle **burst**.
360
+
361
+ ```ts
362
+ import { ParticleSystem } from 'kiwiengine'
363
+
364
+ const ps = new ParticleSystem({
365
+ texture: 'spark.png',
366
+ count: { min: 12, max: 20 },
367
+ lifespan: { min: 0.4, max: 0.8 },
368
+ angle: { min: 0, max: Math.PI * 2 },
369
+ velocity: { min: 200, max: 400 },
370
+ particleScale: { min: 0.5, max: 1.2 },
371
+ startAlpha: 1,
372
+ fadeRate: -1.5,
373
+ orientToVelocity: true,
374
+ })
375
+
376
+ await ps.burst({ x: 0, y: 0 })
377
+ ```
378
+
379
+ ### `DelayNode`
380
+
381
+ Runs a callback after a delay, then removes itself from its parent.
382
+
383
+ ```ts
384
+ import { DelayNode } from 'kiwiengine'
385
+
386
+ const delayNode = new DelayNode(2, () => {
387
+ console.log('2 seconds have passed.')
388
+ })
389
+ parent.add(delayNode)
390
+ ```
391
+
392
+ ### `IntervalNode`
393
+
394
+ Game-loop-based `setInterval`-like callback.
395
+
396
+ ```ts
397
+ import { IntervalNode } from 'kiwiengine'
398
+
399
+ const repeater = new IntervalNode(1, () => console.log('every 1 second'))
400
+ ```
401
+
402
+ ### `DomContainerNode`
403
+
404
+ Attach a DOM element that follows the **game coordinate system** (position, rotation, scale).
405
+
406
+ ```ts
407
+ import { DomContainerNode } from 'kiwiengine'
408
+
409
+ const el = document.createElement('div')
410
+ const dom = new DomContainerNode(el, { x: 0, y: 0, layer: 'ui' })
411
+ ```
412
+
413
+ ---
414
+
415
+ ## Physics
416
+
417
+ ### `PhysicsWorld({ gravity? })`
418
+
419
+ A world that simulates gravity and collisions for **`PhysicsObject`** children.
420
+
421
+ ```ts
422
+ import { PhysicsWorld } from 'kiwiengine'
423
+
424
+ const world = new PhysicsWorld({ gravity: 1000 })
425
+ world.gravity = 800
426
+ ```
427
+
428
+ ### `PhysicsObject(options)`
429
+
430
+ Creates a physics body from a **collider** and keeps its render transform in sync.
431
+
432
+ ```ts
433
+ import { PhysicsObject, RigidbodyType } from 'kiwiengine'
434
+
435
+ const ball = new PhysicsObject({
436
+ rigidbody: { type: RigidbodyType.Circle, radius: 20 },
437
+ x: 0, y: 200, velocityY: -600, useYSort: true,
438
+ })
439
+
440
+ ball.x += 10 // properties stay in sync
441
+ ball.isStatic = false
442
+ ball.disableCollisions() // remove from world (rendering stays)
443
+ ```
444
+
445
+ ---
446
+
447
+ ## DOM Nodes (CSS Rendering)
448
+
449
+ DOM-rendered alternatives for UI/overlays.
450
+
451
+ ### `DomSpriteNode`
452
+
453
+ Render an image with the DOM.
454
+
455
+ ```ts
456
+ import { DomSpriteNode } from 'kiwiengine'
457
+ new DomSpriteNode({ src: 'ui/button.png', layer: 'ui' })
458
+ ```
459
+
460
+ ### `DomAnimatedSpriteNode`
461
+
462
+ Spritesheet animation with DOM.
463
+
464
+ ```ts
465
+ import { DomAnimatedSpriteNode } from 'kiwiengine'
466
+
467
+ const anim = new DomAnimatedSpriteNode({
468
+ src: 'atlas.png', atlas: atlasJson,
469
+ animation: 'blink', fps: 8, loop: true,
470
+ })
471
+ anim.on('animationend', () => {})
472
+ ```
473
+
474
+ ### `DomParticleSystem`
475
+
476
+ CSS-driven lightweight particles (API mirrors `ParticleSystem`).
477
+
478
+ ```ts
479
+ import { DomParticleSystem } from 'kiwiengine'
480
+
481
+ const dps = new DomParticleSystem({ /* similar to ParticleSystem */ })
482
+ await dps.burst({ x: 300, y: 100 })
483
+ ```
484
+
485
+ ### `domPreload(assets, progressCallback?)`
486
+
487
+ Preload **DOM** assets (images/fonts).
488
+
489
+ ```ts
490
+ import { domPreload } from 'kiwiengine'
491
+
492
+ const releaseDom = await domPreload(['ui/button.png', 'Pretendard'])
493
+ releaseDom()
494
+ ```
495
+
496
+ ---
497
+
498
+ ## Input
499
+
500
+ ### `Joystick`
501
+
502
+ Unified **vector input** from mobile touch joystick **and** keyboard arrow keys.
503
+
504
+ ```ts
505
+ import { Joystick } from 'kiwiengine'
506
+
507
+ const joy = new Joystick({
508
+ onMove: (angleRad, strength) => {
509
+ // angle in radians, strength in [0..1]
510
+ },
511
+ onRelease: () => {},
512
+ // Optional touch skin
513
+ joystickImage: document.getElementById('joy') as HTMLDivElement,
514
+ knobImage: document.getElementById('knob') as HTMLDivElement,
515
+ maxKnobDistance: 80,
516
+ moveThreshold: 6,
517
+ })
518
+
519
+ // After layout changes, update idle position:
520
+ joy.setIdlePosition({ left: -999999, top: -999999 })
521
+ ```
522
+
523
+ ---
524
+
525
+ ## Utils
526
+
527
+ ### `isMobile: boolean`
528
+
529
+ Simple UA-based mobile detection.
530
+
531
+ ```ts
532
+ import { isMobile } from 'kiwiengine'
533
+ if (isMobile) {
534
+ // mobile-only logic
535
+ }
536
+ ```
537
+
538
+ ### `setStyle(el, styles)`
539
+
540
+ DOM style helper.
541
+
542
+ ```ts
543
+ import { setStyle } from 'kiwiengine'
544
+ setStyle(div, { opacity: '0.8', pointerEvents: 'none' })
545
+ ```
546
+
547
+ ### `textStroke(target, width, color)`
548
+
549
+ Apply text outline using multiple `text-shadow`s.
550
+
551
+ ```ts
552
+ import { textStroke } from 'kiwiengine'
553
+ textStroke(h1, 2, '#000')
554
+ ```
555
+
556
+ ---
557
+
558
+ ## Debug
559
+
560
+ ### `debugMode` / `enableDebug()`
561
+
562
+ Toggle debug features (e.g., **6 FPS fixed-step cap** in unfocused tabs for both `Ticker` and `Renderer`).
563
+
564
+ ```ts
565
+ import { enableDebug, debugMode } from 'kiwiengine'
566
+
567
+ enableDebug()
568
+ console.log(debugMode) // true
569
+ ```
570
+
571
+ ---
572
+
573
+ ## License
6
574
 
7
- ## 라이센스
8
575
  MIT
576
+
577
+ ## Author
578
+
579
+ Jason