kiwiengine 0.0.1-alpha → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/README.ko.md +550 -0
  2. package/README.md +575 -4
  3. package/examples/collision-test/assets/cat.png +0 -0
  4. package/examples/collision-test/dist/game.js +2 -0
  5. package/examples/collision-test/dist/game.js.LICENSE.txt +35 -0
  6. package/examples/collision-test/index.ts +30 -0
  7. package/examples/dom-particle-test/assets/bird.png +0 -0
  8. package/examples/dom-particle-test/dist/game.js +2 -0
  9. package/examples/dom-particle-test/dist/game.js.LICENSE.txt +35 -0
  10. package/examples/dom-particle-test/index.html +24 -0
  11. package/examples/dom-particle-test/index.ts +27 -0
  12. package/examples/dom-sprite-test/assets/bird.png +0 -0
  13. package/examples/dom-sprite-test/assets/fire.png +0 -0
  14. package/examples/dom-sprite-test/assets/run.png +0 -0
  15. package/examples/dom-sprite-test/dist/game.js +2 -0
  16. package/examples/dom-sprite-test/dist/game.js.LICENSE.txt +35 -0
  17. package/examples/dom-sprite-test/index.html +24 -0
  18. package/examples/dom-sprite-test/index.ts +38 -0
  19. package/examples/dom-test/dist/game.js +2 -0
  20. package/examples/dom-test/dist/game.js.LICENSE.txt +35 -0
  21. package/examples/dom-test/index.html +24 -0
  22. package/examples/dom-test/index.ts +22 -0
  23. package/examples/flappy-cat/assets/bgm/bgm.ogg +0 -0
  24. package/examples/flappy-cat/assets/images/base.png +0 -0
  25. package/examples/flappy-cat/assets/images/bg.png +0 -0
  26. package/examples/flappy-cat/assets/images/cat.png +0 -0
  27. package/examples/flappy-cat/assets/images/pipe-green.png +0 -0
  28. package/examples/flappy-cat/assets/images/pipe-red.png +0 -0
  29. package/examples/flappy-cat/assets/sfx/die.wav +0 -0
  30. package/examples/flappy-cat/assets/sfx/hit.wav +0 -0
  31. package/examples/flappy-cat/assets/sfx/point.wav +0 -0
  32. package/examples/flappy-cat/assets/sfx/wing.wav +0 -0
  33. package/examples/flappy-cat/dist/game.js +0 -0
  34. package/examples/flappy-cat/index.html +24 -0
  35. package/examples/flappy-cat/index.ts +0 -0
  36. package/examples/particle-test/assets/bird.png +0 -0
  37. package/examples/particle-test/dist/game.js +2 -0
  38. package/examples/particle-test/dist/game.js.LICENSE.txt +35 -0
  39. package/examples/particle-test/index.html +24 -0
  40. package/examples/particle-test/index.ts +30 -0
  41. package/examples/renderer-test/dist/game.js +2 -0
  42. package/examples/renderer-test/dist/game.js.LICENSE.txt +35 -0
  43. package/examples/renderer-test/index.html +24 -0
  44. package/examples/renderer-test/index.ts +9 -0
  45. package/examples/simple-battle/assets/bgm/battle.mp3 +0 -0
  46. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  47. package/examples/simple-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  48. package/examples/simple-battle/assets/joystick/joystick.png +0 -0
  49. package/examples/simple-battle/assets/joystick/knob.png +0 -0
  50. package/examples/simple-battle/assets/sfx/hero/die/die.wav +0 -0
  51. package/examples/simple-battle/assets/sfx/hero/heal/heal.wav +0 -0
  52. package/examples/simple-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  53. package/examples/simple-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  54. package/examples/simple-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  55. package/examples/simple-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  56. package/examples/simple-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  57. package/examples/simple-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  58. package/examples/simple-battle/assets/sfx/orc/die/die.wav +0 -0
  59. package/examples/simple-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  60. package/examples/simple-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  61. package/examples/simple-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  62. package/examples/simple-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  63. package/examples/simple-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  64. package/examples/simple-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  65. package/examples/simple-battle/assets/spritesheets/hero-atlas.json +289 -0
  66. package/examples/simple-battle/assets/spritesheets/hero.png +0 -0
  67. package/examples/simple-battle/assets/spritesheets/orc-atlas.json +289 -0
  68. package/examples/simple-battle/assets/spritesheets/orc.png +0 -0
  69. package/examples/simple-battle/assets/spritesheets/potion-atlas.json +83 -0
  70. package/examples/simple-battle/assets/spritesheets/potion.png +0 -0
  71. package/examples/simple-battle/dist/game.js +2 -0
  72. package/examples/simple-battle/dist/game.js.LICENSE.txt +35 -0
  73. package/examples/simple-battle/hud/damage-text.ts +45 -0
  74. package/examples/simple-battle/hud/heal-text.ts +45 -0
  75. package/examples/simple-battle/hud/hp-bar.ts +38 -0
  76. package/examples/simple-battle/index.html +24 -0
  77. package/examples/simple-battle/index.ts +41 -0
  78. package/examples/simple-battle/objects/character.ts +95 -0
  79. package/examples/simple-battle/objects/hero.ts +113 -0
  80. package/examples/simple-battle/objects/orc.ts +109 -0
  81. package/examples/simple-battle/objects/potion.ts +29 -0
  82. package/examples/simple-battle/stage.ts +176 -0
  83. package/examples/spine-test/assets/spine/spineboy.atlas +95 -0
  84. package/examples/spine-test/assets/spine/spineboy.png +0 -0
  85. package/examples/spine-test/assets/spine/spineboy.skel +0 -0
  86. package/examples/spine-test/dist/game.js +2 -0
  87. package/examples/spine-test/dist/game.js.LICENSE.txt +35 -0
  88. package/examples/spine-test/index.html +24 -0
  89. package/examples/spine-test/index.ts +29 -0
  90. package/examples/sprite-test/assets/bird.png +0 -0
  91. package/examples/sprite-test/assets/fire.png +0 -0
  92. package/examples/sprite-test/dist/game.js +2 -0
  93. package/examples/sprite-test/dist/game.js.LICENSE.txt +35 -0
  94. package/examples/sprite-test/index.html +24 -0
  95. package/examples/sprite-test/index.ts +41 -0
  96. package/examples/tsconfig.json +2 -1
  97. package/examples/webpack.config.js +14 -3
  98. package/jest.config.ts +10 -0
  99. package/lib/asset/audio.js +47 -11
  100. package/lib/asset/audio.js.map +1 -1
  101. package/lib/asset/loaders/audio.js +3 -3
  102. package/lib/asset/loaders/audio.js.map +1 -1
  103. package/lib/asset/loaders/binary.js +3 -3
  104. package/lib/asset/loaders/binary.js.map +1 -1
  105. package/lib/asset/loaders/bitmap-font.js +71 -0
  106. package/lib/asset/loaders/bitmap-font.js.map +1 -0
  107. package/lib/asset/loaders/font.js +1 -1
  108. package/lib/asset/loaders/font.js.map +1 -1
  109. package/lib/asset/loaders/loader.js +17 -12
  110. package/lib/asset/loaders/loader.js.map +1 -1
  111. package/lib/asset/loaders/spritesheet.js +6 -7
  112. package/lib/asset/loaders/spritesheet.js.map +1 -1
  113. package/lib/asset/loaders/text.js +3 -3
  114. package/lib/asset/loaders/text.js.map +1 -1
  115. package/lib/asset/loaders/texture.js +5 -4
  116. package/lib/asset/loaders/texture.js.map +1 -1
  117. package/lib/asset/preload.js +60 -56
  118. package/lib/asset/preload.js.map +1 -1
  119. package/lib/collision/check-collision.js +804 -0
  120. package/lib/collision/check-collision.js.map +1 -0
  121. package/lib/collision/check-collision.test.js +300 -0
  122. package/lib/collision/check-collision.test.js.map +1 -0
  123. package/lib/collision/colliders.js +8 -0
  124. package/lib/collision/colliders.js.map +1 -0
  125. package/lib/debug.js.map +1 -0
  126. package/lib/dom/dom-animated-sprite.js +121 -0
  127. package/lib/dom/dom-animated-sprite.js.map +1 -0
  128. package/lib/dom/dom-game-object.js +106 -0
  129. package/lib/dom/dom-game-object.js.map +1 -0
  130. package/lib/dom/dom-particle.js +105 -0
  131. package/lib/dom/dom-particle.js.map +1 -0
  132. package/lib/dom/dom-preload.js +43 -0
  133. package/lib/dom/dom-preload.js.map +1 -0
  134. package/lib/dom/dom-sprite.js +40 -0
  135. package/lib/dom/dom-sprite.js.map +1 -0
  136. package/lib/dom/dom-texture-loader.js +36 -0
  137. package/lib/dom/dom-texture-loader.js.map +1 -0
  138. package/lib/dom/dom-utils.js +20 -0
  139. package/lib/dom/dom-utils.js.map +1 -0
  140. package/lib/index copy.js +16 -0
  141. package/lib/index copy.js.map +1 -0
  142. package/lib/index.js +35 -10
  143. package/lib/index.js.map +1 -1
  144. package/lib/input/joystick.js +262 -0
  145. package/lib/input/joystick.js.map +1 -0
  146. package/lib/node/core/dirty-number.js +38 -0
  147. package/lib/node/core/dirty-number.js.map +1 -0
  148. package/lib/node/core/game-node.js +63 -0
  149. package/lib/node/core/game-node.js.map +1 -0
  150. package/lib/node/core/game-object.js +8 -0
  151. package/lib/node/core/game-object.js.map +1 -0
  152. package/lib/node/core/renderable.js +52 -0
  153. package/lib/node/core/renderable.js.map +1 -0
  154. package/lib/node/core/transform.js +59 -0
  155. package/lib/node/core/transform.js.map +1 -0
  156. package/lib/node/core/transformable.js +85 -0
  157. package/lib/node/core/transformable.js.map +1 -0
  158. package/lib/node/ext/animated-sprite.js +96 -0
  159. package/lib/node/ext/animated-sprite.js.map +1 -0
  160. package/lib/node/ext/bitmap-text.js +89 -0
  161. package/lib/node/ext/bitmap-text.js.map +1 -0
  162. package/lib/node/ext/circle.js +28 -0
  163. package/lib/node/ext/circle.js.map +1 -0
  164. package/lib/node/ext/deplay.js +20 -0
  165. package/lib/node/ext/deplay.js.map +1 -0
  166. package/lib/node/ext/dom-container.js +51 -0
  167. package/lib/node/ext/dom-container.js.map +1 -0
  168. package/lib/node/ext/interval.js +20 -0
  169. package/lib/node/ext/interval.js.map +1 -0
  170. package/lib/node/ext/particle.js +98 -0
  171. package/lib/node/ext/particle.js.map +1 -0
  172. package/lib/node/ext/rectangle.js +32 -0
  173. package/lib/node/ext/rectangle.js.map +1 -0
  174. package/lib/node/ext/spine.js +272 -0
  175. package/lib/node/ext/spine.js.map +1 -0
  176. package/lib/node/ext/sprite.js +42 -0
  177. package/lib/node/ext/sprite.js.map +1 -0
  178. package/lib/node/physics/physics-object.js +112 -0
  179. package/lib/node/physics/physics-object.js.map +1 -0
  180. package/lib/node/physics/physics-world.js +27 -0
  181. package/lib/node/physics/physics-world.js.map +1 -0
  182. package/lib/renderer/camera.js +19 -0
  183. package/lib/renderer/camera.js.map +1 -0
  184. package/lib/renderer/container-manager.js +29 -0
  185. package/lib/renderer/container-manager.js.map +1 -0
  186. package/lib/renderer/fps-display.js +18 -0
  187. package/lib/renderer/fps-display.js.map +1 -0
  188. package/lib/renderer/layer.js +12 -0
  189. package/lib/renderer/layer.js.map +1 -0
  190. package/lib/renderer/renderer.js +145 -0
  191. package/lib/renderer/renderer.js.map +1 -0
  192. package/lib/renderer/ticker.js +56 -0
  193. package/lib/renderer/ticker.js.map +1 -0
  194. package/lib/renderer/ticker.test.js +241 -0
  195. package/lib/renderer/ticker.test.js.map +1 -0
  196. package/lib/types/asset/audio.d.ts +5 -4
  197. package/lib/types/asset/audio.d.ts.map +1 -1
  198. package/lib/types/asset/loaders/audio.d.ts +1 -1
  199. package/lib/types/asset/loaders/audio.d.ts.map +1 -1
  200. package/lib/types/asset/loaders/binary.d.ts +1 -1
  201. package/lib/types/asset/loaders/binary.d.ts.map +1 -1
  202. package/lib/types/asset/loaders/bitmap-font.d.ts +16 -0
  203. package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -0
  204. package/lib/types/asset/loaders/font.d.ts +1 -1
  205. package/lib/types/asset/loaders/font.d.ts.map +1 -1
  206. package/lib/types/asset/loaders/loader.d.ts +6 -6
  207. package/lib/types/asset/loaders/loader.d.ts.map +1 -1
  208. package/lib/types/asset/loaders/spritesheet.d.ts +5 -5
  209. package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
  210. package/lib/types/asset/loaders/text.d.ts +1 -1
  211. package/lib/types/asset/loaders/text.d.ts.map +1 -1
  212. package/lib/types/asset/loaders/texture.d.ts +2 -2
  213. package/lib/types/asset/loaders/texture.d.ts.map +1 -1
  214. package/lib/types/asset/preload.d.ts +5 -3
  215. package/lib/types/asset/preload.d.ts.map +1 -1
  216. package/lib/types/bitmap-font.js +2 -0
  217. package/lib/types/bitmap-font.js.map +1 -0
  218. package/lib/types/collision/check-collision.d.ts +4 -0
  219. package/lib/types/collision/check-collision.d.ts.map +1 -0
  220. package/lib/types/collision/check-collision.test.d.ts +2 -0
  221. package/lib/types/collision/check-collision.test.d.ts.map +1 -0
  222. package/lib/types/collision/colliders.d.ts +34 -0
  223. package/lib/types/collision/colliders.d.ts.map +1 -0
  224. package/lib/types/debug.d.ts.map +1 -0
  225. package/lib/types/dom/dom-animated-sprite.d.ts +29 -0
  226. package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -0
  227. package/lib/types/dom/dom-game-object.d.ts +44 -0
  228. package/lib/types/dom/dom-game-object.d.ts.map +1 -0
  229. package/lib/types/dom/dom-particle.d.ts +30 -0
  230. package/lib/types/dom/dom-particle.d.ts.map +1 -0
  231. package/lib/types/dom/dom-preload.d.ts +2 -0
  232. package/lib/types/dom/dom-preload.d.ts.map +1 -0
  233. package/lib/types/dom/dom-sprite.d.ts +13 -0
  234. package/lib/types/dom/dom-sprite.d.ts.map +1 -0
  235. package/lib/types/dom/dom-texture-loader.d.ts +8 -0
  236. package/lib/types/dom/dom-texture-loader.d.ts.map +1 -0
  237. package/lib/types/dom/dom-utils.d.ts +3 -0
  238. package/lib/types/dom/dom-utils.d.ts.map +1 -0
  239. package/lib/types/index copy.d.ts +16 -0
  240. package/lib/types/index copy.d.ts.map +1 -0
  241. package/lib/types/index.d.ts +25 -11
  242. package/lib/types/index.d.ts.map +1 -1
  243. package/lib/types/input/joystick.d.ts +28 -0
  244. package/lib/types/input/joystick.d.ts.map +1 -0
  245. package/lib/types/node/core/dirty-number.d.ts +17 -0
  246. package/lib/types/node/core/dirty-number.d.ts.map +1 -0
  247. package/lib/types/node/core/game-node.d.ts +16 -0
  248. package/lib/types/node/core/game-node.d.ts.map +1 -0
  249. package/lib/types/node/core/game-object.d.ts +8 -0
  250. package/lib/types/node/core/game-object.d.ts.map +1 -0
  251. package/lib/types/node/core/renderable.d.ts +22 -0
  252. package/lib/types/node/core/renderable.d.ts.map +1 -0
  253. package/lib/types/node/core/transform.d.ts +25 -0
  254. package/lib/types/node/core/transform.d.ts.map +1 -0
  255. package/lib/types/node/core/transformable.d.ts +44 -0
  256. package/lib/types/node/core/transformable.d.ts.map +1 -0
  257. package/lib/types/node/ext/animated-sprite.d.ts +28 -0
  258. package/lib/types/node/ext/animated-sprite.d.ts.map +1 -0
  259. package/lib/types/node/ext/bitmap-text.d.ts +14 -0
  260. package/lib/types/node/ext/bitmap-text.d.ts.map +1 -0
  261. package/lib/types/node/ext/circle.d.ts +19 -0
  262. package/lib/types/node/ext/circle.d.ts.map +1 -0
  263. package/lib/types/node/ext/deplay.d.ts +8 -0
  264. package/lib/types/node/ext/deplay.d.ts.map +1 -0
  265. package/lib/types/node/ext/dom-container.d.ts +12 -0
  266. package/lib/types/node/ext/dom-container.d.ts.map +1 -0
  267. package/lib/types/node/ext/interval.d.ts +9 -0
  268. package/lib/types/node/ext/interval.d.ts.map +1 -0
  269. package/lib/types/node/ext/particle.d.ts +30 -0
  270. package/lib/types/node/ext/particle.d.ts.map +1 -0
  271. package/lib/types/node/ext/rectangle.d.ts +22 -0
  272. package/lib/types/node/ext/rectangle.d.ts.map +1 -0
  273. package/lib/types/node/ext/spine.d.ts +36 -0
  274. package/lib/types/node/ext/spine.d.ts.map +1 -0
  275. package/lib/types/node/ext/sprite.d.ts +13 -0
  276. package/lib/types/node/ext/sprite.d.ts.map +1 -0
  277. package/lib/types/node/physics/physics-object.d.ts +38 -0
  278. package/lib/types/node/physics/physics-object.d.ts.map +1 -0
  279. package/lib/types/node/physics/physics-world.d.ts +18 -0
  280. package/lib/types/node/physics/physics-world.d.ts.map +1 -0
  281. package/lib/types/renderer/camera.d.ts +13 -0
  282. package/lib/types/renderer/camera.d.ts.map +1 -0
  283. package/lib/types/renderer/container-manager.d.ts +9 -0
  284. package/lib/types/renderer/container-manager.d.ts.map +1 -0
  285. package/lib/types/renderer/fps-display.d.ts +7 -0
  286. package/lib/types/renderer/fps-display.d.ts.map +1 -0
  287. package/lib/types/renderer/layer.d.ts +7 -0
  288. package/lib/types/renderer/layer.d.ts.map +1 -0
  289. package/lib/types/renderer/renderer.d.ts +40 -0
  290. package/lib/types/renderer/renderer.d.ts.map +1 -0
  291. package/lib/types/renderer/ticker.d.ts +6 -0
  292. package/lib/types/renderer/ticker.d.ts.map +1 -0
  293. package/lib/types/renderer/ticker.test.d.ts +40 -0
  294. package/lib/types/renderer/ticker.test.d.ts.map +1 -0
  295. package/lib/types/types/bitmap-font.d.ts +18 -0
  296. package/lib/types/types/bitmap-font.d.ts.map +1 -0
  297. package/lib/types/utils/device.d.ts +2 -0
  298. package/lib/types/utils/device.d.ts.map +1 -0
  299. package/lib/utils/device.js +2 -0
  300. package/lib/utils/device.js.map +1 -0
  301. package/package.json +8 -7
  302. package/src/asset/audio.ts +134 -90
  303. package/src/asset/loaders/audio.ts +19 -19
  304. package/src/asset/loaders/binary.ts +16 -16
  305. package/src/asset/loaders/bitmap-font.ts +85 -0
  306. package/src/asset/loaders/font.ts +14 -14
  307. package/src/asset/loaders/loader.ts +27 -23
  308. package/src/asset/loaders/spritesheet.ts +34 -36
  309. package/src/asset/loaders/text.ts +15 -15
  310. package/src/asset/loaders/texture.ts +29 -28
  311. package/src/asset/preload.ts +75 -64
  312. package/src/collision/check-collision.test.ts +349 -0
  313. package/src/collision/check-collision.ts +821 -0
  314. package/src/collision/colliders.ts +19 -0
  315. package/src/debug.ts +5 -0
  316. package/src/dom/dom-animated-sprite.ts +153 -0
  317. package/src/dom/dom-game-object.ts +131 -0
  318. package/src/dom/dom-particle.ts +151 -0
  319. package/src/dom/dom-preload.ts +54 -0
  320. package/src/dom/dom-sprite.ts +50 -0
  321. package/src/dom/dom-texture-loader.ts +44 -0
  322. package/src/dom/dom-utils.ts +19 -0
  323. package/src/index.ts +46 -13
  324. package/src/input/joystick.ts +316 -0
  325. package/src/node/core/dirty-number.ts +45 -0
  326. package/src/node/core/game-node.ts +74 -0
  327. package/src/node/core/game-object.ts +11 -0
  328. package/src/node/core/renderable.ts +65 -0
  329. package/src/node/core/transform.ts +70 -0
  330. package/src/node/core/transformable.ts +111 -0
  331. package/src/node/ext/animated-sprite.ts +123 -0
  332. package/src/node/ext/bitmap-text.ts +109 -0
  333. package/src/node/ext/circle.ts +40 -0
  334. package/src/node/ext/deplay.ts +24 -0
  335. package/src/node/ext/dom-container.ts +62 -0
  336. package/src/node/ext/interval.ts +24 -0
  337. package/src/node/ext/particle.ts +142 -0
  338. package/src/node/ext/rectangle.ts +51 -0
  339. package/src/node/ext/spine.ts +323 -0
  340. package/src/node/ext/sprite.ts +53 -0
  341. package/src/node/physics/physics-object.ts +156 -0
  342. package/src/node/physics/physics-world.ts +40 -0
  343. package/src/renderer/camera.ts +25 -0
  344. package/src/renderer/container-manager.ts +36 -0
  345. package/src/renderer/fps-display.ts +21 -0
  346. package/src/renderer/layer.ts +15 -0
  347. package/src/renderer/renderer.ts +180 -0
  348. package/src/renderer/ticker.test.ts +325 -0
  349. package/src/renderer/ticker.ts +54 -0
  350. package/src/types/bitmap-font.ts +19 -0
  351. package/src/utils/device.ts +1 -0
  352. package/examples/test-dom/index.ts +0 -21
  353. package/lib/game-object/game-object-physics.js +0 -188
  354. package/lib/game-object/game-object-physics.js.map +0 -1
  355. package/lib/game-object/game-object-rendering.js +0 -35
  356. package/lib/game-object/game-object-rendering.js.map +0 -1
  357. package/lib/game-object/game-object.js +0 -162
  358. package/lib/game-object/game-object.js.map +0 -1
  359. package/lib/game-object/transform.js +0 -118
  360. package/lib/game-object/transform.js.map +0 -1
  361. package/lib/game-object-ext/animated-sprite.js +0 -117
  362. package/lib/game-object-ext/animated-sprite.js.map +0 -1
  363. package/lib/game-object-ext/dom-container.js +0 -56
  364. package/lib/game-object-ext/dom-container.js.map +0 -1
  365. package/lib/game-object-ext/rect.js +0 -30
  366. package/lib/game-object-ext/rect.js.map +0 -1
  367. package/lib/game-object-ext/spine.js +0 -206
  368. package/lib/game-object-ext/spine.js.map +0 -1
  369. package/lib/game-object-ext/sprite.js +0 -46
  370. package/lib/game-object-ext/sprite.js.map +0 -1
  371. package/lib/game-object-ext/text.js +0 -68
  372. package/lib/game-object-ext/text.js.map +0 -1
  373. package/lib/game-object-ext/tiling-sprite.js +0 -64
  374. package/lib/game-object-ext/tiling-sprite.js.map +0 -1
  375. package/lib/types/game-object/game-object-physics.d.ts +0 -42
  376. package/lib/types/game-object/game-object-physics.d.ts.map +0 -1
  377. package/lib/types/game-object/game-object-rendering.d.ts +0 -15
  378. package/lib/types/game-object/game-object-rendering.d.ts.map +0 -1
  379. package/lib/types/game-object/game-object.d.ts +0 -81
  380. package/lib/types/game-object/game-object.d.ts.map +0 -1
  381. package/lib/types/game-object/transform.d.ts +0 -43
  382. package/lib/types/game-object/transform.d.ts.map +0 -1
  383. package/lib/types/game-object-ext/animated-sprite.d.ts +0 -29
  384. package/lib/types/game-object-ext/animated-sprite.d.ts.map +0 -1
  385. package/lib/types/game-object-ext/dom-container.d.ts +0 -16
  386. package/lib/types/game-object-ext/dom-container.d.ts.map +0 -1
  387. package/lib/types/game-object-ext/rect.d.ts +0 -17
  388. package/lib/types/game-object-ext/rect.d.ts.map +0 -1
  389. package/lib/types/game-object-ext/spine.d.ts +0 -35
  390. package/lib/types/game-object-ext/spine.d.ts.map +0 -1
  391. package/lib/types/game-object-ext/sprite.d.ts +0 -14
  392. package/lib/types/game-object-ext/sprite.d.ts.map +0 -1
  393. package/lib/types/game-object-ext/text.d.ts +0 -26
  394. package/lib/types/game-object-ext/text.d.ts.map +0 -1
  395. package/lib/types/game-object-ext/tiling-sprite.d.ts +0 -20
  396. package/lib/types/game-object-ext/tiling-sprite.d.ts.map +0 -1
  397. package/lib/types/utils/debug.d.ts.map +0 -1
  398. package/lib/types/utils/go.d.ts +0 -26
  399. package/lib/types/utils/go.d.ts.map +0 -1
  400. package/lib/types/world/world-debug.d.ts +0 -11
  401. package/lib/types/world/world-debug.d.ts.map +0 -1
  402. package/lib/types/world/world-physics.d.ts +0 -16
  403. package/lib/types/world/world-physics.d.ts.map +0 -1
  404. package/lib/types/world/world-rendering.d.ts +0 -28
  405. package/lib/types/world/world-rendering.d.ts.map +0 -1
  406. package/lib/types/world/world.d.ts +0 -38
  407. package/lib/types/world/world.d.ts.map +0 -1
  408. package/lib/utils/debug.js.map +0 -1
  409. package/lib/utils/go.js +0 -33
  410. package/lib/utils/go.js.map +0 -1
  411. package/lib/world/world-debug.js +0 -89
  412. package/lib/world/world-debug.js.map +0 -1
  413. package/lib/world/world-physics.js +0 -45
  414. package/lib/world/world-physics.js.map +0 -1
  415. package/lib/world/world-rendering.js +0 -123
  416. package/lib/world/world-rendering.js.map +0 -1
  417. package/lib/world/world.js +0 -147
  418. package/lib/world/world.js.map +0 -1
  419. package/src/game-object/game-object-physics.ts +0 -191
  420. package/src/game-object/game-object-rendering.ts +0 -27
  421. package/src/game-object/game-object.ts +0 -190
  422. package/src/game-object/transform.ts +0 -164
  423. package/src/game-object-ext/animated-sprite.ts +0 -140
  424. package/src/game-object-ext/dom-container.ts +0 -67
  425. package/src/game-object-ext/rect.ts +0 -40
  426. package/src/game-object-ext/spine.ts +0 -235
  427. package/src/game-object-ext/sprite.ts +0 -55
  428. package/src/game-object-ext/text.ts +0 -83
  429. package/src/game-object-ext/tiling-sprite.ts +0 -73
  430. package/src/utils/debug.ts +0 -5
  431. package/src/utils/go.ts +0 -53
  432. package/src/world/world-debug.ts +0 -114
  433. package/src/world/world-physics.ts +0 -52
  434. package/src/world/world-rendering.ts +0 -145
  435. package/src/world/world.ts +0 -171
  436. /package/examples/{test-dom → collision-test}/index.html +0 -0
  437. /package/lib/{utils/debug.js → debug.js} +0 -0
  438. /package/lib/types/{utils/debug.d.ts → debug.d.ts} +0 -0
@@ -1,67 +0,0 @@
1
- import { EventMap } from '@webtaku/event-emitter';
2
- import { GameObject, GameObjectOptions } from "../game-object/game-object";
3
- import { World } from '../world/world';
4
-
5
- type DomContainerObjectOptions = {
6
- el?: HTMLElement;
7
- } & GameObjectOptions;
8
-
9
- export class DomContainerObject<E extends EventMap = EventMap> extends GameObject<E> {
10
- #el?: HTMLElement;
11
-
12
- constructor(opts?: DomContainerObjectOptions) {
13
- super(opts);
14
- if (opts) {
15
- if (opts.el) this.el = opts.el;
16
- }
17
- }
18
-
19
- protected _setWorld(world: World): void {
20
- super._setWorld(world);
21
- if (this.#el) world.container.appendChild(this.#el);
22
- }
23
-
24
- get el() {
25
- return this.#el;
26
- }
27
-
28
- set el(el: HTMLElement | undefined) {
29
- this.#el = el;
30
- if (el) {
31
- el.style.position = 'absolute';
32
- el.style.left = '0';
33
- el.style.top = '0';
34
- el.style.zIndex = '1';
35
-
36
- const world = this._getWorld();
37
- if (world) world.container.appendChild(el);
38
- }
39
- }
40
-
41
- _afterRender() {
42
- const world = this._getWorld();
43
- if (world && this.#el) {
44
- if (
45
- world._containerSizeDirty ||
46
- this._wt.x.dirty ||
47
- this._wt.y.dirty ||
48
- this._wt.scaleX.dirty ||
49
- this._wt.scaleY.dirty ||
50
- this._wt.rotation.dirty
51
- ) {
52
- const R = world._worldRendering;
53
- const S = R.renderScale;
54
-
55
- this.#el.style.transform = `
56
- translate(
57
- calc(-50% + ${this._wt.x.v * S + R.canvasLeft + R.centerX * S}px),
58
- calc(-50% + ${this._wt.y.v * S + R.canvasTop + R.centerY * S}px)
59
- )
60
- scale(${this._wt.scaleX.v * S}, ${this._wt.scaleY.v * S})
61
- rotate(${this._wt.rotation.v}rad)
62
- `;
63
- }
64
- if (this._wt.alpha.dirty) this.#el.style.opacity = this._wt.alpha.v.toString();
65
- }
66
- }
67
- }
@@ -1,40 +0,0 @@
1
- import { EventMap } from '@webtaku/event-emitter';
2
- import { FillInput, Graphics, StrokeInput } from 'pixi.js';
3
- import { GameObject } from '../game-object/game-object';
4
-
5
- class RectangleObject<E extends EventMap = EventMap> extends GameObject<E> {
6
- #graphics = new Graphics({ zIndex: -999999 });
7
- #width: number = 0;
8
- #height: number = 0;
9
- #fill?: FillInput;
10
- #stroke?: StrokeInput;
11
-
12
- constructor() {
13
- super();
14
- this._addPixiChild(this.#graphics);
15
- }
16
-
17
- #draw() {
18
- this.#graphics.clear().rect(
19
- -this.#width / 2,
20
- -this.#height / 2,
21
- this.#width,
22
- this.#height,
23
- );
24
- if (this.#fill) this.#graphics.fill(this.#fill);
25
- if (this.#stroke) this.#graphics.stroke(this.#stroke);
26
- }
27
-
28
- get width(): number { return this.#width; }
29
- set width(value: number) { this.#width = value; this.#draw(); }
30
- get height(): number { return this.#height; }
31
- set height(value: number) { this.#height = value; this.#draw(); }
32
-
33
- get fill(): FillInput | undefined { return this.#fill; }
34
- set fill(value: FillInput | undefined) { this.#fill = value; this.#draw(); }
35
-
36
- get stroke(): StrokeInput | undefined { return this.#stroke; }
37
- set stroke(value: StrokeInput | undefined) { this.#stroke = value; this.#draw(); }
38
- }
39
-
40
- export { RectangleObject };
@@ -1,235 +0,0 @@
1
- import { AtlasAttachmentLoader, SkeletonBinary, SkeletonData, SkeletonJson, Skin, Spine, SpineTexture, TextureAtlas } from '@esotericsoftware/spine-pixi-v8';
2
- import { EventMap } from '@webtaku/event-emitter';
3
- import { Texture } from 'pixi.js';
4
- import { binaryLoader } from '../asset/loaders/binary';
5
- import { textLoader } from '../asset/loaders/text';
6
- import { textureLoader } from '../asset/loaders/texture';
7
- import { GameObject, GameObjectOptions } from '../game-object/game-object';
8
-
9
- type SpineOptions = {
10
- atlas?: string;
11
- skeletonData?: any;
12
- skel?: string;
13
- json?: string;
14
- texture?: string | Record<string, string>;
15
- skins?: string[];
16
- animation?: string;
17
- loop?: boolean;
18
- } & GameObjectOptions;
19
-
20
- class SpineObject<E extends EventMap = EventMap> extends GameObject<E> {
21
- #spine?: Spine;
22
-
23
- #atlas?: string;
24
- #skeletonData?: any;
25
- #skel?: string;
26
- #json?: string;
27
- #texture?: string | Record<string, string>;
28
- #skins?: string[];
29
- #animation?: string;
30
- #loop?: boolean;
31
-
32
- constructor(opts?: SpineOptions) {
33
- super(opts);
34
- if (opts) {
35
- if (opts.atlas) this.atlas = opts.atlas;
36
- if (opts.skeletonData) this.skeletonData = opts.skeletonData;
37
- if (opts.skel) this.skel = opts.skel;
38
- if (opts.json) this.json = opts.json;
39
- if (opts.texture) this.texture = opts.texture;
40
- if (opts.skins) this.skins = opts.skins;
41
- if (opts.animation) this.animation = opts.animation;
42
- if (opts.loop) this.loop = opts.loop;
43
- }
44
- }
45
-
46
- async #load() {
47
- if (this.#atlas && (
48
- this.#skeletonData ||
49
- this.#skel ||
50
- this.#json
51
- )) {
52
- const promises: Promise<any>[] = [];
53
-
54
- let textAtlasData: string | undefined;
55
- let skeletonBynary: Uint8Array | undefined;
56
- let textSkeletonData: string | undefined;
57
-
58
- let texture: Texture | undefined;
59
- let textures: Record<string, Texture> | undefined;
60
-
61
- if (!textLoader.checkLoaded(this.#atlas)) console.info(`Atlas not preloaded. Loading now: ${this.#atlas}`);
62
- promises.push((async () => textAtlasData = await textLoader.load(this.#atlas!))());
63
-
64
- if (this.#skeletonData) {
65
- // Skeleton data is already loaded, no need to load again
66
- } else if (this.#skel) {
67
- if (!binaryLoader.checkLoaded(this.#skel)) console.info(`Skeleton not preloaded. Loading now: ${this.#skel}`);
68
- promises.push((async () => skeletonBynary = await binaryLoader.load(this.#skel!))());
69
- } else if (this.#json) {
70
- if (!textLoader.checkLoaded(this.#json)) console.info(`Skeleton not preloaded. Loading now: ${this.#json}`);
71
- promises.push((async () => textSkeletonData = await textLoader.load(this.#json!))());
72
- } else {
73
- console.error('Either skel or json must be provided');
74
- return;
75
- }
76
-
77
- if (typeof this.#texture === 'string') {
78
- if (!textureLoader.checkLoaded(this.#texture)) console.info(`Texture not preloaded. Loading now: ${this.#texture}`);
79
- promises.push((async () => texture = await textureLoader.load(this.#texture as string))());
80
- } else if (this.#texture) {
81
- textures = {};
82
- for (const [key, path] of Object.entries(this.#texture)) {
83
- if (!textureLoader.checkLoaded(path)) console.info(`Texture not preloaded. Loading now: ${path}`);
84
- promises.push((async () => {
85
- const texture = await textureLoader.load(path);
86
- if (texture) textures[key] = texture;
87
- })());
88
- }
89
- }
90
-
91
- await Promise.all(promises);
92
-
93
- if (texture || textures) {
94
- const atlas = new TextureAtlas(textAtlasData!);
95
- atlas.pages.forEach((page) => {
96
- if (texture) page.setTexture(SpineTexture.from(texture.source));
97
- else if (textures) {
98
- page.setTexture(SpineTexture.from(textures[page.name].source));
99
- }
100
- });
101
-
102
- const atlasLoader = new AtlasAttachmentLoader(atlas);
103
-
104
- let skeletonData: SkeletonData;
105
- if (this.#skeletonData) {
106
- const jsonLoader = new SkeletonJson(atlasLoader);
107
- skeletonData = jsonLoader.readSkeletonData(this.#skeletonData);
108
- } else if (skeletonBynary) {
109
- const binaryLoader = new SkeletonBinary(atlasLoader);
110
- skeletonData = binaryLoader.readSkeletonData(skeletonBynary);
111
- } else if (textSkeletonData) {
112
- const jsonLoader = new SkeletonJson(atlasLoader);
113
- skeletonData = jsonLoader.readSkeletonData(textSkeletonData);
114
- } else {
115
- console.error('Either skel or json must be provided');
116
- return;
117
- }
118
-
119
- this.#spine = new Spine(skeletonData);
120
- this.#applyAnimation();
121
- this.#applySkins();
122
-
123
- this._addPixiChild(this.#spine);
124
- }
125
- }
126
- }
127
-
128
- #applyAnimation() {
129
- if (this.#spine && this.#animation) {
130
- this.#spine.state.setAnimation(
131
- 0,
132
- this.#animation,
133
- this.#loop ?? true,
134
- );
135
- this.#spine.state.apply(this.#spine.skeleton);
136
- }
137
- }
138
-
139
- #applySkins() {
140
- if (this.#spine && this.#skins) {
141
- const newSkin = new Skin('combined-skin');
142
- for (const skinName of this.#skins) {
143
- const skin = this.#spine.skeleton.data.findSkin(skinName);
144
- if (skin) newSkin.addSkin(skin);
145
- }
146
- this.#spine.skeleton.setSkin(newSkin);
147
- this.#spine.skeleton.setSlotsToSetupPose();
148
- }
149
- }
150
-
151
- get atlas() {
152
- return this.#atlas;
153
- }
154
-
155
- set atlas(atlas: string | undefined) {
156
- this.#atlas = atlas;
157
- this.#load();
158
- }
159
-
160
- get skeletonData() {
161
- return this.#skeletonData;
162
- }
163
-
164
- set skeletonData(skeletonData: any | undefined) {
165
- this.#skeletonData = skeletonData;
166
- this.#load();
167
- }
168
-
169
- get skel() {
170
- return this.#skel;
171
- }
172
-
173
- set skel(skel: string | undefined) {
174
- this.#skel = skel;
175
- this.#load();
176
- }
177
-
178
- get json() {
179
- return this.#json;
180
- }
181
-
182
- set json(json: string | undefined) {
183
- this.#json = json;
184
- this.#load();
185
- }
186
-
187
- get texture() {
188
- return this.#texture;
189
- }
190
-
191
- set texture(texture: string | Record<string, string> | undefined) {
192
- this.#texture = texture;
193
- this.#load();
194
- }
195
-
196
- get skins() {
197
- return this.#skins;
198
- }
199
-
200
- set skins(skins: string[] | undefined) {
201
- this.#skins = skins;
202
- this.#applySkins();
203
- }
204
-
205
- get animation() {
206
- return this.#animation;
207
- }
208
-
209
- set animation(animation: string | undefined) {
210
- this.#animation = animation;
211
- this.#applyAnimation();
212
- }
213
-
214
- get loop() {
215
- return this.#loop;
216
- }
217
-
218
- set loop(loop: boolean | undefined) {
219
- this.#loop = loop;
220
- this.#applyAnimation();
221
- }
222
-
223
- remove() {
224
- if (typeof this.#texture === 'string') {
225
- textureLoader.release(this.#texture);
226
- } else if (this.#texture) {
227
- for (const path of Object.values(this.#texture)) {
228
- textureLoader.release(path);
229
- }
230
- }
231
- super.remove();
232
- }
233
- }
234
-
235
- export { SpineObject };
@@ -1,55 +0,0 @@
1
- import { EventMap } from '@webtaku/event-emitter';
2
- import { Sprite } from 'pixi.js';
3
- import { textureLoader } from '../asset/loaders/texture';
4
- import { GameObject, GameObjectOptions } from '../game-object/game-object';
5
-
6
- type SpriteOptions = {
7
- src?: string;
8
- } & GameObjectOptions;
9
-
10
- class SpriteObject<E extends EventMap = EventMap> extends GameObject<E> {
11
- #sprite?: Sprite;
12
- #src?: string;
13
-
14
- constructor(opts?: SpriteOptions) {
15
- super(opts);
16
- if (opts) {
17
- if (opts.src) this.src = opts.src;
18
- }
19
- }
20
-
21
- async #load() {
22
- this.#sprite?.destroy({ children: true });
23
- this.#sprite = undefined;
24
-
25
- if (this.#src) {
26
- if (!textureLoader.checkLoaded(this.#src)) {
27
- console.info(`Texture not preloaded. Loading now: ${this.#src}`);
28
- }
29
- const texture = await textureLoader.load(this.#src);
30
- if (texture) {
31
- this.#sprite = new Sprite({ texture, anchor: 0.5, zIndex: -999999 });
32
- this._addPixiChild(this.#sprite);
33
- }
34
- }
35
- }
36
-
37
- get src() {
38
- return this.#src;
39
- }
40
-
41
- set src(src: string | undefined) {
42
- if (this.#src !== src) {
43
- if (this.#src) textureLoader.release(this.#src);
44
- this.#src = src;
45
- this.#load();
46
- }
47
- }
48
-
49
- remove() {
50
- if (this.#src) textureLoader.release(this.#src);
51
- super.remove();
52
- }
53
- }
54
-
55
- export { SpriteObject };
@@ -1,83 +0,0 @@
1
- import { EventMap } from '@webtaku/event-emitter';
2
- import { Text as PixiText } from 'pixi.js';
3
- import { GameObject, GameObjectOptions } from '../game-object/game-object';
4
-
5
- type TextObjectOptions = {
6
- text: string;
7
- textAlign?: 'left' | 'center' | 'right';
8
- fontSize?: number;
9
- color?: string;
10
- } & GameObjectOptions;
11
-
12
- class TextObject<E extends EventMap = EventMap> extends GameObject<E> {
13
- #pixiText = new PixiText({ anchor: 0.5 });
14
- #text?: string;
15
- #textAlign?: 'left' | 'center' | 'right';
16
- #fontSize?: number;
17
- #color?: string;
18
-
19
- constructor(opts?: TextObjectOptions) {
20
- super(opts);
21
- this._addPixiChild(this.#pixiText);
22
- if (opts) {
23
- if (opts.text) this.text = opts.text;
24
- if (opts.textAlign) this.textAlign = opts.textAlign;
25
- if (opts.fontSize) this.fontSize = opts.fontSize;
26
- if (opts.color) this.color = opts.color;
27
- }
28
- }
29
-
30
- get text() {
31
- return this.#text;
32
- }
33
-
34
- set text(text: string | undefined) {
35
- this.#text = text;
36
- this.#pixiText.text = text || '';
37
- }
38
-
39
- get textAlign() {
40
- return this.#textAlign;
41
- }
42
-
43
- set textAlign(textAlign: 'left' | 'center' | 'right' | undefined) {
44
- this.#textAlign = textAlign;
45
- if (textAlign !== undefined) this.#pixiText.style.align = textAlign;
46
- }
47
-
48
- get fontSize() {
49
- return this.#fontSize;
50
- }
51
-
52
- set fontSize(fontSize: number | undefined) {
53
- this.#fontSize = fontSize;
54
- if (fontSize !== undefined) this.#pixiText.style.fontSize = fontSize;
55
- }
56
-
57
- get color() {
58
- return this.#color;
59
- }
60
-
61
- set color(color: string | undefined) {
62
- this.#color = color;
63
- if (color !== undefined) this.#pixiText.style.fill = color;
64
- }
65
-
66
- get anchorX() {
67
- return this.#pixiText.anchor.x - 0.5;
68
- }
69
-
70
- set anchorX(value: number) {
71
- this.#pixiText.anchor.x = value + 0.5;
72
- }
73
-
74
- get anchorY() {
75
- return this.#pixiText.anchor.y - 0.5;
76
- }
77
-
78
- set anchorY(value: number) {
79
- this.#pixiText.anchor.y = value + 0.5;
80
- }
81
- }
82
-
83
- export { TextObject };
@@ -1,73 +0,0 @@
1
- import { EventMap } from '@webtaku/event-emitter';
2
- import { TilingSprite } from 'pixi.js';
3
- import { textureLoader } from '../asset/loaders/texture';
4
- import { GameObject, GameObjectOptions } from '../game-object/game-object';
5
- import { WorldTransform } from '../game-object/transform';
6
-
7
- type TilingSpriteOptions = {
8
- src?: string;
9
- scrollSpeedX?: number;
10
- scrollSpeedY?: number;
11
- } & GameObjectOptions;
12
-
13
- class TilingSpriteObject<E extends EventMap = EventMap> extends GameObject<E> {
14
- #sprite?: TilingSprite;
15
- #src?: string;
16
-
17
- scrollSpeedX?: number;
18
- scrollSpeedY?: number;
19
-
20
- constructor(opts?: TilingSpriteOptions) {
21
- super();
22
- if (opts) {
23
- if (opts.src) this.src = opts.src;
24
- if (opts.scrollSpeedX) this.scrollSpeedX = opts.scrollSpeedX;
25
- if (opts.scrollSpeedY) this.scrollSpeedY = opts.scrollSpeedY;
26
- }
27
- }
28
-
29
- async #load() {
30
- if (this.#src) {
31
- if (!textureLoader.checkLoaded(this.#src)) {
32
- console.info(`Tiling sprite not preloaded. Loading now: ${this.#src}`);
33
- }
34
- const texture = await textureLoader.load(this.#src);
35
- if (texture) {
36
- const sprite = new TilingSprite({
37
- texture,
38
- anchor: 0.5,
39
- zIndex: -999999,
40
- });
41
- this._addPixiChild(sprite);
42
- this.#sprite = sprite;
43
- }
44
- }
45
- }
46
-
47
- get src() {
48
- return this.#src;
49
- }
50
-
51
- set src(src: string | undefined) {
52
- this.#sprite?.destroy({ children: true });
53
- this.#sprite = undefined;
54
- if (this.#src) textureLoader.release(this.#src);
55
- this.#src = src;
56
- this.#load();
57
- }
58
-
59
- _engineUpdate(dt: number, pt: WorldTransform) {
60
- if (this.#sprite) {
61
- if (this.scrollSpeedX !== undefined) this.#sprite.tilePosition.x += this.scrollSpeedX * dt;
62
- if (this.scrollSpeedY !== undefined) this.#sprite.tilePosition.y += this.scrollSpeedY * dt;
63
- }
64
- super._engineUpdate(dt, pt);
65
- }
66
-
67
- remove() {
68
- if (this.#src) textureLoader.release(this.#src);
69
- super.remove();
70
- }
71
- }
72
-
73
- export { TilingSpriteObject };
@@ -1,5 +0,0 @@
1
- export let debugMode = false;
2
-
3
- export function enableDebug() {
4
- debugMode = true;
5
- }
package/src/utils/go.ts DELETED
@@ -1,53 +0,0 @@
1
- import { AnimatedSpriteObject } from '../game-object-ext/animated-sprite';
2
- import { DomContainerObject } from '../game-object-ext/dom-container';
3
- import { RectangleObject } from '../game-object-ext/rect';
4
- import { SpineObject } from '../game-object-ext/spine';
5
- import { SpriteObject } from '../game-object-ext/sprite';
6
- import { TextObject } from '../game-object-ext/text';
7
- import { TilingSpriteObject } from '../game-object-ext/tiling-sprite';
8
- import { GameObject } from '../game-object/game-object';
9
-
10
- const GameObjectClassMap = {
11
- 'go': GameObject,
12
- 'sprite': SpriteObject,
13
- 'animated-sprite': AnimatedSpriteObject,
14
- 'tiling-sprite': TilingSpriteObject,
15
- 'spine': SpineObject,
16
- 'dom': DomContainerObject,
17
- 'text': TextObject,
18
- 'rect': RectangleObject,
19
- } as const;
20
-
21
- type GameObjectNameMap = {
22
- [K in keyof typeof GameObjectClassMap]: InstanceType<(typeof GameObjectClassMap)[K]>;
23
- };
24
-
25
- type Name = '' | keyof GameObjectNameMap;
26
-
27
- type GameObjectByName<T extends Name> = (
28
- T extends '' ? GameObject
29
- : (
30
- T extends keyof GameObjectNameMap ? GameObjectNameMap[T]
31
- : GameObject
32
- )
33
- );
34
-
35
- function go<T extends Name>(
36
- name: T = '' as T,
37
- ...args: (GameObjectByName<T> | Partial<GameObjectByName<T>>)[]
38
- ): GameObjectByName<T> {
39
- const go = new GameObjectClassMap[(name || 'go') as keyof GameObjectNameMap]();
40
-
41
- for (const arg of args) {
42
- if (arg instanceof GameObject) go.add(arg);
43
- else if (arg) {
44
- for (const key in arg) {
45
- (go as any)[key] = arg[key];
46
- }
47
- }
48
- }
49
-
50
- return go as GameObjectByName<T>;
51
- }
52
-
53
- export { go };