kiwiengine 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.ko.md +2 -2
  2. package/README.md +2 -2
  3. package/examples/auto-battle/assets/bgm/battle.mp3 +0 -0
  4. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  5. package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
  6. package/examples/auto-battle/assets/joystick/joystick.png +0 -0
  7. package/examples/auto-battle/assets/joystick/knob.png +0 -0
  8. package/examples/auto-battle/assets/sfx/hero/die/die.wav +0 -0
  9. package/examples/auto-battle/assets/sfx/hero/heal/heal.wav +0 -0
  10. package/examples/auto-battle/assets/sfx/hero/hit/hit1.wav +0 -0
  11. package/examples/auto-battle/assets/sfx/hero/hit/hit2.wav +0 -0
  12. package/examples/auto-battle/assets/sfx/hero/hit/hit3.wav +0 -0
  13. package/examples/auto-battle/assets/sfx/hero/miss/miss1.wav +0 -0
  14. package/examples/auto-battle/assets/sfx/hero/miss/miss2.wav +0 -0
  15. package/examples/auto-battle/assets/sfx/hero/miss/miss3.wav +0 -0
  16. package/examples/auto-battle/assets/sfx/orc/die/die.wav +0 -0
  17. package/examples/auto-battle/assets/sfx/orc/hit/hit1.wav +0 -0
  18. package/examples/auto-battle/assets/sfx/orc/hit/hit2.wav +0 -0
  19. package/examples/auto-battle/assets/sfx/orc/hit/hit3.wav +0 -0
  20. package/examples/auto-battle/assets/sfx/orc/miss/miss1.wav +0 -0
  21. package/examples/auto-battle/assets/sfx/orc/miss/miss2.wav +0 -0
  22. package/examples/auto-battle/assets/sfx/orc/miss/miss3.wav +0 -0
  23. package/examples/auto-battle/assets/spritesheets/hero-atlas.json +246 -0
  24. package/examples/auto-battle/assets/spritesheets/hero.png +0 -0
  25. package/examples/auto-battle/assets/spritesheets/orc-atlas.json +246 -0
  26. package/examples/auto-battle/assets/spritesheets/orc.png +0 -0
  27. package/examples/auto-battle/assets/spritesheets/potion-atlas.json +68 -0
  28. package/examples/auto-battle/assets/spritesheets/potion.png +0 -0
  29. package/examples/auto-battle/dist/game.js +2 -0
  30. package/examples/auto-battle/dist/game.js.LICENSE.txt +35 -0
  31. package/examples/auto-battle/hud/damage-text.ts +46 -0
  32. package/examples/auto-battle/hud/heal-text.ts +46 -0
  33. package/examples/auto-battle/hud/hp-bar.ts +38 -0
  34. package/examples/auto-battle/index.ts +41 -0
  35. package/examples/auto-battle/objects/character.ts +95 -0
  36. package/examples/auto-battle/objects/hero.ts +119 -0
  37. package/examples/auto-battle/objects/orc.ts +107 -0
  38. package/examples/auto-battle/objects/potion.ts +27 -0
  39. package/examples/auto-battle/stage.ts +366 -0
  40. package/examples/battle-benchmark-matterjs/assets/bgm/battle.mp3 +0 -0
  41. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  42. package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.png +0 -0
  43. package/examples/battle-benchmark-matterjs/assets/joystick/joystick.png +0 -0
  44. package/examples/battle-benchmark-matterjs/assets/joystick/knob.png +0 -0
  45. package/examples/battle-benchmark-matterjs/assets/sfx/hero/die/die.wav +0 -0
  46. package/examples/battle-benchmark-matterjs/assets/sfx/hero/heal/heal.wav +0 -0
  47. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit1.wav +0 -0
  48. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit2.wav +0 -0
  49. package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit3.wav +0 -0
  50. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss1.wav +0 -0
  51. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss2.wav +0 -0
  52. package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss3.wav +0 -0
  53. package/examples/battle-benchmark-matterjs/assets/sfx/orc/die/die.wav +0 -0
  54. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit1.wav +0 -0
  55. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit2.wav +0 -0
  56. package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit3.wav +0 -0
  57. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss1.wav +0 -0
  58. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss2.wav +0 -0
  59. package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss3.wav +0 -0
  60. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero-atlas.json +246 -0
  61. package/examples/battle-benchmark-matterjs/assets/spritesheets/hero.png +0 -0
  62. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc-atlas.json +246 -0
  63. package/examples/battle-benchmark-matterjs/assets/spritesheets/orc.png +0 -0
  64. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion-atlas.json +68 -0
  65. package/examples/battle-benchmark-matterjs/assets/spritesheets/potion.png +0 -0
  66. package/examples/battle-benchmark-matterjs/dist/game.js +2 -0
  67. package/examples/battle-benchmark-matterjs/dist/game.js.LICENSE.txt +35 -0
  68. package/examples/battle-benchmark-matterjs/hud/damage-text.ts +46 -0
  69. package/examples/battle-benchmark-matterjs/hud/heal-text.ts +46 -0
  70. package/examples/battle-benchmark-matterjs/hud/hp-bar.ts +38 -0
  71. package/examples/battle-benchmark-matterjs/index.html +24 -0
  72. package/examples/battle-benchmark-matterjs/index.ts +41 -0
  73. package/examples/battle-benchmark-matterjs/objects/character.ts +95 -0
  74. package/examples/battle-benchmark-matterjs/objects/hero.ts +111 -0
  75. package/examples/battle-benchmark-matterjs/objects/orc.ts +107 -0
  76. package/examples/battle-benchmark-matterjs/objects/potion.ts +27 -0
  77. package/examples/battle-benchmark-matterjs/stage.ts +177 -0
  78. package/examples/battle-benchmark-separation/assets/bgm/battle.mp3 +0 -0
  79. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  80. package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.png +0 -0
  81. package/examples/battle-benchmark-separation/assets/joystick/joystick.png +0 -0
  82. package/examples/battle-benchmark-separation/assets/joystick/knob.png +0 -0
  83. package/examples/battle-benchmark-separation/assets/sfx/hero/die/die.wav +0 -0
  84. package/examples/battle-benchmark-separation/assets/sfx/hero/heal/heal.wav +0 -0
  85. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit1.wav +0 -0
  86. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit2.wav +0 -0
  87. package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit3.wav +0 -0
  88. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss1.wav +0 -0
  89. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss2.wav +0 -0
  90. package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss3.wav +0 -0
  91. package/examples/battle-benchmark-separation/assets/sfx/orc/die/die.wav +0 -0
  92. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit1.wav +0 -0
  93. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit2.wav +0 -0
  94. package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit3.wav +0 -0
  95. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss1.wav +0 -0
  96. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss2.wav +0 -0
  97. package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss3.wav +0 -0
  98. package/examples/battle-benchmark-separation/assets/spritesheets/hero-atlas.json +246 -0
  99. package/examples/battle-benchmark-separation/assets/spritesheets/hero.png +0 -0
  100. package/examples/battle-benchmark-separation/assets/spritesheets/orc-atlas.json +246 -0
  101. package/examples/battle-benchmark-separation/assets/spritesheets/orc.png +0 -0
  102. package/examples/battle-benchmark-separation/assets/spritesheets/potion-atlas.json +68 -0
  103. package/examples/battle-benchmark-separation/assets/spritesheets/potion.png +0 -0
  104. package/examples/battle-benchmark-separation/dist/game.js +2 -0
  105. package/examples/battle-benchmark-separation/dist/game.js.LICENSE.txt +35 -0
  106. package/examples/battle-benchmark-separation/hud/damage-text.ts +46 -0
  107. package/examples/battle-benchmark-separation/hud/heal-text.ts +46 -0
  108. package/examples/battle-benchmark-separation/hud/hp-bar.ts +38 -0
  109. package/examples/battle-benchmark-separation/index.html +24 -0
  110. package/examples/battle-benchmark-separation/index.ts +41 -0
  111. package/examples/battle-benchmark-separation/objects/character.ts +225 -0
  112. package/examples/battle-benchmark-separation/objects/hero.ts +110 -0
  113. package/examples/battle-benchmark-separation/objects/orc.ts +213 -0
  114. package/examples/battle-benchmark-separation/objects/potion.ts +27 -0
  115. package/examples/battle-benchmark-separation/stage.ts +178 -0
  116. package/examples/battle-benchmark-separation2/assets/bgm/battle.mp3 +0 -0
  117. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.fnt +107 -0
  118. package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.png +0 -0
  119. package/examples/battle-benchmark-separation2/assets/joystick/joystick.png +0 -0
  120. package/examples/battle-benchmark-separation2/assets/joystick/knob.png +0 -0
  121. package/examples/battle-benchmark-separation2/assets/sfx/hero/die/die.wav +0 -0
  122. package/examples/battle-benchmark-separation2/assets/sfx/hero/heal/heal.wav +0 -0
  123. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit1.wav +0 -0
  124. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit2.wav +0 -0
  125. package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit3.wav +0 -0
  126. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss1.wav +0 -0
  127. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss2.wav +0 -0
  128. package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss3.wav +0 -0
  129. package/examples/battle-benchmark-separation2/assets/sfx/orc/die/die.wav +0 -0
  130. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit1.wav +0 -0
  131. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit2.wav +0 -0
  132. package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit3.wav +0 -0
  133. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss1.wav +0 -0
  134. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss2.wav +0 -0
  135. package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss3.wav +0 -0
  136. package/examples/battle-benchmark-separation2/assets/spritesheets/hero-atlas.json +246 -0
  137. package/examples/battle-benchmark-separation2/assets/spritesheets/hero.png +0 -0
  138. package/examples/battle-benchmark-separation2/assets/spritesheets/orc-atlas.json +246 -0
  139. package/examples/battle-benchmark-separation2/assets/spritesheets/orc.png +0 -0
  140. package/examples/battle-benchmark-separation2/assets/spritesheets/potion-atlas.json +68 -0
  141. package/examples/battle-benchmark-separation2/assets/spritesheets/potion.png +0 -0
  142. package/examples/battle-benchmark-separation2/dist/game.js +2 -0
  143. package/examples/battle-benchmark-separation2/dist/game.js.LICENSE.txt +35 -0
  144. package/examples/battle-benchmark-separation2/hud/damage-text.ts +46 -0
  145. package/examples/battle-benchmark-separation2/hud/heal-text.ts +46 -0
  146. package/examples/battle-benchmark-separation2/hud/hp-bar.ts +38 -0
  147. package/examples/battle-benchmark-separation2/index.html +24 -0
  148. package/examples/battle-benchmark-separation2/index.ts +41 -0
  149. package/examples/battle-benchmark-separation2/objects/character.ts +195 -0
  150. package/examples/battle-benchmark-separation2/objects/hero.ts +110 -0
  151. package/examples/battle-benchmark-separation2/objects/orc.ts +213 -0
  152. package/examples/battle-benchmark-separation2/objects/potion.ts +27 -0
  153. package/examples/battle-benchmark-separation2/stage.ts +178 -0
  154. package/examples/dom-sprite-test/index.ts +6 -9
  155. package/examples/simple-battle/assets/spritesheets/hero-atlas.json +180 -223
  156. package/examples/simple-battle/assets/spritesheets/orc-atlas.json +180 -223
  157. package/examples/simple-battle/assets/spritesheets/potion-atlas.json +46 -61
  158. package/examples/simple-battle/hud/damage-text.ts +1 -0
  159. package/examples/simple-battle/hud/heal-text.ts +1 -0
  160. package/examples/simple-battle/objects/character.ts +3 -3
  161. package/examples/simple-battle/objects/hero.ts +3 -5
  162. package/examples/simple-battle/objects/orc.ts +3 -5
  163. package/examples/simple-battle/objects/potion.ts +0 -2
  164. package/examples/simple-battle/stage.ts +2 -4
  165. package/examples/sprite-test/index.ts +6 -9
  166. package/examples/webpack.config.js +4 -1
  167. package/lib/asset/loaders/audio.js +4 -1
  168. package/lib/asset/loaders/audio.js.map +1 -1
  169. package/lib/asset/loaders/binary.js +4 -1
  170. package/lib/asset/loaders/binary.js.map +1 -1
  171. package/lib/asset/loaders/bitmap-font.js +24 -21
  172. package/lib/asset/loaders/bitmap-font.js.map +1 -1
  173. package/lib/asset/loaders/font.js +3 -0
  174. package/lib/asset/loaders/font.js.map +1 -1
  175. package/lib/asset/loaders/spritesheet.js +12 -1
  176. package/lib/asset/loaders/spritesheet.js.map +1 -1
  177. package/lib/asset/loaders/text.js +3 -0
  178. package/lib/asset/loaders/text.js.map +1 -1
  179. package/lib/asset/loaders/texture.js +21 -26
  180. package/lib/asset/loaders/texture.js.map +1 -1
  181. package/lib/asset/preload.js.map +1 -1
  182. package/lib/collision/check-collision.js +16 -16
  183. package/lib/collision/check-collision.js.map +1 -1
  184. package/lib/dom/dom-animated-sprite.js +21 -36
  185. package/lib/dom/dom-animated-sprite.js.map +1 -1
  186. package/lib/dom/dom-game-object.js +9 -7
  187. package/lib/dom/dom-game-object.js.map +1 -1
  188. package/lib/dom/dom-particle.js.map +1 -1
  189. package/lib/index.js +1 -0
  190. package/lib/index.js.map +1 -1
  191. package/lib/node/core/dirty-number.js +0 -19
  192. package/lib/node/core/dirty-number.js.map +1 -1
  193. package/lib/node/core/renderable.js +7 -0
  194. package/lib/node/core/renderable.js.map +1 -1
  195. package/lib/node/core/transform.js +22 -11
  196. package/lib/node/core/transform.js.map +1 -1
  197. package/lib/node/ext/animated-sprite.js +3 -22
  198. package/lib/node/ext/animated-sprite.js.map +1 -1
  199. package/lib/node/ext/bitmap-text.js +7 -3
  200. package/lib/node/ext/bitmap-text.js.map +1 -1
  201. package/lib/node/ext/circle.js +18 -3
  202. package/lib/node/ext/circle.js.map +1 -1
  203. package/lib/node/ext/deplay.js +2 -0
  204. package/lib/node/ext/deplay.js.map +1 -1
  205. package/lib/node/ext/dom-container.js +2 -2
  206. package/lib/node/ext/dom-container.js.map +1 -1
  207. package/lib/node/ext/interval.js +2 -0
  208. package/lib/node/ext/interval.js.map +1 -1
  209. package/lib/node/ext/particle.js.map +1 -1
  210. package/lib/node/ext/rectangle.js +24 -4
  211. package/lib/node/ext/rectangle.js.map +1 -1
  212. package/lib/node/physics/physics-object.js +9 -29
  213. package/lib/node/physics/physics-object.js.map +1 -1
  214. package/lib/node/physics/physics-world.js +2 -0
  215. package/lib/node/physics/physics-world.js.map +1 -1
  216. package/lib/node/physics/rigidbodies.js +7 -0
  217. package/lib/node/physics/rigidbodies.js.map +1 -0
  218. package/lib/renderer/renderer.js +3 -2
  219. package/lib/renderer/renderer.js.map +1 -1
  220. package/lib/types/animation-atlas.js +2 -0
  221. package/lib/types/animation-atlas.js.map +1 -0
  222. package/lib/types/asset/loaders/audio.d.ts +1 -0
  223. package/lib/types/asset/loaders/audio.d.ts.map +1 -1
  224. package/lib/types/asset/loaders/binary.d.ts +1 -0
  225. package/lib/types/asset/loaders/binary.d.ts.map +1 -1
  226. package/lib/types/asset/loaders/bitmap-font.d.ts +1 -0
  227. package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -1
  228. package/lib/types/asset/loaders/font.d.ts +1 -0
  229. package/lib/types/asset/loaders/font.d.ts.map +1 -1
  230. package/lib/types/asset/loaders/spritesheet.d.ts +11 -3
  231. package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
  232. package/lib/types/asset/loaders/text.d.ts +1 -0
  233. package/lib/types/asset/loaders/text.d.ts.map +1 -1
  234. package/lib/types/asset/loaders/texture.d.ts +1 -1
  235. package/lib/types/asset/loaders/texture.d.ts.map +1 -1
  236. package/lib/types/asset/preload.d.ts +2 -2
  237. package/lib/types/asset/preload.d.ts.map +1 -1
  238. package/lib/types/atlas copy.js +2 -0
  239. package/lib/types/atlas copy.js.map +1 -0
  240. package/lib/types/atlas.js +2 -0
  241. package/lib/types/atlas.js.map +1 -0
  242. package/lib/types/dom/dom-animated-sprite.d.ts +4 -10
  243. package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -1
  244. package/lib/types/dom/dom-game-object.d.ts +1 -1
  245. package/lib/types/dom/dom-game-object.d.ts.map +1 -1
  246. package/lib/types/dom/dom-particle.d.ts.map +1 -1
  247. package/lib/types/index.d.ts +2 -0
  248. package/lib/types/index.d.ts.map +1 -1
  249. package/lib/types/node/core/dirty-number.d.ts +0 -8
  250. package/lib/types/node/core/dirty-number.d.ts.map +1 -1
  251. package/lib/types/node/core/renderable.d.ts +1 -0
  252. package/lib/types/node/core/renderable.d.ts.map +1 -1
  253. package/lib/types/node/core/transform.d.ts +4 -2
  254. package/lib/types/node/core/transform.d.ts.map +1 -1
  255. package/lib/types/node/ext/animated-sprite.d.ts +4 -10
  256. package/lib/types/node/ext/animated-sprite.d.ts.map +1 -1
  257. package/lib/types/node/ext/bitmap-text.d.ts.map +1 -1
  258. package/lib/types/node/ext/circle.d.ts +3 -3
  259. package/lib/types/node/ext/circle.d.ts.map +1 -1
  260. package/lib/types/node/ext/deplay.d.ts.map +1 -1
  261. package/lib/types/node/ext/dom-container.d.ts +1 -1
  262. package/lib/types/node/ext/dom-container.d.ts.map +1 -1
  263. package/lib/types/node/ext/interval.d.ts.map +1 -1
  264. package/lib/types/node/ext/particle.d.ts.map +1 -1
  265. package/lib/types/node/ext/rectangle.d.ts +4 -4
  266. package/lib/types/node/ext/rectangle.d.ts.map +1 -1
  267. package/lib/types/node/physics/physics-object.d.ts +2 -2
  268. package/lib/types/node/physics/physics-object.d.ts.map +1 -1
  269. package/lib/types/node/physics/physics-world.d.ts.map +1 -1
  270. package/lib/types/node/physics/rigidbodies.d.ts +23 -0
  271. package/lib/types/node/physics/rigidbodies.d.ts.map +1 -0
  272. package/lib/types/renderer/renderer.d.ts.map +1 -1
  273. package/lib/types/sprite-atlas.js +2 -0
  274. package/lib/types/sprite-atlas.js.map +1 -0
  275. package/lib/types/types/animation-atlas.d.ts +14 -0
  276. package/lib/types/types/animation-atlas.d.ts.map +1 -0
  277. package/lib/types/types/atlas copy.d.ts +12 -0
  278. package/lib/types/types/atlas copy.d.ts.map +1 -0
  279. package/lib/types/types/atlas.d.ts +16 -0
  280. package/lib/types/types/atlas.d.ts.map +1 -0
  281. package/lib/types/types/sprite-atlas.d.ts +13 -0
  282. package/lib/types/types/sprite-atlas.d.ts.map +1 -0
  283. package/package.json +1 -1
  284. package/src/asset/loaders/audio.ts +5 -2
  285. package/src/asset/loaders/binary.ts +5 -1
  286. package/src/asset/loaders/bitmap-font.ts +33 -27
  287. package/src/asset/loaders/font.ts +4 -0
  288. package/src/asset/loaders/spritesheet.ts +18 -5
  289. package/src/asset/loaders/text.ts +4 -0
  290. package/src/asset/loaders/texture.ts +19 -27
  291. package/src/asset/preload.ts +4 -8
  292. package/src/collision/check-collision.ts +16 -16
  293. package/src/dom/dom-animated-sprite.ts +24 -45
  294. package/src/dom/dom-game-object.ts +9 -6
  295. package/src/dom/dom-particle.ts +1 -1
  296. package/src/index.ts +2 -0
  297. package/src/node/core/dirty-number.ts +0 -24
  298. package/src/node/core/renderable.ts +7 -0
  299. package/src/node/core/transform.ts +23 -11
  300. package/src/node/ext/animated-sprite.ts +9 -29
  301. package/src/node/ext/bitmap-text.ts +7 -3
  302. package/src/node/ext/circle.ts +18 -3
  303. package/src/node/ext/deplay.ts +1 -0
  304. package/src/node/ext/dom-container.ts +2 -2
  305. package/src/node/ext/interval.ts +1 -0
  306. package/src/node/ext/particle.ts +1 -1
  307. package/src/node/ext/rectangle.ts +24 -4
  308. package/src/node/physics/physics-object.ts +11 -40
  309. package/src/node/physics/physics-world.ts +1 -0
  310. package/src/node/physics/rigidbodies.ts +14 -0
  311. package/src/renderer/renderer.ts +4 -3
  312. package/src/types/atlas.ts +17 -0
  313. package/examples/flappy-cat/assets/bgm/bgm.ogg +0 -0
  314. package/examples/flappy-cat/assets/images/base.png +0 -0
  315. package/examples/flappy-cat/assets/images/bg.png +0 -0
  316. package/examples/flappy-cat/assets/images/cat.png +0 -0
  317. package/examples/flappy-cat/assets/images/pipe-green.png +0 -0
  318. package/examples/flappy-cat/assets/images/pipe-red.png +0 -0
  319. package/examples/flappy-cat/assets/sfx/die.wav +0 -0
  320. package/examples/flappy-cat/assets/sfx/hit.wav +0 -0
  321. package/examples/flappy-cat/assets/sfx/point.wav +0 -0
  322. package/examples/flappy-cat/assets/sfx/wing.wav +0 -0
  323. package/examples/flappy-cat/dist/game.js +0 -0
  324. package/examples/flappy-cat/index.ts +0 -0
  325. /package/examples/{flappy-cat → auto-battle}/index.html +0 -0
@@ -1,4 +1,4 @@
1
- import { AnimatedSpriteNode, ColliderType, DelayNode, GameObjectOptions, sfxPlayer } from '../../../src/index'
1
+ import { AnimatedSpriteNode, ColliderType, DelayNode, GameObjectOptions, RigidbodyType, sfxPlayer } from '../../../src/index'
2
2
  import heroAtlas from '../assets/spritesheets/hero-atlas.json'
3
3
  import { Character } from './character'
4
4
 
@@ -22,7 +22,7 @@ export class Hero extends Character<{
22
22
  ...options,
23
23
  maxHp: 1000,
24
24
  hp: 1000,
25
- collider: { type: ColliderType.Rectangle, width: 30, height: 30, y: 12 },
25
+ rigidbody: { type: RigidbodyType.Rectangle, width: 30, height: 30 },
26
26
  hitbox: { type: ColliderType.Rectangle, width: 32, height: 52, x: HERO_HITBOX_X, y: -8 },
27
27
  hurtbox: { type: ColliderType.Rectangle, width: 24, height: 40, x: 0, y: -4 },
28
28
  isStatic: true
@@ -32,8 +32,6 @@ export class Hero extends Character<{
32
32
  src: 'assets/spritesheets/hero.png',
33
33
  atlas: heroAtlas,
34
34
  animation: 'idle',
35
- fps: 10,
36
- loop: true,
37
35
  scale: 2
38
36
  })
39
37
  this._sprite.on('animationend', (animation) => {
@@ -74,6 +72,7 @@ export class Hero extends Character<{
74
72
  }
75
73
 
76
74
  protected override update(dt: number) {
75
+ if (this.paused) return
77
76
  super.update(dt)
78
77
 
79
78
  this.x += this.#cachedVelX * dt
@@ -103,7 +102,6 @@ export class Hero extends Character<{
103
102
 
104
103
  protected override onDie() {
105
104
  this._sprite.animation = 'die'
106
- this._sprite.loop = false
107
105
  this.#cachedVelX = 0
108
106
  this.#cachedVelY = 0
109
107
  this.disableCollisions()
@@ -1,4 +1,4 @@
1
- import { AnimatedSpriteNode, ColliderType, DelayNode, GameObjectOptions, sfxPlayer } from '../../../src/index'
1
+ import { AnimatedSpriteNode, ColliderType, DelayNode, GameObjectOptions, RigidbodyType, sfxPlayer } from '../../../src/index'
2
2
  import orcAtlas from '../assets/spritesheets/orc-atlas.json'
3
3
  import { Character } from './character'
4
4
 
@@ -21,7 +21,7 @@ export class Orc extends Character<{
21
21
  ...options,
22
22
  maxHp: 100,
23
23
  hp: 100,
24
- collider: { type: ColliderType.Rectangle, width: 30, height: 30, y: 12 },
24
+ rigidbody: { type: RigidbodyType.Rectangle, width: 30, height: 30 },
25
25
  hitbox: { type: ColliderType.Rectangle, width: 32, height: 52, x: ORC_HITBOX_X, y: -8 },
26
26
  hurtbox: { type: ColliderType.Rectangle, width: 24, height: 32, x: 0, y: 0 },
27
27
  })
@@ -30,8 +30,6 @@ export class Orc extends Character<{
30
30
  src: 'assets/spritesheets/orc.png',
31
31
  atlas: orcAtlas,
32
32
  animation: 'idle',
33
- fps: 10,
34
- loop: true,
35
33
  scale: 2
36
34
  })
37
35
  this._sprite.on('animationend', (animation) => {
@@ -83,6 +81,7 @@ export class Orc extends Character<{
83
81
  }
84
82
 
85
83
  protected override update(dt: number) {
84
+ if (this.paused) return
86
85
  super.update(dt)
87
86
  this.velocityX = this.#cachedVelX
88
87
  this.velocityY = this.#cachedVelY
@@ -99,7 +98,6 @@ export class Orc extends Character<{
99
98
 
100
99
  protected override onDie() {
101
100
  this._sprite.animation = 'die'
102
- this._sprite.loop = false
103
101
  this.#cachedVelX = 0
104
102
  this.#cachedVelY = 0
105
103
  this.disableCollisions()
@@ -17,8 +17,6 @@ export class Potion extends GameObject {
17
17
  src: 'assets/spritesheets/potion.png',
18
18
  atlas: potionAtlas,
19
19
  animation: 'animation',
20
- fps: 10,
21
- loop: true,
22
20
  scale: 2
23
21
  }))
24
22
 
@@ -38,10 +38,6 @@ export class Stage extends PhysicsWorld {
38
38
  this.add(this.#spawnOrcInterval = new IntervalNode(1, () => this.#spawnOrc()))
39
39
  this.add(this.#spawnPotionInterval = new IntervalNode(3, () => this.#spawnPotion()))
40
40
 
41
- //for (let i = 0; i < 1000; i++) {
42
- //this.#spawnOrc()
43
- //}
44
-
45
41
  const joystickImage = new Image()
46
42
  joystickImage.src = 'assets/joystick/joystick.png'
47
43
 
@@ -148,7 +144,9 @@ export class Stage extends PhysicsWorld {
148
144
  }
149
145
 
150
146
  protected override update(dt: number) {
147
+ if (this.paused) return
151
148
  super.update(dt)
149
+
152
150
  if (this.#isGameOver) return
153
151
 
154
152
  const h = this.#hero
@@ -23,19 +23,16 @@ const animatedSprite = new AnimatedSpriteNode({
23
23
  src: 'assets/fire.png',
24
24
  atlas: {
25
25
  frames: {
26
- fire1: { frame: { x: 0, y: 0, w: 64, h: 64 } },
27
- fire2: { frame: { x: 64, y: 0, w: 64, h: 64 } },
28
- fire3: { frame: { x: 128, y: 0, w: 64, h: 64 } },
29
- fire4: { frame: { x: 192, y: 0, w: 64, h: 64 } },
30
- fire5: { frame: { x: 256, y: 0, w: 64, h: 64 } },
26
+ fire1: { x: 0, y: 0, w: 64, h: 64 },
27
+ fire2: { x: 64, y: 0, w: 64, h: 64 },
28
+ fire3: { x: 128, y: 0, w: 64, h: 64 },
29
+ fire4: { x: 192, y: 0, w: 64, h: 64 },
30
+ fire5: { x: 256, y: 0, w: 64, h: 64 },
31
31
  },
32
- meta: { scale: 1 },
33
32
  animations: {
34
- fire: ['fire1', 'fire2', 'fire3', 'fire4', 'fire5'],
33
+ fire: { frames: ['fire1', 'fire2', 'fire3', 'fire4', 'fire5'], fps: 12, loop: true },
35
34
  },
36
35
  },
37
36
  animation: 'fire',
38
- fps: 12,
39
- loop: true,
40
37
  })
41
38
  renderer.add(animatedSprite)
@@ -12,8 +12,11 @@ module.exports = {
12
12
  'dom-sprite-test': './dom-sprite-test/index.ts',
13
13
  'dom-particle-test': './dom-particle-test/index.ts',
14
14
 
15
- 'flappy-cat': './flappy-cat/index.ts',
16
15
  'simple-battle': './simple-battle/index.ts',
16
+ 'auto-battle': './auto-battle/index.ts',
17
+ 'battle-benchmark-matterjs': './battle-benchmark-matterjs/index.ts',
18
+ 'battle-benchmark-separation': './battle-benchmark-separation/index.ts',
19
+ 'battle-benchmark-separation2': './battle-benchmark-separation2/index.ts',
17
20
  },
18
21
  output: {
19
22
  filename: '[name]/dist/game.js',
@@ -8,8 +8,8 @@ class AudioLoader extends Loader {
8
8
  console.error(`Failed to load audio data: ${src}`);
9
9
  return;
10
10
  }
11
- const arrayBuffer = await response.arrayBuffer();
12
11
  try {
12
+ const arrayBuffer = await response.arrayBuffer();
13
13
  const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
14
14
  this.loadingPromises.delete(src);
15
15
  if (this.hasActiveRef(src)) {
@@ -30,6 +30,9 @@ class AudioLoader extends Loader {
30
30
  this.loadingPromises.set(src, loadingPromise);
31
31
  return await loadingPromise;
32
32
  }
33
+ async load(src) {
34
+ return await super.load(src);
35
+ }
33
36
  }
34
37
  export const audioLoader = new AudioLoader();
35
38
  //# sourceMappingURL=audio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../src/asset/loaders/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,WAAY,SAAQ,MAAmB;IACxB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;gBAClD,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAEhD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;gBAEnE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;oBACtD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;wBACvC,OAAO,WAAW,CAAA;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;gBAC3D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA","sourcesContent":["import { audioContext } from '../audio'\nimport { Loader } from './loader'\n\nclass AudioLoader extends Loader<AudioBuffer> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load audio data: ${src}`)\n return\n }\n\n const arrayBuffer = await response.arrayBuffer()\n\n try {\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer)\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Audio buffer already exists: ${src}`)\n } else {\n this.cachedAssets.set(src, audioBuffer)\n return audioBuffer\n }\n }\n } catch (error) {\n console.error(`Failed to decode audio data: ${src}`, error)\n this.loadingPromises.delete(src)\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n}\n\nexport const audioLoader = new AudioLoader()\n"]}
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../src/asset/loaders/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,WAAY,SAAQ,MAAmB;IACxB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;gBAClD,OAAM;YACR,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;gBAChD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;gBAEnE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;oBACtD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;wBACvC,OAAO,WAAW,CAAA;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;gBAC3D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,GAAW;QAC7B,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA","sourcesContent":["import { audioContext } from '../audio'\nimport { Loader } from './loader'\n\nclass AudioLoader extends Loader<AudioBuffer> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load audio data: ${src}`)\n return\n }\n\n try {\n const arrayBuffer = await response.arrayBuffer()\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer)\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Audio buffer already exists: ${src}`)\n } else {\n this.cachedAssets.set(src, audioBuffer)\n return audioBuffer\n }\n }\n } catch (error) {\n console.error(`Failed to decode audio data: ${src}`, error)\n this.loadingPromises.delete(src)\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n\n override async load(src: string) {\n return await super.load(src)\n }\n}\n\nexport const audioLoader = new AudioLoader()\n"]}
@@ -8,13 +8,13 @@ class BinaryLoader extends Loader {
8
8
  return;
9
9
  }
10
10
  const arrayBuffer = await response.arrayBuffer();
11
- const data = new Uint8Array(arrayBuffer);
12
11
  this.loadingPromises.delete(src);
13
12
  if (this.hasActiveRef(src)) {
14
13
  if (this.cachedAssets.has(src)) {
15
14
  console.error(`Binary data already exists: ${src}`);
16
15
  }
17
16
  else {
17
+ const data = new Uint8Array(arrayBuffer);
18
18
  this.cachedAssets.set(src, data);
19
19
  return data;
20
20
  }
@@ -23,6 +23,9 @@ class BinaryLoader extends Loader {
23
23
  this.loadingPromises.set(src, loadingPromise);
24
24
  return await loadingPromise;
25
25
  }
26
+ async load(src) {
27
+ return await super.load(src);
28
+ }
26
29
  }
27
30
  export const binaryLoader = new BinaryLoader();
28
31
  //# sourceMappingURL=binary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../src/asset/loaders/binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,YAAa,SAAQ,MAAkB;IACxB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;gBACnD,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAChD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;YAExC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;gBACrD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass BinaryLoader extends Loader<Uint8Array> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load binary data: ${src}`)\n return\n }\n\n const arrayBuffer = await response.arrayBuffer()\n const data = new Uint8Array(arrayBuffer)\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Binary data already exists: ${src}`)\n } else {\n this.cachedAssets.set(src, data)\n return data\n }\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n}\n\nexport const binaryLoader = new BinaryLoader()\n"]}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../src/asset/loaders/binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,YAAa,SAAQ,MAAkB;IACxB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;gBACnD,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAEhD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;gBACrD,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;oBACxC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,GAAW;QAC7B,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass BinaryLoader extends Loader<Uint8Array> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load binary data: ${src}`)\n return\n }\n\n const arrayBuffer = await response.arrayBuffer()\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Binary data already exists: ${src}`)\n } else {\n const data = new Uint8Array(arrayBuffer)\n this.cachedAssets.set(src, data)\n return data\n }\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n\n override async load(src: string) {\n return await super.load(src)\n }\n}\n\nexport const binaryLoader = new BinaryLoader()\n"]}
@@ -17,34 +17,34 @@ class BitmapFontLoader extends Loader {
17
17
  }
18
18
  try {
19
19
  const text = await response.text();
20
- const parser = new DOMParser();
21
- const xmlDoc = parser.parseFromString(text, 'application/xml');
22
- const infoEl = xmlDoc.getElementsByTagName('info')[0];
23
- const commonEl = xmlDoc.getElementsByTagName('common')[0];
24
- const charEls = xmlDoc.getElementsByTagName('char');
25
- const size = parseInt(infoEl.getAttribute('size') || '16', 10);
26
- const lineHeight = parseInt(commonEl.getAttribute('lineHeight') || '32', 10);
27
- const chars = {};
28
- for (let i = 0; i < charEls.length; i++) {
29
- const charEl = charEls[i];
30
- const id = parseInt(charEl.getAttribute('id'), 10);
31
- const x = parseInt(charEl.getAttribute('x'), 10);
32
- const y = parseInt(charEl.getAttribute('y'), 10);
33
- const width = parseInt(charEl.getAttribute('width'), 10);
34
- const height = parseInt(charEl.getAttribute('height'), 10);
35
- const xoffset = parseInt(charEl.getAttribute('xoffset'), 10);
36
- const yoffset = parseInt(charEl.getAttribute('yoffset'), 10);
37
- const xadvance = parseInt(charEl.getAttribute('xadvance'), 10);
38
- chars[id] = { x, y, width, height, xoffset, yoffset, xadvance };
39
- }
40
20
  this.loadingPromises.delete(fnt);
41
- const bitmapFont = { src, chars, texture, size, lineHeight };
42
21
  if (this.hasActiveRef(fnt)) {
43
22
  if (this.cachedAssets.has(fnt)) {
44
23
  textureLoader.release(src);
45
24
  console.error(`Bitmap font already exists: ${fnt}`);
46
25
  }
47
26
  else {
27
+ const parser = new DOMParser();
28
+ const xmlDoc = parser.parseFromString(text, 'application/xml');
29
+ const infoEl = xmlDoc.getElementsByTagName('info')[0];
30
+ const commonEl = xmlDoc.getElementsByTagName('common')[0];
31
+ const charEls = xmlDoc.getElementsByTagName('char');
32
+ const size = parseInt(infoEl.getAttribute('size') || '16', 10);
33
+ const lineHeight = parseInt(commonEl.getAttribute('lineHeight') || '32', 10);
34
+ const chars = {};
35
+ for (let i = 0; i < charEls.length; i++) {
36
+ const charEl = charEls[i];
37
+ const id = parseInt(charEl.getAttribute('id'), 10);
38
+ const x = parseInt(charEl.getAttribute('x'), 10);
39
+ const y = parseInt(charEl.getAttribute('y'), 10);
40
+ const width = parseInt(charEl.getAttribute('width'), 10);
41
+ const height = parseInt(charEl.getAttribute('height'), 10);
42
+ const xoffset = parseInt(charEl.getAttribute('xoffset'), 10);
43
+ const yoffset = parseInt(charEl.getAttribute('yoffset'), 10);
44
+ const xadvance = parseInt(charEl.getAttribute('xadvance'), 10);
45
+ chars[id] = { x, y, width, height, xoffset, yoffset, xadvance };
46
+ }
47
+ const bitmapFont = { src, chars, texture, size, lineHeight };
48
48
  this.cachedAssets.set(fnt, bitmapFont);
49
49
  return bitmapFont;
50
50
  }
@@ -66,6 +66,9 @@ class BitmapFontLoader extends Loader {
66
66
  if (src)
67
67
  textureLoader.release(src);
68
68
  }
69
+ async load(fnt, src) {
70
+ return await super.load(fnt, src);
71
+ }
69
72
  }
70
73
  export const bitmapFontLoader = new BitmapFontLoader();
71
74
  //# sourceMappingURL=bitmap-font.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmap-font.js","sourceRoot":"","sources":["../../../src/asset/loaders/bitmap-font.ts"],"names":[],"mappings":"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","sourcesContent":["import { BitmapFont, Char } from '../../types/bitmap-font'\nimport { Loader } from './loader'\nimport { textureLoader } from './texture'\n\nclass BitmapFontLoader extends Loader<BitmapFont> {\n #fntToSrc = new Map<string, string>()\n\n protected override async doLoad(fnt: string, src: string) {\n this.#fntToSrc.set(fnt, src)\n\n const loadingPromise = (async () => {\n const texture = await textureLoader.load(src)\n if (!texture) {\n console.error(`Failed to load texture: ${src}`)\n return\n }\n\n const response = await fetch(fnt)\n if (!response.ok) {\n console.error(`Failed to load font xml: ${fnt}`)\n return\n }\n\n try {\n const text = await response.text()\n\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(text, 'application/xml')\n\n const infoEl = xmlDoc.getElementsByTagName('info')[0]\n const commonEl = xmlDoc.getElementsByTagName('common')[0]\n const charEls = xmlDoc.getElementsByTagName('char')\n\n const size = parseInt(infoEl.getAttribute('size') || '16', 10)\n const lineHeight = parseInt(commonEl.getAttribute('lineHeight') || '32', 10)\n\n const chars: Record<number, Char> = {}\n\n for (let i = 0; i < charEls.length; i++) {\n const charEl = charEls[i]\n\n const id = parseInt(charEl.getAttribute('id')!, 10)\n const x = parseInt(charEl.getAttribute('x')!, 10)\n const y = parseInt(charEl.getAttribute('y')!, 10)\n const width = parseInt(charEl.getAttribute('width')!, 10)\n const height = parseInt(charEl.getAttribute('height')!, 10)\n const xoffset = parseInt(charEl.getAttribute('xoffset')!, 10)\n const yoffset = parseInt(charEl.getAttribute('yoffset')!, 10)\n const xadvance = parseInt(charEl.getAttribute('xadvance')!, 10)\n\n chars[id] = { x, y, width, height, xoffset, yoffset, xadvance }\n }\n\n this.loadingPromises.delete(fnt)\n\n const bitmapFont = { src, chars, texture, size, lineHeight }\n if (this.hasActiveRef(fnt)) {\n if (this.cachedAssets.has(fnt)) {\n textureLoader.release(src)\n console.error(`Bitmap font already exists: ${fnt}`)\n } else {\n this.cachedAssets.set(fnt, bitmapFont)\n return bitmapFont\n }\n } else {\n textureLoader.release(src)\n }\n\n } catch (error) {\n console.error(`Failed to decode font xml: ${fnt}`, error)\n this.loadingPromises.delete(fnt)\n }\n })()\n\n this.loadingPromises.set(fnt, loadingPromise)\n return await loadingPromise\n }\n\n protected override cleanup(fnt: string) {\n const src = this.#fntToSrc.get(fnt)\n if (src) textureLoader.release(src)\n }\n}\n\nexport const bitmapFontLoader = new BitmapFontLoader()\n"]}
1
+ {"version":3,"file":"bitmap-font.js","sourceRoot":"","sources":["../../../src/asset/loaders/bitmap-font.ts"],"names":[],"mappings":"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","sourcesContent":["import { BitmapFont, Char } from '../../types/bitmap-font'\nimport { Loader } from './loader'\nimport { textureLoader } from './texture'\n\nclass BitmapFontLoader extends Loader<BitmapFont> {\n #fntToSrc = new Map<string, string>()\n\n protected override async doLoad(fnt: string, src: string) {\n this.#fntToSrc.set(fnt, src)\n\n const loadingPromise = (async () => {\n const texture = await textureLoader.load(src)\n if (!texture) {\n console.error(`Failed to load texture: ${src}`)\n return\n }\n\n const response = await fetch(fnt)\n if (!response.ok) {\n console.error(`Failed to load font xml: ${fnt}`)\n return\n }\n\n try {\n const text = await response.text()\n\n this.loadingPromises.delete(fnt)\n\n if (this.hasActiveRef(fnt)) {\n if (this.cachedAssets.has(fnt)) {\n textureLoader.release(src)\n console.error(`Bitmap font already exists: ${fnt}`)\n } else {\n\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(text, 'application/xml')\n\n const infoEl = xmlDoc.getElementsByTagName('info')[0]\n const commonEl = xmlDoc.getElementsByTagName('common')[0]\n const charEls = xmlDoc.getElementsByTagName('char')\n\n const size = parseInt(infoEl.getAttribute('size') || '16', 10)\n const lineHeight = parseInt(commonEl.getAttribute('lineHeight') || '32', 10)\n\n const chars: Record<number, Char> = {}\n\n for (let i = 0; i < charEls.length; i++) {\n const charEl = charEls[i]\n\n const id = parseInt(charEl.getAttribute('id')!, 10)\n const x = parseInt(charEl.getAttribute('x')!, 10)\n const y = parseInt(charEl.getAttribute('y')!, 10)\n const width = parseInt(charEl.getAttribute('width')!, 10)\n const height = parseInt(charEl.getAttribute('height')!, 10)\n const xoffset = parseInt(charEl.getAttribute('xoffset')!, 10)\n const yoffset = parseInt(charEl.getAttribute('yoffset')!, 10)\n const xadvance = parseInt(charEl.getAttribute('xadvance')!, 10)\n\n chars[id] = { x, y, width, height, xoffset, yoffset, xadvance }\n }\n\n const bitmapFont = { src, chars, texture, size, lineHeight }\n\n this.cachedAssets.set(fnt, bitmapFont)\n return bitmapFont\n }\n } else {\n textureLoader.release(src)\n }\n\n } catch (error) {\n console.error(`Failed to decode font xml: ${fnt}`, error)\n this.loadingPromises.delete(fnt)\n }\n })()\n\n this.loadingPromises.set(fnt, loadingPromise)\n return await loadingPromise\n }\n\n protected override cleanup(fnt: string) {\n const src = this.#fntToSrc.get(fnt)\n if (src) textureLoader.release(src)\n }\n\n override async load(fnt: string, src: string) {\n return await super.load(fnt, src)\n }\n}\n\nexport const bitmapFontLoader = new BitmapFontLoader()\n"]}
@@ -22,6 +22,9 @@ class FontFamilyLoader extends Loader {
22
22
  this.loadingPromises.set(fontName, loadingPromise);
23
23
  return await loadingPromise;
24
24
  }
25
+ async load(fontName) {
26
+ return await super.load(fontName);
27
+ }
25
28
  }
26
29
  export const fontFamilyLoader = new FontFamilyLoader();
27
30
  //# sourceMappingURL=font.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"font.js","sourceRoot":"","sources":["../../../src/asset/loaders/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,gBAAiB,SAAQ,MAAe;IACzB,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC9C,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAA;oBAC5C,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAA;oBAC1B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACrC,OAAO,IAAI,CAAA;gBACb,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;oBACxD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBAClE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvC,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QAClD,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass FontFamilyLoader extends Loader<boolean> {\n protected override async doLoad(fontName: string) {\n const loadingPromise = (async () => {\n if ('fonts' in document) {\n try {\n await document.fonts.load(`1em ${fontName}`)\n await document.fonts.ready\n this.loadingPromises.delete(fontName)\n return true\n } catch (error) {\n console.error(`Failed to load font: ${fontName}`, error)\n this.loadingPromises.delete(fontName)\n }\n } else {\n console.warn(`This browser does not support the Font Loading API`)\n this.loadingPromises.delete(fontName)\n }\n })()\n\n this.loadingPromises.set(fontName, loadingPromise)\n return await loadingPromise\n }\n}\n\nexport const fontFamilyLoader = new FontFamilyLoader()\n"]}
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["../../../src/asset/loaders/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,gBAAiB,SAAQ,MAAe;IACzB,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC9C,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAA;oBAC5C,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAA;oBAC1B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACrC,OAAO,IAAI,CAAA;gBACb,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;oBACxD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBAClE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvC,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QAClD,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,QAAgB;QAClC,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass FontFamilyLoader extends Loader<boolean> {\n protected override async doLoad(fontName: string) {\n const loadingPromise = (async () => {\n if ('fonts' in document) {\n try {\n await document.fonts.load(`1em ${fontName}`)\n await document.fonts.ready\n this.loadingPromises.delete(fontName)\n return true\n } catch (error) {\n console.error(`Failed to load font: ${fontName}`, error)\n this.loadingPromises.delete(fontName)\n }\n } else {\n console.warn(`This browser does not support the Font Loading API`)\n this.loadingPromises.delete(fontName)\n }\n })()\n\n this.loadingPromises.set(fontName, loadingPromise)\n return await loadingPromise\n }\n\n override async load(fontName: string) {\n return await super.load(fontName)\n }\n}\n\nexport const fontFamilyLoader = new FontFamilyLoader()\n"]}
@@ -24,7 +24,15 @@ class SpritesheetLoader extends Loader {
24
24
  console.error(`Failed to load texture: ${src}`);
25
25
  return;
26
26
  }
27
- const spritesheet = new Spritesheet(texture, atlas);
27
+ const frames = {};
28
+ for (const [key, value] of Object.entries(atlas.frames)) {
29
+ frames[key] = { frame: value };
30
+ }
31
+ const animations = {};
32
+ for (const [key, value] of Object.entries(atlas.animations)) {
33
+ animations[key] = value.frames;
34
+ }
35
+ const spritesheet = new Spritesheet(texture, { frames, meta: { scale: 1 }, animations });
28
36
  await spritesheet.parse();
29
37
  this.loadingPromises.delete(id);
30
38
  if (this.hasActiveRef(id)) {
@@ -50,6 +58,9 @@ class SpritesheetLoader extends Loader {
50
58
  if (src)
51
59
  textureLoader.release(src);
52
60
  }
61
+ async load(id, src, atlas) {
62
+ return await super.load(id, src, atlas);
63
+ }
53
64
  }
54
65
  export const spritesheetLoader = new SpritesheetLoader();
55
66
  //# sourceMappingURL=spritesheet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spritesheet.js","sourceRoot":"","sources":["../../../src/asset/loaders/spritesheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,YAAY,GAAG,IAAI,OAAO,EAAwC,CAAA;AACxE,IAAI,SAAS,GAAG,CAAC,CAAA;AAEjB,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAsB;IAClE,IAAI,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;QACpC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,SAAS,EAAE,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;AAC3B,CAAC;AAED,MAAM,iBAAkB,SAAQ,MAAmB;IACjD,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAElB,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,GAAW,EAAE,KAAsB;QAC7E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAE1B,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACnD,MAAM,WAAW,CAAC,KAAK,EAAE,CAAA;YAEzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAE/B,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC9B,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;gBACrD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;oBACtC,OAAO,WAAW,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;QAC5C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEkB,OAAO,CAAC,EAAU,EAAE,WAAwB;QAC7D,WAAW,CAAC,OAAO,EAAE,CAAA;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,GAAG;YAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAA","sourcesContent":["import { Spritesheet, SpritesheetData } from 'pixi.js'\nimport { Loader } from './loader'\nimport { textureLoader } from './texture'\n\nconst atlasIdCache = new WeakMap<SpritesheetData, Map<string, string>>()\nlet idCounter = 0\n\nexport function getCachedAtlasId(src: string, atlas: SpritesheetData): string {\n let innerMap = atlasIdCache.get(atlas)\n if (!innerMap) {\n innerMap = new Map<string, string>()\n atlasIdCache.set(atlas, innerMap)\n }\n\n if (!innerMap.has(src)) {\n innerMap.set(src, `${src}#${idCounter++}`)\n }\n\n return innerMap.get(src)!\n}\n\nclass SpritesheetLoader extends Loader<Spritesheet> {\n #idToSrc = new Map<string, string>();\n\n protected override async doLoad(id: string, src: string, atlas: SpritesheetData) {\n this.#idToSrc.set(id, src)\n\n const loadingPromise = (async () => {\n const texture = await textureLoader.load(src)\n if (!texture) {\n console.error(`Failed to load texture: ${src}`)\n return\n }\n\n const spritesheet = new Spritesheet(texture, atlas)\n await spritesheet.parse()\n\n this.loadingPromises.delete(id)\n\n if (this.hasActiveRef(id)) {\n if (this.cachedAssets.has(id)) {\n textureLoader.release(src)\n console.error(`Spritesheet already exists: ${src}`)\n } else {\n this.cachedAssets.set(id, spritesheet)\n return spritesheet\n }\n } else {\n textureLoader.release(src)\n }\n })()\n\n this.loadingPromises.set(id, loadingPromise)\n return await loadingPromise\n }\n\n protected override cleanup(id: string, spritesheet: Spritesheet) {\n spritesheet.destroy()\n\n const src = this.#idToSrc.get(id)\n if (src) textureLoader.release(src)\n }\n}\n\nexport const spritesheetLoader = new SpritesheetLoader()\n"]}
1
+ {"version":3,"file":"spritesheet.js","sourceRoot":"","sources":["../../../src/asset/loaders/spritesheet.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dict, Spritesheet, SpritesheetFrameData } from 'pixi.js'\nimport { Atlas } from '../../types/atlas'\nimport { Loader } from './loader'\nimport { textureLoader } from './texture'\n\nconst atlasIdCache = new WeakMap<Atlas, Map<string, string>>()\nlet idCounter = 0\n\nexport function getCachedAtlasId(src: string, atlas: Atlas): string {\n let innerMap = atlasIdCache.get(atlas)\n if (!innerMap) {\n innerMap = new Map<string, string>()\n atlasIdCache.set(atlas, innerMap)\n }\n\n if (!innerMap.has(src)) {\n innerMap.set(src, `${src}#${idCounter++}`)\n }\n\n return innerMap.get(src)!\n}\n\nclass SpritesheetLoader extends Loader<Spritesheet> {\n #idToSrc = new Map<string, string>();\n\n protected override async doLoad(id: string, src: string, atlas: Atlas) {\n this.#idToSrc.set(id, src)\n\n const loadingPromise = (async () => {\n const texture = await textureLoader.load(src)\n if (!texture) {\n console.error(`Failed to load texture: ${src}`)\n return\n }\n\n const frames: Dict<SpritesheetFrameData> = {}\n for (const [key, value] of Object.entries(atlas.frames)) {\n frames[key] = { frame: value }\n }\n const animations: Dict<string[]> = {}\n for (const [key, value] of Object.entries(atlas.animations)) {\n animations[key] = value.frames\n }\n const spritesheet = new Spritesheet(texture, { frames, meta: { scale: 1 }, animations })\n await spritesheet.parse()\n\n this.loadingPromises.delete(id)\n\n if (this.hasActiveRef(id)) {\n if (this.cachedAssets.has(id)) {\n textureLoader.release(src)\n console.error(`Spritesheet already exists: ${src}`)\n } else {\n this.cachedAssets.set(id, spritesheet)\n return spritesheet\n }\n } else {\n textureLoader.release(src)\n }\n })()\n\n this.loadingPromises.set(id, loadingPromise)\n return await loadingPromise\n }\n\n protected override cleanup(id: string, spritesheet: Spritesheet) {\n spritesheet.destroy()\n\n const src = this.#idToSrc.get(id)\n if (src) textureLoader.release(src)\n }\n\n override async load(id: string, src: string, atlas: Atlas) {\n return await super.load(id, src, atlas)\n }\n}\n\nexport const spritesheetLoader = new SpritesheetLoader()\n"]}
@@ -22,6 +22,9 @@ class TextLoader extends Loader {
22
22
  this.loadingPromises.set(src, loadingPromise);
23
23
  return await loadingPromise;
24
24
  }
25
+ async load(src) {
26
+ return await super.load(src);
27
+ }
25
28
  }
26
29
  export const textLoader = new TextLoader();
27
30
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/asset/loaders/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,UAAW,SAAQ,MAAc;IAClB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;gBAC5C,OAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAElC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;gBAC9C,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass TextLoader extends Loader<string> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load text: ${src}`)\n return\n }\n\n const text = await response.text()\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Text already exists: ${src}`)\n } else {\n this.cachedAssets.set(src, text)\n return text\n }\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n}\n\nexport const textLoader = new TextLoader()\n"]}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/asset/loaders/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,UAAW,SAAQ,MAAc;IAClB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;gBAC5C,OAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAElC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;gBAC9C,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,GAAW;QAC7B,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA","sourcesContent":["import { Loader } from './loader'\n\nclass TextLoader extends Loader<string> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load text: ${src}`)\n return\n }\n\n const text = await response.text()\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Text already exists: ${src}`)\n } else {\n this.cachedAssets.set(src, text)\n return text\n }\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n\n override async load(src: string) {\n return await super.load(src)\n }\n}\n\nexport const textLoader = new TextLoader()\n"]}
@@ -2,37 +2,32 @@ import { Texture } from 'pixi.js';
2
2
  import { Loader } from './loader';
3
3
  class TextureLoader extends Loader {
4
4
  async doLoad(src) {
5
- const loadingPromise = new Promise((resolve) => {
6
- const image = new Image();
7
- image.crossOrigin = 'anonymous';
8
- image.src = src;
9
- image.onload = () => {
10
- this.loadingPromises.delete(src);
11
- if (!this.hasActiveRef(src)) {
12
- resolve(undefined);
13
- return;
14
- }
5
+ const loadingPromise = (async () => {
6
+ const response = await fetch(src);
7
+ if (!response.ok) {
8
+ console.error(`Failed to load texture: ${src}`);
9
+ return;
10
+ }
11
+ const blob = await response.blob();
12
+ const bitmap = await createImageBitmap(blob, { premultiplyAlpha: 'premultiply' });
13
+ this.loadingPromises.delete(src);
14
+ if (this.hasActiveRef(src)) {
15
15
  if (this.cachedAssets.has(src)) {
16
- console.error(`Texture already loaded: ${src}`);
17
- resolve(undefined);
18
- return;
16
+ console.error(`Texture already exists: ${src}`);
17
+ }
18
+ else {
19
+ const texture = Texture.from(bitmap);
20
+ texture.source.scaleMode = 'nearest';
21
+ this.cachedAssets.set(src, texture);
22
+ return texture;
19
23
  }
20
- const texture = Texture.from(image);
21
- texture.source.scaleMode = 'nearest';
22
- this.cachedAssets.set(src, texture);
23
- resolve(texture);
24
- };
25
- image.onerror = (error) => {
26
- this.loadingPromises.delete(src);
27
- console.error(`Failed to load texture: ${src}`, error);
28
- resolve(undefined);
29
- };
30
- });
24
+ }
25
+ })();
31
26
  this.loadingPromises.set(src, loadingPromise);
32
27
  return await loadingPromise;
33
28
  }
34
- cleanup(src, texture) {
35
- texture.destroy(true);
29
+ async load(src) {
30
+ return await super.load(src);
36
31
  }
37
32
  }
38
33
  export const textureLoader = new TextureLoader();
@@ -1 +1 @@
1
- {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../src/asset/loaders/texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,aAAc,SAAQ,MAAe;IACtB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,EAAE;YAClE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;YACzB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAA;YAC/B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;YAEf,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;gBAClB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEhC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,SAAS,CAAC,CAAA;oBAClB,OAAM;gBACR,CAAC;gBAED,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;oBAC/C,OAAO,CAAC,SAAS,CAAC,CAAA;oBAClB,OAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACnC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;gBACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBACnC,OAAO,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC,CAAA;YAED,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;gBACtD,OAAO,CAAC,SAAS,CAAC,CAAA;YACpB,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEkB,OAAO,CAAC,GAAW,EAAE,OAAgB;QACtD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAA","sourcesContent":["import { Texture } from 'pixi.js'\nimport { Loader } from './loader'\n\nclass TextureLoader extends Loader<Texture> {\n protected override async doLoad(src: string) {\n const loadingPromise = new Promise<Texture | undefined>((resolve) => {\n const image = new Image()\n image.crossOrigin = 'anonymous'\n image.src = src\n\n image.onload = () => {\n this.loadingPromises.delete(src)\n\n if (!this.hasActiveRef(src)) {\n resolve(undefined)\n return\n }\n\n if (this.cachedAssets.has(src)) {\n console.error(`Texture already loaded: ${src}`)\n resolve(undefined)\n return\n }\n\n const texture = Texture.from(image)\n texture.source.scaleMode = 'nearest'\n this.cachedAssets.set(src, texture)\n resolve(texture)\n }\n\n image.onerror = (error) => {\n this.loadingPromises.delete(src)\n console.error(`Failed to load texture: ${src}`, error)\n resolve(undefined)\n }\n })\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n\n protected override cleanup(src: string, texture: Texture) {\n texture.destroy(true)\n }\n}\n\nexport const textureLoader = new TextureLoader()\n"]}
1
+ {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../src/asset/loaders/texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,aAAc,SAAQ,MAAe;IACtB,KAAK,CAAC,MAAM,CAAC,GAAW;QACzC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAA;YAEjF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;gBACjD,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACpC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;oBACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;oBACnC,OAAO,OAAO,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,OAAO,MAAM,cAAc,CAAA;IAC7B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,GAAW;QAC7B,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAA","sourcesContent":["import { Texture } from 'pixi.js'\nimport { Loader } from './loader'\n\nclass TextureLoader extends Loader<Texture> {\n protected override async doLoad(src: string) {\n const loadingPromise = (async () => {\n const response = await fetch(src)\n if (!response.ok) {\n console.error(`Failed to load texture: ${src}`)\n return\n }\n\n const blob = await response.blob()\n const bitmap = await createImageBitmap(blob, { premultiplyAlpha: 'premultiply' })\n\n this.loadingPromises.delete(src)\n\n if (this.hasActiveRef(src)) {\n if (this.cachedAssets.has(src)) {\n console.error(`Texture already exists: ${src}`)\n } else {\n const texture = Texture.from(bitmap)\n texture.source.scaleMode = 'nearest'\n this.cachedAssets.set(src, texture)\n return texture\n }\n }\n })()\n\n this.loadingPromises.set(src, loadingPromise)\n return await loadingPromise\n }\n\n override async load(src: string) {\n return await super.load(src)\n }\n}\n\nexport const textureLoader = new TextureLoader()\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/asset/preload.ts"],"names":[],"mappings":"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","sourcesContent":["import { SpritesheetData } from 'pixi.js'\nimport { audioLoader } from './loaders/audio'\nimport { binaryLoader } from './loaders/binary'\nimport { bitmapFontLoader } from './loaders/bitmap-font'\nimport { fontFamilyLoader } from './loaders/font'\nimport { Loader } from './loaders/loader'\nimport { getCachedAtlasId, spritesheetLoader } from './loaders/spritesheet'\nimport { textLoader } from './loaders/text'\nimport { textureLoader } from './loaders/texture'\n\nexport type AssetSource = string | {\n src: string\n atlas: SpritesheetData\n} | {\n fnt: string\n src: string\n}\n\nconst loaderForPathMap: Array<{ check: (path: string) => boolean, loader: Loader<any> }> = [\n { check: (p) => p.endsWith('.json') || p.endsWith('.atlas'), loader: textLoader },\n { check: (p) => p.endsWith('.skel'), loader: binaryLoader },\n { check: (p) => /\\.(png|jpe?g|gif|webp)$/.test(p), loader: textureLoader },\n { check: (p) => /\\.(mp3|wav|ogg)$/.test(p), loader: audioLoader },\n { check: (p) => !p.includes('.'), loader: fontFamilyLoader }\n]\n\nfunction getLoaderForPath(path: string): Loader<any> | undefined {\n return loaderForPathMap.find(({ check }) => check(path))?.loader\n}\n\nasync function loadAsset(asset: AssetSource): Promise<void> {\n if (typeof asset === 'string') {\n const loader = getLoaderForPath(asset)\n if (!loader) {\n console.warn(`No loader found for asset: ${asset}`)\n return\n }\n await loader.load(asset)\n } else if ('atlas' in asset) {\n const id = getCachedAtlasId(asset.src, asset.atlas)\n await spritesheetLoader.load(id, asset.src, asset.atlas)\n } else if ('fnt' in asset) {\n await bitmapFontLoader.load(asset.fnt, asset.src)\n } else {\n console.warn(`Unknown asset type: ${asset}`)\n }\n}\n\nfunction releaseAsset(asset: AssetSource): void {\n if (typeof asset === 'string') {\n const loader = getLoaderForPath(asset)\n if (!loader) {\n console.warn(`No loader found for asset: ${asset}`)\n return\n }\n loader.release(asset)\n } else if ('atlas' in asset) {\n const id = getCachedAtlasId(asset.src, asset.atlas)\n spritesheetLoader.release(id)\n } else if ('fnt' in asset) {\n bitmapFontLoader.release(asset.fnt)\n } else {\n console.warn(`Unknown asset type: ${asset}`)\n }\n}\n\nexport async function preload(\n assets: AssetSource[],\n progressCallback?: (progress: number) => void\n): Promise<() => void> {\n let loaded = 0\n const total = assets.length\n\n await Promise.all(\n assets.map(async (asset) => {\n try {\n await loadAsset(asset)\n loaded++\n progressCallback?.(loaded / total)\n } catch (err) {\n console.error(`Failed to load asset:`, asset, err)\n }\n })\n )\n\n return () => assets.forEach(releaseAsset)\n}\n"]}
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/asset/preload.ts"],"names":[],"mappings":"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","sourcesContent":["import { Atlas } from '../types/atlas'\nimport { audioLoader } from './loaders/audio'\nimport { binaryLoader } from './loaders/binary'\nimport { bitmapFontLoader } from './loaders/bitmap-font'\nimport { fontFamilyLoader } from './loaders/font'\nimport { Loader } from './loaders/loader'\nimport { getCachedAtlasId, spritesheetLoader } from './loaders/spritesheet'\nimport { textLoader } from './loaders/text'\nimport { textureLoader } from './loaders/texture'\n\nexport type AssetSource = string\n | { src: string, atlas: Atlas }\n | { fnt: string, src: string }\n\nconst loaderForPathMap: Array<{ check: (path: string) => boolean, loader: Loader<any> }> = [\n { check: (p) => p.endsWith('.json') || p.endsWith('.atlas'), loader: textLoader },\n { check: (p) => p.endsWith('.skel'), loader: binaryLoader },\n { check: (p) => /\\.(png|jpe?g|gif|webp)$/.test(p), loader: textureLoader },\n { check: (p) => /\\.(mp3|wav|ogg)$/.test(p), loader: audioLoader },\n { check: (p) => !p.includes('.'), loader: fontFamilyLoader }\n]\n\nfunction getLoaderForPath(path: string): Loader<any> | undefined {\n return loaderForPathMap.find(({ check }) => check(path))?.loader\n}\n\nasync function loadAsset(asset: AssetSource): Promise<void> {\n if (typeof asset === 'string') {\n const loader = getLoaderForPath(asset)\n if (!loader) {\n console.warn(`No loader found for asset: ${asset}`)\n return\n }\n await loader.load(asset)\n } else if ('atlas' in asset) {\n const id = getCachedAtlasId(asset.src, asset.atlas)\n await spritesheetLoader.load(id, asset.src, asset.atlas)\n } else if ('fnt' in asset) {\n await bitmapFontLoader.load(asset.fnt, asset.src)\n } else {\n console.warn(`Unknown asset type: ${asset}`)\n }\n}\n\nfunction releaseAsset(asset: AssetSource): void {\n if (typeof asset === 'string') {\n const loader = getLoaderForPath(asset)\n if (!loader) {\n console.warn(`No loader found for asset: ${asset}`)\n return\n }\n loader.release(asset)\n } else if ('atlas' in asset) {\n const id = getCachedAtlasId(asset.src, asset.atlas)\n spritesheetLoader.release(id)\n } else if ('fnt' in asset) {\n bitmapFontLoader.release(asset.fnt)\n } else {\n console.warn(`Unknown asset type: ${asset}`)\n }\n}\n\nexport async function preload(\n assets: AssetSource[],\n progressCallback?: (progress: number) => void\n): Promise<() => void> {\n let loaded = 0\n const total = assets.length\n\n await Promise.all(\n assets.map(async (asset) => {\n try {\n await loadAsset(asset)\n loaded++\n progressCallback?.(loaded / total)\n } catch (err) {\n console.error(`Failed to load asset:`, asset, err)\n }\n })\n )\n\n return () => assets.forEach(releaseAsset)\n}\n"]}