@oidoid/void 0.1.0-8 → 0.1.0

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 (382) hide show
  1. package/dist/public/index.js +19 -15
  2. package/dist/public/index.js.map +4 -4
  3. package/dist/public/preload-atlas.webp +0 -0
  4. package/dist/public/void-v0.1.0+20251227.1060661.html +115 -0
  5. package/dist/schema/config-file.v0.json +86 -15
  6. package/dist/schema/level-file.v0.json +423 -0
  7. package/dist/src/audio.d.ts +1 -0
  8. package/dist/src/audio.d.ts.map +1 -0
  9. package/dist/src/demo/assets/manifest.json +2 -2
  10. package/dist/src/demo/assets/void.game.json +202 -0
  11. package/dist/src/demo/ents/cam.d.ts +6 -0
  12. package/dist/src/demo/ents/cam.d.ts.map +1 -0
  13. package/dist/src/demo/ents/cam.js +21 -0
  14. package/dist/src/demo/ents/cam.js.map +1 -0
  15. package/dist/src/demo/ents/clock.d.ts +10 -0
  16. package/dist/src/demo/ents/clock.d.ts.map +1 -0
  17. package/dist/src/demo/ents/clock.js +16 -0
  18. package/dist/src/demo/ents/clock.js.map +1 -0
  19. package/dist/src/demo/ents/draw.d.ts +6 -0
  20. package/dist/src/demo/ents/draw.d.ts.map +1 -0
  21. package/dist/src/demo/ents/draw.js +14 -0
  22. package/dist/src/demo/ents/draw.js.map +1 -0
  23. package/dist/src/demo/ents/ent.d.ts +6 -0
  24. package/dist/src/demo/ents/ent.d.ts.map +1 -0
  25. package/dist/src/demo/ents/ent.js +2 -0
  26. package/dist/src/demo/ents/ent.js.map +1 -0
  27. package/dist/src/demo/ents/loader.d.ts +6 -0
  28. package/dist/src/demo/ents/loader.d.ts.map +1 -0
  29. package/dist/src/demo/ents/loader.js +45 -0
  30. package/dist/src/demo/ents/loader.js.map +1 -0
  31. package/dist/src/demo/ents/render-toggle.d.ts +7 -0
  32. package/dist/src/demo/ents/render-toggle.d.ts.map +1 -0
  33. package/dist/src/demo/ents/render-toggle.js +8 -0
  34. package/dist/src/demo/ents/render-toggle.js.map +1 -0
  35. package/dist/src/demo/ents/tally.d.ts +8 -0
  36. package/dist/src/demo/ents/tally.d.ts.map +1 -0
  37. package/dist/src/demo/ents/tally.js +14 -0
  38. package/dist/src/demo/ents/tally.js.map +1 -0
  39. package/dist/src/demo/index.d.ts +1 -0
  40. package/dist/src/demo/index.d.ts.map +1 -0
  41. package/dist/src/demo/index.js +12 -3
  42. package/dist/src/demo/index.js.map +1 -1
  43. package/dist/src/demo/level/level-file.json +50 -0
  44. package/dist/src/demo/level/level-parser.d.ts +5 -0
  45. package/dist/src/demo/level/level-parser.d.ts.map +1 -0
  46. package/dist/src/demo/level/level-parser.js +21 -0
  47. package/dist/src/demo/level/level-parser.js.map +1 -0
  48. package/dist/src/demo/level/level-schema.d.ts +4 -0
  49. package/dist/src/demo/level/level-schema.d.ts.map +1 -0
  50. package/dist/src/demo/level/level-schema.js +2 -0
  51. package/dist/src/demo/level/level-schema.js.map +1 -0
  52. package/dist/src/demo/types/decl.d.ts +30 -0
  53. package/dist/src/demo/types/decl.d.ts.map +1 -0
  54. package/dist/src/demo/types/decl.js +2 -0
  55. package/dist/src/demo/types/decl.js.map +1 -0
  56. package/dist/src/demo/void.json +8 -4
  57. package/dist/src/ents/button.d.ts +14 -0
  58. package/dist/src/ents/button.d.ts.map +1 -0
  59. package/dist/src/ents/button.js +59 -0
  60. package/dist/src/ents/button.js.map +1 -0
  61. package/dist/src/ents/cam.d.ts +3 -0
  62. package/dist/src/ents/cam.d.ts.map +1 -0
  63. package/dist/src/ents/cam.js +2 -0
  64. package/dist/src/ents/cam.js.map +1 -0
  65. package/dist/src/ents/cursor.d.ts +20 -0
  66. package/dist/src/ents/cursor.d.ts.map +1 -0
  67. package/dist/src/ents/cursor.js +49 -0
  68. package/dist/src/ents/cursor.js.map +1 -0
  69. package/dist/src/ents/debug-input.d.ts +8 -0
  70. package/dist/src/ents/debug-input.d.ts.map +1 -0
  71. package/dist/src/ents/debug-input.js +25 -0
  72. package/dist/src/ents/debug-input.js.map +1 -0
  73. package/dist/src/ents/draw.d.ts +3 -0
  74. package/dist/src/ents/draw.d.ts.map +1 -0
  75. package/dist/src/ents/draw.js +2 -0
  76. package/dist/src/ents/draw.js.map +1 -0
  77. package/dist/src/ents/ent-query.d.ts +26 -0
  78. package/dist/src/ents/ent-query.d.ts.map +1 -0
  79. package/dist/src/ents/ent-query.js +10 -0
  80. package/dist/src/ents/ent-query.js.map +1 -0
  81. package/dist/src/ents/ent.d.ts +92 -6
  82. package/dist/src/ents/ent.d.ts.map +1 -0
  83. package/dist/src/ents/fps.d.ts +7 -0
  84. package/dist/src/ents/fps.d.ts.map +1 -0
  85. package/dist/src/ents/fps.js +14 -0
  86. package/dist/src/ents/fps.js.map +1 -0
  87. package/dist/src/ents/hud.d.ts +14 -0
  88. package/dist/src/ents/hud.d.ts.map +1 -0
  89. package/dist/src/ents/hud.js +38 -0
  90. package/dist/src/ents/hud.js.map +1 -0
  91. package/dist/src/ents/loader.d.ts +3 -0
  92. package/dist/src/ents/loader.d.ts.map +1 -0
  93. package/dist/src/ents/loader.js +2 -0
  94. package/dist/src/ents/loader.js.map +1 -0
  95. package/dist/src/ents/nine-patch.d.ts +17 -0
  96. package/dist/src/ents/nine-patch.d.ts.map +1 -0
  97. package/dist/src/ents/nine-patch.js +99 -0
  98. package/dist/src/ents/nine-patch.js.map +1 -0
  99. package/dist/src/ents/override.d.ts +8 -0
  100. package/dist/src/ents/override.d.ts.map +1 -0
  101. package/dist/src/ents/override.js +8 -0
  102. package/dist/src/ents/override.js.map +1 -0
  103. package/dist/src/ents/sprite.d.ts +8 -0
  104. package/dist/src/ents/sprite.d.ts.map +1 -0
  105. package/dist/src/ents/sprite.js +10 -0
  106. package/dist/src/ents/sprite.js.map +1 -0
  107. package/dist/src/ents/sys.d.ts +14 -0
  108. package/dist/src/ents/sys.d.ts.map +1 -0
  109. package/dist/src/ents/sys.js +2 -0
  110. package/dist/src/ents/sys.js.map +1 -0
  111. package/dist/src/ents/text.d.ts +21 -0
  112. package/dist/src/ents/text.d.ts.map +1 -0
  113. package/dist/src/ents/text.js +118 -0
  114. package/dist/src/ents/text.js.map +1 -0
  115. package/dist/src/ents/zoo.d.ts +18 -11
  116. package/dist/src/ents/zoo.d.ts.map +1 -0
  117. package/dist/src/ents/zoo.js +75 -15
  118. package/dist/src/ents/zoo.js.map +1 -1
  119. package/dist/src/graphics/atlas-parser.d.ts +3 -1
  120. package/dist/src/graphics/atlas-parser.d.ts.map +1 -0
  121. package/dist/src/graphics/atlas-parser.js.map +1 -1
  122. package/dist/src/graphics/atlas.d.ts +9 -15
  123. package/dist/src/graphics/atlas.d.ts.map +1 -0
  124. package/dist/src/graphics/cam.d.ts +13 -10
  125. package/dist/src/graphics/cam.d.ts.map +1 -0
  126. package/dist/src/graphics/cam.js +23 -17
  127. package/dist/src/graphics/cam.js.map +1 -1
  128. package/dist/src/graphics/gl.d.ts +1 -8
  129. package/dist/src/graphics/gl.d.ts.map +1 -0
  130. package/dist/src/graphics/gl.js +0 -1
  131. package/dist/src/graphics/gl.js.map +1 -1
  132. package/dist/src/graphics/layer.d.ts +21 -17
  133. package/dist/src/graphics/layer.d.ts.map +1 -0
  134. package/dist/src/graphics/layer.js +23 -18
  135. package/dist/src/graphics/layer.js.map +1 -1
  136. package/dist/src/graphics/pixel-ratio-observer.d.ts +8 -0
  137. package/dist/src/graphics/pixel-ratio-observer.d.ts.map +1 -0
  138. package/dist/src/graphics/pixel-ratio-observer.js +23 -0
  139. package/dist/src/graphics/pixel-ratio-observer.js.map +1 -0
  140. package/dist/src/graphics/render-mode.d.ts +2 -0
  141. package/dist/src/graphics/render-mode.d.ts.map +1 -0
  142. package/dist/src/graphics/render-mode.js +2 -0
  143. package/dist/src/graphics/render-mode.js.map +1 -0
  144. package/dist/src/graphics/renderer.d.ts +9 -4
  145. package/dist/src/graphics/renderer.d.ts.map +1 -0
  146. package/dist/src/graphics/renderer.js +30 -13
  147. package/dist/src/graphics/renderer.js.map +1 -1
  148. package/dist/src/graphics/sprite-frag.glsl.d.ts +1 -0
  149. package/dist/src/graphics/sprite-frag.glsl.d.ts.map +1 -0
  150. package/dist/src/graphics/sprite-frag.glsl.js +3 -4
  151. package/dist/src/graphics/sprite-frag.glsl.js.map +1 -1
  152. package/dist/src/graphics/sprite-vert.glsl.d.ts +1 -0
  153. package/dist/src/graphics/sprite-vert.glsl.d.ts.map +1 -0
  154. package/dist/src/graphics/sprite-vert.glsl.js +9 -7
  155. package/dist/src/graphics/sprite-vert.glsl.js.map +1 -1
  156. package/dist/src/graphics/sprite.d.ts +54 -16
  157. package/dist/src/graphics/sprite.d.ts.map +1 -0
  158. package/dist/src/graphics/sprite.js +109 -32
  159. package/dist/src/graphics/sprite.js.map +1 -1
  160. package/dist/src/index.d.ts +31 -6
  161. package/dist/src/index.d.ts.map +1 -0
  162. package/dist/src/index.js +33 -9
  163. package/dist/src/index.js.map +1 -1
  164. package/dist/src/input/context-menu.d.ts +1 -1
  165. package/dist/src/input/context-menu.d.ts.map +1 -0
  166. package/dist/src/input/context-menu.js +0 -1
  167. package/dist/src/input/context-menu.js.map +1 -1
  168. package/dist/src/input/gamepad.d.ts +1 -1
  169. package/dist/src/input/gamepad.d.ts.map +1 -0
  170. package/dist/src/input/gamepad.js +0 -1
  171. package/dist/src/input/gamepad.js.map +1 -1
  172. package/dist/src/input/input.d.ts +30 -23
  173. package/dist/src/input/input.d.ts.map +1 -0
  174. package/dist/src/input/input.js +53 -31
  175. package/dist/src/input/input.js.map +1 -1
  176. package/dist/src/input/keyboard.d.ts +1 -0
  177. package/dist/src/input/keyboard.d.ts.map +1 -0
  178. package/dist/src/input/pointer.d.ts +1 -0
  179. package/dist/src/input/pointer.d.ts.map +1 -0
  180. package/dist/src/input/pointer.js +11 -8
  181. package/dist/src/input/pointer.js.map +1 -1
  182. package/dist/src/input/wheel.d.ts +6 -1
  183. package/dist/src/input/wheel.d.ts.map +1 -0
  184. package/dist/src/input/wheel.js +5 -1
  185. package/dist/src/input/wheel.js.map +1 -1
  186. package/dist/src/level/level-parser.d.ts +26 -0
  187. package/dist/src/level/level-parser.d.ts.map +1 -0
  188. package/dist/src/level/level-parser.js +258 -0
  189. package/dist/src/level/level-parser.js.map +1 -0
  190. package/dist/src/level/level-schema-json.d.ts +5 -0
  191. package/dist/src/level/level-schema-json.d.ts.map +1 -0
  192. package/dist/src/level/level-schema-json.js +2 -0
  193. package/dist/src/level/level-schema-json.js.map +1 -0
  194. package/dist/src/level/level-schema.d.ts +87 -0
  195. package/dist/src/level/level-schema.d.ts.map +1 -0
  196. package/dist/src/level/level-schema.js +2 -0
  197. package/dist/src/level/level-schema.js.map +1 -0
  198. package/dist/src/level/level.d.ts +8 -0
  199. package/dist/src/level/level.d.ts.map +1 -0
  200. package/dist/src/level/level.js +2 -0
  201. package/dist/src/level/level.js.map +1 -0
  202. package/dist/src/looper.d.ts +1 -0
  203. package/dist/src/looper.d.ts.map +1 -0
  204. package/dist/src/looper.js +5 -2
  205. package/dist/src/looper.js.map +1 -1
  206. package/dist/src/mem/pool-map.d.ts +6 -0
  207. package/dist/src/mem/pool-map.d.ts.map +1 -0
  208. package/dist/src/mem/pool-map.js +2 -0
  209. package/dist/src/mem/pool-map.js.map +1 -0
  210. package/dist/src/mem/pool.d.ts +5 -1
  211. package/dist/src/mem/pool.d.ts.map +1 -0
  212. package/dist/src/mem/pool.js +22 -21
  213. package/dist/src/mem/pool.js.map +1 -1
  214. package/dist/src/mem/sprite-pool.d.ts +12 -0
  215. package/dist/src/mem/sprite-pool.d.ts.map +1 -0
  216. package/dist/src/mem/sprite-pool.js +11 -0
  217. package/dist/src/mem/sprite-pool.js.map +1 -0
  218. package/dist/src/random/random.d.ts +1 -0
  219. package/dist/src/random/random.d.ts.map +1 -0
  220. package/dist/src/storage/local-storage.d.ts +2 -1
  221. package/dist/src/storage/local-storage.d.ts.map +1 -0
  222. package/dist/src/storage/local-storage.js.map +1 -1
  223. package/dist/src/text/font.d.ts +5 -3
  224. package/dist/src/text/font.d.ts.map +1 -0
  225. package/dist/src/text/font.js +8 -5
  226. package/dist/src/text/font.js.map +1 -1
  227. package/dist/src/text/mem-prop-5x6.json +20 -5
  228. package/dist/src/text/text-layout.d.ts +16 -5
  229. package/dist/src/text/text-layout.d.ts.map +1 -0
  230. package/dist/src/text/text-layout.js +46 -28
  231. package/dist/src/text/text-layout.js.map +1 -1
  232. package/dist/src/types/bundle.d.ts +10 -0
  233. package/dist/src/types/bundle.d.ts.map +1 -0
  234. package/dist/src/types/bundle.js +2 -0
  235. package/dist/src/types/bundle.js.map +1 -0
  236. package/dist/src/types/game-config.d.ts +27 -0
  237. package/dist/src/types/game-config.d.ts.map +1 -0
  238. package/dist/src/types/game-config.js +2 -0
  239. package/dist/src/types/game-config.js.map +1 -0
  240. package/dist/src/types/geo.d.ts +9 -2
  241. package/dist/src/types/geo.d.ts.map +1 -0
  242. package/dist/src/types/geo.js +16 -0
  243. package/dist/src/types/geo.js.map +1 -1
  244. package/dist/src/types/json.d.ts +1 -0
  245. package/dist/src/types/json.d.ts.map +1 -0
  246. package/dist/src/types/time.d.ts +13 -2
  247. package/dist/src/types/time.d.ts.map +1 -0
  248. package/dist/src/types/time.js +10 -0
  249. package/dist/src/types/time.js.map +1 -1
  250. package/dist/src/utils/async-util.d.ts +1 -0
  251. package/dist/src/utils/async-util.d.ts.map +1 -0
  252. package/dist/src/utils/async-util.js +2 -0
  253. package/dist/src/utils/async-util.js.map +1 -1
  254. package/dist/src/utils/canvas-util.d.ts +3 -1
  255. package/dist/src/utils/canvas-util.d.ts.map +1 -0
  256. package/dist/src/utils/canvas-util.js +7 -3
  257. package/dist/src/utils/canvas-util.js.map +1 -1
  258. package/dist/src/utils/color-util.d.ts +6 -0
  259. package/dist/src/utils/color-util.d.ts.map +1 -0
  260. package/dist/src/utils/color-util.js +12 -0
  261. package/dist/src/utils/color-util.js.map +1 -1
  262. package/dist/src/utils/debug.d.ts +1 -0
  263. package/dist/src/utils/debug.d.ts.map +1 -0
  264. package/dist/src/utils/debug.js +4 -4
  265. package/dist/src/utils/debug.js.map +1 -1
  266. package/dist/src/utils/delay-interval.d.ts +1 -0
  267. package/dist/src/utils/delay-interval.d.ts.map +1 -0
  268. package/dist/src/utils/dom-util.d.ts +3 -2
  269. package/dist/src/utils/dom-util.d.ts.map +1 -0
  270. package/dist/src/utils/dom-util.js +16 -12
  271. package/dist/src/utils/dom-util.js.map +1 -1
  272. package/dist/src/utils/fetch-util.d.ts +2 -1
  273. package/dist/src/utils/fetch-util.d.ts.map +1 -0
  274. package/dist/src/utils/fetch-util.js +2 -2
  275. package/dist/src/utils/math.d.ts +1 -0
  276. package/dist/src/utils/math.d.ts.map +1 -0
  277. package/dist/src/utils/math.js +1 -1
  278. package/dist/src/utils/math.js.map +1 -1
  279. package/dist/src/utils/obj-util.d.ts +7 -0
  280. package/dist/src/utils/obj-util.d.ts.map +1 -0
  281. package/dist/src/utils/obj-util.js +8 -0
  282. package/dist/src/utils/obj-util.js.map +1 -0
  283. package/dist/src/utils/str-util.d.ts +2 -0
  284. package/dist/src/utils/str-util.d.ts.map +1 -0
  285. package/dist/src/utils/str-util.js +6 -0
  286. package/dist/src/utils/str-util.js.map +1 -0
  287. package/dist/src/utils/vibrate.d.ts +1 -0
  288. package/dist/src/utils/vibrate.d.ts.map +1 -0
  289. package/dist/src/void.d.ts +42 -30
  290. package/dist/src/void.d.ts.map +1 -0
  291. package/dist/src/void.js +78 -34
  292. package/dist/src/void.js.map +1 -1
  293. package/dist/tools/atlas-pack/aseprite-json.d.ts +5 -0
  294. package/dist/tools/atlas-pack/aseprite-json.d.ts.map +1 -0
  295. package/dist/tools/atlas-pack/aseprite-json.js +2 -0
  296. package/dist/tools/atlas-pack/aseprite-json.js.map +1 -0
  297. package/dist/tools/atlas-pack/aseprite.d.ts +58 -31
  298. package/dist/tools/atlas-pack/aseprite.d.ts.map +1 -0
  299. package/dist/tools/atlas-pack/aseprite.js +1 -1
  300. package/dist/tools/atlas-pack/aseprite.js.map +1 -1
  301. package/dist/tools/atlas-pack/atlas-json-parser.d.ts +11 -10
  302. package/dist/tools/atlas-pack/atlas-json-parser.d.ts.map +1 -0
  303. package/dist/tools/atlas-pack/atlas-json-parser.js +14 -14
  304. package/dist/tools/atlas-pack/atlas-json-parser.js.map +1 -1
  305. package/dist/tools/atlas-pack/atlas-pack.d.ts +4 -2
  306. package/dist/tools/atlas-pack/atlas-pack.d.ts.map +1 -0
  307. package/dist/tools/atlas-pack/atlas-pack.js +1 -6
  308. package/dist/tools/atlas-pack/atlas-pack.js.map +1 -1
  309. package/dist/tools/bundle/bundle.d.ts +3 -3
  310. package/dist/tools/bundle/bundle.d.ts.map +1 -0
  311. package/dist/tools/bundle/bundle.js +32 -7
  312. package/dist/tools/bundle/bundle.js.map +1 -1
  313. package/dist/tools/bundle/html-plugin.d.ts +1 -0
  314. package/dist/tools/bundle/html-plugin.d.ts.map +1 -0
  315. package/dist/tools/bundle/html-plugin.js +5 -20
  316. package/dist/tools/bundle/html-plugin.js.map +1 -1
  317. package/dist/tools/tsconfig-base.json +1 -1
  318. package/dist/tools/tsconfig.json +1 -2
  319. package/dist/{schema → tools/types}/config-file.d.ts +21 -9
  320. package/dist/tools/types/config-file.d.ts.map +1 -0
  321. package/dist/{schema → tools/types}/config-file.js +18 -5
  322. package/dist/tools/types/config-file.js.map +1 -0
  323. package/dist/tools/types/config.d.ts +10 -9
  324. package/dist/tools/types/config.d.ts.map +1 -0
  325. package/dist/tools/types/config.js +23 -5
  326. package/dist/tools/types/config.js.map +1 -1
  327. package/dist/tools/types/package-json.d.ts +3 -2
  328. package/dist/tools/types/package-json.d.ts.map +1 -0
  329. package/dist/tools/utils/argv.d.ts +3 -0
  330. package/dist/tools/utils/argv.d.ts.map +1 -0
  331. package/dist/tools/utils/argv.js +1 -1
  332. package/dist/tools/utils/argv.js.map +1 -1
  333. package/dist/tools/utils/exec.d.ts +2 -1
  334. package/dist/tools/utils/exec.d.ts.map +1 -0
  335. package/dist/tools/utils/exec.js.map +1 -1
  336. package/dist/tools/utils/file-util.d.ts +1 -0
  337. package/dist/tools/utils/file-util.d.ts.map +1 -0
  338. package/dist/tools/utils/html-parser.d.ts +1 -0
  339. package/dist/tools/utils/html-parser.d.ts.map +1 -0
  340. package/dist/tools/void.d.ts +1 -0
  341. package/dist/tools/void.d.ts.map +1 -0
  342. package/dist/tools/void.js +3 -16
  343. package/dist/tools/void.js.map +1 -1
  344. package/package.json +13 -14
  345. package/readme.md +63 -1
  346. package/dist/package.json +0 -65
  347. package/dist/public/void-v0.1.0-8+20251022.b364155.html +0 -111
  348. package/dist/schema/config-file.js.map +0 -1
  349. package/dist/src/demo/assets/preload-atlas.json +0 -193
  350. package/dist/src/demo/ents/clock-ent.d.ts +0 -11
  351. package/dist/src/demo/ents/clock-ent.js +0 -26
  352. package/dist/src/demo/ents/clock-ent.js.map +0 -1
  353. package/dist/src/demo/ents/render-toggle-ent.d.ts +0 -12
  354. package/dist/src/demo/ents/render-toggle-ent.js +0 -41
  355. package/dist/src/demo/ents/render-toggle-ent.js.map +0 -1
  356. package/dist/src/demo/ents/work-counter-ent.d.ts +0 -10
  357. package/dist/src/demo/ents/work-counter-ent.js +0 -20
  358. package/dist/src/demo/ents/work-counter-ent.js.map +0 -1
  359. package/dist/src/demo/game.d.ts +0 -12
  360. package/dist/src/demo/game.js +0 -135
  361. package/dist/src/demo/game.js.map +0 -1
  362. package/dist/src/demo/types/tag.d.ts +0 -2
  363. package/dist/src/demo/types/tag.js +0 -2
  364. package/dist/src/demo/types/tag.js.map +0 -1
  365. package/dist/src/ents/button-ent.d.ts +0 -39
  366. package/dist/src/ents/button-ent.js +0 -128
  367. package/dist/src/ents/button-ent.js.map +0 -1
  368. package/dist/src/ents/cursor-ent.d.ts +0 -18
  369. package/dist/src/ents/cursor-ent.js +0 -63
  370. package/dist/src/ents/cursor-ent.js.map +0 -1
  371. package/dist/src/ents/follow-cam-ent.d.ts +0 -25
  372. package/dist/src/ents/follow-cam-ent.js +0 -87
  373. package/dist/src/ents/follow-cam-ent.js.map +0 -1
  374. package/dist/src/ents/nine-patch-ent.d.ts +0 -43
  375. package/dist/src/ents/nine-patch-ent.js +0 -143
  376. package/dist/src/ents/nine-patch-ent.js.map +0 -1
  377. package/dist/src/ents/text-ent.d.ts +0 -23
  378. package/dist/src/ents/text-ent.js +0 -109
  379. package/dist/src/ents/text-ent.js.map +0 -1
  380. package/dist/src/types/void-version.d.ts +0 -7
  381. package/dist/src/types/void-version.js +0 -2
  382. package/dist/src/types/void-version.js.map +0 -1
@@ -1,3 +1,4 @@
1
1
  export declare function fetchAudio(url: string): Promise<ArrayBuffer>;
2
- export declare function fetchImage(url: string): Promise<HTMLImageElement>;
2
+ export declare function fetchImage(uri: string): Promise<HTMLImageElement>;
3
3
  export declare function loadImage(img: HTMLImageElement): Promise<HTMLImageElement>;
4
+ //# sourceMappingURL=fetch-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-util.d.ts","sourceRoot":"","sources":["../../../src/utils/fetch-util.ts"],"names":[],"mappings":"AAAA,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASlE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKjE;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAM3B"}
@@ -8,10 +8,10 @@ export async function fetchAudio(url) {
8
8
  throw Error(`bad fetch response type ${type} for ${url}`);
9
9
  return await rsp.arrayBuffer();
10
10
  }
11
- export function fetchImage(url) {
11
+ export function fetchImage(uri) {
12
12
  const img = new Image();
13
13
  const promise = loadImage(img);
14
- img.src = url;
14
+ img.src = uri;
15
15
  return promise;
16
16
  }
17
17
  export async function loadImage(img) {
@@ -4,3 +4,4 @@ export declare function closeTo(lhs: number, rhs: number, tolerance: number): bo
4
4
  export declare function lerp(start: number, end: number, ratio: number): number;
5
5
  /** returns positive modulo. */
6
6
  export declare function mod(dividend: number, divisor: number): number;
7
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../src/utils/math.ts"],"names":[],"mappings":"AACA,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5E;AAGD,8CAA8C;AAC9C,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAGD,+BAA+B;AAC/B,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -10,7 +10,7 @@ export function closeTo(lhs, rhs, tolerance) {
10
10
  export function lerp(start, end, ratio) {
11
11
  return start + (end - start) * ratio;
12
12
  }
13
- // to-do: test.
13
+ // to-do: test. mod(-1.3, 1) -> 0.7
14
14
  /** returns positive modulo. */
15
15
  export function mod(dividend, divisor) {
16
16
  return ((dividend % divisor) + divisor) % divisor;
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../../../src/utils/math.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,SAAiB;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAA;AACzC,CAAC;AAED,qBAAqB;AACrB,8CAA8C;AAC9C,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;IAC5D,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;AACtC,CAAC;AAED,eAAe;AACf,+BAA+B;AAC/B,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe;IACnD,OAAO,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../../src/utils/math.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,SAAiB;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAA;AACzC,CAAC;AAED,qBAAqB;AACrB,8CAA8C;AAC9C,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;IAC5D,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;AACtC,CAAC;AAED,mCAAmC;AACnC,+BAA+B;AAC/B,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe;IACnD,OAAO,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAA;AACnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function assertRecord<T extends {
2
+ [k: PropertyKey]: unknown;
3
+ }>(v: unknown): asserts v is T;
4
+ export declare function isRecord<T extends {
5
+ [k: PropertyKey]: unknown;
6
+ }>(v: unknown): v is T;
7
+ //# sourceMappingURL=obj-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj-util.d.ts","sourceRoot":"","sources":["../../../src/utils/obj-util.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAC,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;CAAC,EAChE,CAAC,EAAE,OAAO,GACT,OAAO,CAAC,CAAC,IAAI,CAAC,CAEhB;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS;IAAC,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;CAAC,EAC5D,CAAC,EAAE,OAAO,GACT,CAAC,IAAI,CAAC,CAER"}
@@ -0,0 +1,8 @@
1
+ export function assertRecord(v) {
2
+ if (!isRecord(v))
3
+ throw new Error('not a record');
4
+ }
5
+ export function isRecord(v) {
6
+ return v != null && !Array.isArray(v) && typeof v === 'object';
7
+ }
8
+ //# sourceMappingURL=obj-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj-util.js","sourceRoot":"","sources":["../../../src/utils/obj-util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAC1B,CAAU;IAEV,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,CAAU;IAEV,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAA;AAChE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function uncapitalize<Str extends string>(str: Str): Uncapitalize<Str>;
2
+ //# sourceMappingURL=str-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str-util.d.ts","sourceRoot":"","sources":["../../../src/utils/str-util.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAG5E"}
@@ -0,0 +1,6 @@
1
+ export function uncapitalize(str) {
2
+ if (!str[0])
3
+ return str;
4
+ return `${str[0].toLocaleLowerCase()}${str.slice(1)}`;
5
+ }
6
+ //# sourceMappingURL=str-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str-util.js","sourceRoot":"","sources":["../../../src/utils/str-util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAqB,GAAQ;IACvD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,GAAwB,CAAA;IAC5C,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAuB,CAAA;AAC5E,CAAC"}
@@ -1 +1,2 @@
1
1
  export declare function vibrate(...pattern: number[]): void;
2
+ //# sourceMappingURL=vibrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vibrate.d.ts","sourceRoot":"","sources":["../../../src/utils/vibrate.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAElD"}
@@ -1,48 +1,60 @@
1
+ import type { LoaderEnt } from './ents/loader.ts';
2
+ import type { Sys } from './ents/sys.ts';
1
3
  import { Zoo } from './ents/zoo.ts';
2
- import type { Atlas, AtlasJSON, TagFormat } from './graphics/atlas.ts';
4
+ import type { Atlas } from './graphics/atlas.ts';
3
5
  import { Cam } from './graphics/cam.ts';
4
6
  import { Renderer } from './graphics/renderer.ts';
5
- import { Sprite } from './graphics/sprite.ts';
6
- import { type DefaultButton, Input } from './input/input.ts';
7
+ import type { Sprite } from './graphics/sprite.ts';
8
+ import { Input } from './input/input.ts';
7
9
  import { Looper } from './looper.ts';
8
- import { Pool, type PoolOpts } from './mem/pool.ts';
9
- import type { WH } from './types/geo.ts';
10
- import type { Millis } from './types/time.ts';
11
- export type VoidOpts<out Tag extends TagFormat> = {
12
- preloadAtlas?: {
13
- image: HTMLImageElement;
14
- json: AtlasJSON;
15
- } | undefined;
16
- backgroundRGBA?: number;
17
- canvas?: HTMLCanvasElement | undefined;
18
- minWH?: WH | undefined;
19
- input?: 'Custom' | 'Default' | undefined;
20
- mode?: 'Int' | 'Fraction' | undefined;
21
- poll?: {
22
- delay?: (() => Millis) | undefined;
23
- period: Millis;
24
- } | undefined;
25
- sprites?: Partial<Omit<PoolOpts<Sprite<Tag>>, 'alloc' | 'allocBytes'>> | undefined;
10
+ import type { PoolOpts } from './mem/pool.ts';
11
+ import type { PoolMap } from './mem/pool-map.ts';
12
+ import { Random } from './random/random.ts';
13
+ import type { GameConfig } from './types/game-config.ts';
14
+ import type { Millis, Secs } from './types/time.ts';
15
+ export type VoidOpts = {
16
+ canvas?: HTMLCanvasElement | null;
17
+ config: GameConfig;
18
+ description?: string;
19
+ loader: LoaderEnt;
20
+ loaderSys: Sys;
21
+ preloadAtlas?: HTMLImageElement | null;
22
+ random?: Random;
23
+ sprites?: Partial<Omit<PoolOpts<Sprite>, 'alloc' | 'allocBytes'>>;
26
24
  };
27
- export declare class Void<out Tag extends TagFormat, Button extends string = DefaultButton> {
25
+ export declare class Void {
28
26
  #private;
29
27
  readonly cam: Cam;
30
28
  readonly canvas: HTMLCanvasElement;
31
- readonly input: Input<Button>;
29
+ readonly input: Input;
30
+ readonly looper: Looper;
31
+ readonly pool: PoolMap;
32
32
  readonly preload: Atlas;
33
+ readonly random: Random;
33
34
  readonly renderer: Renderer;
34
- readonly sprites: Pool<Sprite<Tag>>;
35
- readonly zoo: Zoo<Tag>;
36
- readonly looper: Looper;
37
- constructor(opts: Readonly<VoidOpts<Tag>>);
38
- onAllocSprite(pool: Pool<Sprite<Tag>>): Sprite<Tag>;
35
+ /** delta since frame request. */
36
+ readonly tick: {
37
+ ms: Millis;
38
+ s: Secs;
39
+ };
40
+ readonly zoo: Zoo;
41
+ constructor(opts: Readonly<VoidOpts>);
42
+ alloc(k?: keyof PoolMap): Sprite;
43
+ get backgroundRGBA(): number;
44
+ /**
45
+ * invalid state only impacts drawing in the current frame not requesting a
46
+ * new frame.
47
+ */
48
+ get invalid(): boolean;
49
+ set invalid(invalid: true);
39
50
  onEvent(): void;
40
51
  /** update input, update canvas, update cam, update world, then render. */
41
52
  onFrame(millis: Millis): void;
42
- onLoop(millis: Millis): void;
43
53
  onPoll(): void;
44
54
  onResize(): void;
55
+ setPoller(period: Millis, delay?: () => Millis): void;
45
56
  register(op: 'add' | 'remove'): Promise<void>;
46
- requestFrame(force?: 'Force' | undefined): void;
57
+ requestFrame(force?: 'Force'): void;
47
58
  [Symbol.asyncDispose](): Promise<void>;
48
59
  }
60
+ //# sourceMappingURL=void.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"void.d.ts","sourceRoot":"","sources":["../../src/void.ts"],"names":[],"mappings":"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"}
package/dist/src/void.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import { Zoo } from "./ents/zoo.js";
2
2
  import { parseAtlas } from "./graphics/atlas-parser.js";
3
3
  import { Cam } from "./graphics/cam.js";
4
+ import { PixelRatioObserver } from "./graphics/pixel-ratio-observer.js";
4
5
  import { Renderer } from "./graphics/renderer.js";
5
- import { drawableBytes, Sprite } from "./graphics/sprite.js";
6
6
  import { Input } from "./input/input.js";
7
7
  import { Looper } from "./looper.js";
8
- import { Pool } from "./mem/pool.js";
8
+ import { SpritePool } from "./mem/sprite-pool.js";
9
+ import { Random } from "./random/random.js";
9
10
  import { initCanvas } from "./utils/canvas-util.js";
11
+ import { parseComputedColor } from "./utils/color-util.js";
10
12
  import { DelayInterval } from "./utils/delay-interval.js";
11
13
  import { initBody, initMetaViewport } from "./utils/dom-util.js";
12
14
  import { loadImage } from "./utils/fetch-util.js";
@@ -14,82 +16,124 @@ export class Void {
14
16
  cam = new Cam();
15
17
  canvas;
16
18
  input;
19
+ looper = new Looper();
20
+ pool;
17
21
  preload;
22
+ random;
18
23
  renderer;
19
- sprites;
24
+ /** delta since frame request. */
25
+ tick = { ms: 0, s: 0 };
20
26
  zoo = new Zoo();
21
- looper = new Looper();
22
- #poll;
27
+ #backgroundRGBA;
28
+ #invalid = false;
29
+ #pixelRatioObserver = new PixelRatioObserver();
30
+ #poller;
23
31
  #preloadAtlasImage;
24
- // may trigger an initial force update.
32
+ #registered = false;
33
+ /** may trigger an initial force update. */
25
34
  #resizeObserver = new ResizeObserver(() => this.onResize());
26
35
  constructor(opts) {
27
- if (opts.poll != null)
28
- this.#poll = new DelayInterval(opts.poll.delay ?? (() => 0), opts.poll.period, () => this.onPoll());
29
- initMetaViewport();
30
- this.canvas = initCanvas(opts.canvas, opts.mode ?? 'Int');
31
- initBody(this.canvas, opts.backgroundRGBA ?? 0x000000ff);
32
- if (opts.minWH)
33
- this.cam.minWH = opts.minWH;
34
- this.cam.mode = opts.mode ?? 'Int';
36
+ initMetaViewport(opts.description);
37
+ this.canvas = initCanvas(opts.canvas, opts.config.init.mode);
38
+ if (!this.canvas.parentElement)
39
+ throw Error('no canvas parent');
40
+ this.#backgroundRGBA =
41
+ opts.config.init.background ??
42
+ parseComputedColor(getComputedStyle(this.canvas.parentElement).backgroundColor);
43
+ if (!opts.canvas)
44
+ initBody(this.#backgroundRGBA);
45
+ this.cam.minWH = opts.config.init.minWH;
46
+ this.cam.mode = opts.config.init.mode;
35
47
  this.cam.update(this.canvas);
48
+ this.random = opts.random ?? new Random(Date.now());
36
49
  this.input = new Input(this.cam, this.canvas);
37
- if (opts.input !== 'Custom')
50
+ if (opts.config.init.input !== 'Custom')
38
51
  this.input.mapDefault();
39
52
  this.input.onEvent = () => this.onEvent();
40
- if (opts.preloadAtlas)
41
- this.#preloadAtlasImage = opts.preloadAtlas.image;
42
- this.preload = opts.preloadAtlas
43
- ? parseAtlas(opts.preloadAtlas.json)
53
+ this.#pixelRatioObserver.onChange = () => this.onResize();
54
+ this.#preloadAtlasImage = opts.preloadAtlas ?? undefined;
55
+ if (!!this.#preloadAtlasImage !== !!opts.config.atlas)
56
+ throw Error('atlas misconfigured');
57
+ this.preload = opts.config.atlas
58
+ ? parseAtlas(opts.config.atlas)
44
59
  : { anim: {}, celXYWH: [], tags: [] };
45
60
  this.renderer = new Renderer(this.preload ?? {}, this.canvas, this.looper);
46
- this.sprites = new Pool({
47
- alloc: pool => this.onAllocSprite(pool),
48
- allocBytes: drawableBytes,
49
- minPages: opts.sprites?.minPages ?? 3,
50
- pageBlocks: opts.sprites?.pageBlocks ?? 1000
51
- });
61
+ this.pool = {
62
+ default: SpritePool({
63
+ atlas: this.preload,
64
+ looper: this.looper,
65
+ minPages: opts.sprites?.minPages ?? 3,
66
+ pageBlocks: opts.sprites?.pageBlocks ?? 1000
67
+ })
68
+ };
52
69
  this.looper.onFrame = millis => this.onFrame(millis);
70
+ this.zoo.addSystem({ loader: opts.loaderSys });
71
+ this.zoo.add(opts.loader);
72
+ }
73
+ alloc(k = 'default') {
74
+ return this.pool[k].alloc();
53
75
  }
54
- onAllocSprite(pool) {
55
- return new Sprite(pool, 0, this.preload, this.looper);
76
+ get backgroundRGBA() {
77
+ return this.#backgroundRGBA;
78
+ }
79
+ /**
80
+ * invalid state only impacts drawing in the current frame not requesting a
81
+ * new frame.
82
+ */
83
+ get invalid() {
84
+ return (this.zoo.invalid ||
85
+ this.cam.invalid ||
86
+ this.renderer.invalid ||
87
+ this.#invalid);
88
+ }
89
+ set invalid(invalid) {
90
+ this.#invalid = invalid;
56
91
  }
57
92
  onEvent() {
58
93
  this.requestFrame('Force');
59
94
  }
60
95
  /** update input, update canvas, update cam, update world, then render. */
61
96
  onFrame(millis) {
97
+ this.tick.ms = millis;
98
+ this.tick.s = (millis / 1000);
62
99
  if (document.hidden)
63
100
  return;
64
101
  this.input.update(millis);
65
- this.requestFrame(); // request frame before in case loop cancels.
66
- this.onLoop(millis);
102
+ this.requestFrame(); // request frame before in case update cancels.
103
+ this.#invalid = false;
104
+ this.zoo.update(this);
67
105
  this.cam.postupdate();
68
106
  }
69
- // biome-ignore lint/correctness/noUnusedFunctionParameters:;
70
- onLoop(millis) { }
71
107
  onPoll() {
72
108
  this.requestFrame('Force');
73
109
  }
74
110
  onResize() {
75
111
  this.requestFrame('Force'); // force cam reeval.
76
112
  }
113
+ // to-do: clear.
114
+ setPoller(period, delay) {
115
+ if (this.#poller)
116
+ this.#poller.register('remove');
117
+ this.#poller = new DelayInterval(delay ?? (() => 0), period, () => this.onPoll());
118
+ if (this.#registered)
119
+ this.#poller.register('add');
120
+ }
77
121
  async register(op) {
78
122
  this.input.register(op);
79
123
  this.renderer.register(op);
80
124
  this.looper.register(op);
81
- if (!this.canvas.parentElement)
82
- throw Error('no canvas parent');
83
125
  if (op === 'add')
84
126
  this.#resizeObserver.observe(this.canvas.parentElement);
85
127
  else
86
128
  this.#resizeObserver.unobserve(this.canvas.parentElement);
129
+ this.#pixelRatioObserver.register(op);
87
130
  if (op === 'add')
88
131
  this.looper.requestFrame();
89
- this.#poll?.register(op);
132
+ this.#poller?.register(op);
90
133
  if (this.#preloadAtlasImage)
91
134
  await loadImage(this.#preloadAtlasImage);
92
135
  this.renderer.load(this.#preloadAtlasImage);
136
+ this.#registered = op === 'add';
93
137
  }
94
138
  requestFrame(force) {
95
139
  if (force || this.renderer.always || this.input.anyOn || this.input.gamepad)
@@ -1 +1 @@
1
- {"version":3,"file":"void.js","sourceRoot":"","sources":["../../src/void.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"void.js","sourceRoot":"","sources":["../../src/void.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare module '*.aseprite.json' {
2
+ const json: import('./aseprite.ts').Aseprite;
3
+ export default json;
4
+ }
5
+ //# sourceMappingURL=aseprite-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aseprite-json.d.ts","sourceRoot":"","sources":["../../../tools/atlas-pack/aseprite-json.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,MAAM,IAAI,EAAE,OAAO,eAAe,EAAE,QAAQ,CAAA;IAC5C,eAAe,IAAI,CAAA;CACpB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=aseprite-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aseprite-json.js","sourceRoot":"","sources":["../../../tools/atlas-pack/aseprite-json.ts"],"names":[],"mappings":""}
@@ -1,47 +1,73 @@
1
- import type { TagFormat } from '../../src/graphics/atlas.ts';
2
- import type { Box, WH } from '../../src/types/geo.ts';
1
+ import type * as V from '../../src/index.ts';
3
2
  /** https://github.com/aseprite/aseprite/blob/master/docs/ase-file-specs.md */
4
3
  export type Aseprite = {
5
- meta: AsepriteMeta;
6
- frames: AsepriteFrameMap;
4
+ meta: Meta;
5
+ frames: FrameMap;
7
6
  };
8
- export type AsepriteFrameMap = {
9
- [tag: AsepriteFrameTag]: AsepriteFrame;
7
+ /** eg, `#000000ff`. */
8
+ export type Color = `#${string}`;
9
+ export type FrameMap = {
10
+ [tag: FrameTag]: Frame;
10
11
  };
11
- export type AsepriteMeta = {
12
- /** `--list-tags`. */
13
- frameTags: AsepriteTagSpan[];
14
- size: WH;
15
- /** `--list-slices`. */
16
- slices: AsepriteSlice[];
12
+ export type Key = {
13
+ /** slice dimensions. */
14
+ bounds: V.Box;
15
+ /** inclusive `Frame` start offset. */
16
+ frame: number;
17
+ };
18
+ export type Meta = {
19
+ /** e.g., `http://www.aseprite.org/`. */
20
+ app: string;
21
+ /** e.g., `1.3.15.4-x64`. */
22
+ version: string;
23
+ /** output basename. e.g., `atlas.png`. */
24
+ image: string;
25
+ /** e.g., `RGBA8888` or `I8`. */
26
+ format: string;
27
+ /** output dimensions (`--sheet-pack`). */
28
+ size: V.WH;
29
+ /** e.g., `1`. */
30
+ scale: string;
31
+ /** all `TagSpan`s for all files packed (`--list-tags`). */
32
+ frameTags: TagSpan[];
33
+ /** all slices for all files packed (`--list-slices`). */
34
+ slices: Slice[];
17
35
  };
18
36
  /** `--filename-format='{title}--{tag}--{frame}'`. */
19
- export type AsepriteFrameTag = `${TagFormat}--${bigint}`;
20
- export type AsepriteFrame = {
21
- /** positive animation length in milliseconds. */
37
+ export type FrameTag = `${V.Tag}--${bigint}`;
38
+ /** a cel. */
39
+ export type Frame = {
40
+ /** animation length in milliseconds. */
22
41
  duration: number;
23
- /** bounds including padding. */
24
- frame: Box;
42
+ /** bounds including padding (`--inner-padding=n`). */
43
+ frame: V.Box;
44
+ rotated: boolean;
45
+ trimmed: boolean;
46
+ /** bounds not including padding. x and y are always zero. */
47
+ spriteSourceSize: V.Box;
25
48
  /** WH without padding. */
26
- sourceSize: WH;
49
+ sourceSize: V.WH;
50
+ };
51
+ export type Slice = {
52
+ /** `#ff0000ff` is hitbox, `#00ff00ff` is hurtbox, `#0000ffff` is both. */
53
+ color: Color;
54
+ name: V.Tag;
55
+ keys: Key[];
27
56
  };
28
- export type AsepriteTagSpan = {
29
- direction: AsepriteDirection | string;
30
- name: TagFormat | string;
57
+ /** a label and animation behavior. references `Frame`s to form an animation. */
58
+ export type TagSpan = {
59
+ color: Color;
60
+ name: V.Tag;
61
+ /** inclusive starting Frame index. */
31
62
  from: number;
32
63
  /** inclusive ending index, possibly equal to from. */
33
64
  to: number;
65
+ direction: Direction;
66
+ /** number of times to replay the animation. undefined is infinite. */
67
+ repeat?: `${bigint}`;
34
68
  };
35
- export type AsepriteSlice = {
36
- /** '#ff0000ff' is hitbox, '#00ff00ff' is hurtbox, '#0000ffff is both. */
37
- color: string;
38
- name: TagFormat | string;
39
- keys: {
40
- bounds: Box;
41
- }[];
42
- };
43
- export type AsepriteDirection = (typeof AsepriteDirection)[keyof typeof AsepriteDirection];
44
- export declare const AsepriteDirection: {
69
+ export type Direction = (typeof Direction)[keyof typeof Direction];
70
+ export declare const Direction: {
45
71
  /** animate from start to end; when looping, return to start. */
46
72
  readonly Forward: "forward";
47
73
  /** animate from end to start; when looping, return to end. */
@@ -56,3 +82,4 @@ export declare const AsepriteDirection: {
56
82
  /** like pingpong but start from end - 1 or start, whichever is greater. */
57
83
  readonly PingPongReverse: "pingpong_reverse";
58
84
  };
85
+ //# sourceMappingURL=aseprite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aseprite.d.ts","sourceRoot":"","sources":["../../../tools/atlas-pack/aseprite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,oBAAoB,CAAA;AAE5C,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAC,CAAA;AAErD,uBAAuB;AACvB,MAAM,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAA;AAEhC,MAAM,MAAM,QAAQ,GAAG;IAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAAA;CAAC,CAAA;AAE/C,MAAM,MAAM,GAAG,GAAG;IAChB,wBAAwB;IACxB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAA;IACb,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IACV,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,yDAAyD;IACzD,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,qDAAqD;AACrD,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,CAAA;AAE5C,aAAa;AACb,MAAM,MAAM,KAAK,GAAG;IAClB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,KAAK,EAAE,CAAC,CAAC,GAAG,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAA;IACvB,0BAA0B;IAC1B,UAAU,EAAE,CAAC,CAAC,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,0EAA0E;IAC1E,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAA;IACX,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ,CAAA;AAED,gFAAgF;AAChF,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAA;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,SAAS,CAAA;IACpB,sEAAsE;IACtE,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAClE,eAAO,MAAM,SAAS;IACpB,gEAAgE;;IAEhE,8DAA8D;;IAE9D;;;;;OAKG;;IAEH,2EAA2E;;CAEnE,CAAA"}
@@ -1,4 +1,4 @@
1
- export const AsepriteDirection = {
1
+ export const Direction = {
2
2
  /** animate from start to end; when looping, return to start. */
3
3
  Forward: 'forward',
4
4
  /** animate from end to start; when looping, return to end. */
@@ -1 +1 @@
1
- {"version":3,"file":"aseprite.js","sourceRoot":"","sources":["../../../tools/atlas-pack/aseprite.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gEAAgE;IAChE,OAAO,EAAE,SAAS;IAClB,8DAA8D;IAC9D,OAAO,EAAE,SAAS;IAClB;;;;;OAKG;IACH,QAAQ,EAAE,UAAU;IACpB,2EAA2E;IAC3E,eAAe,EAAE,kBAAkB;CAC3B,CAAA"}
1
+ {"version":3,"file":"aseprite.js","sourceRoot":"","sources":["../../../tools/atlas-pack/aseprite.ts"],"names":[],"mappings":"AA0EA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,gEAAgE;IAChE,OAAO,EAAE,SAAS;IAClB,8DAA8D;IAC9D,OAAO,EAAE,SAAS;IAClB;;;;;OAKG;IACH,QAAQ,EAAE,UAAU;IACpB,2EAA2E;IAC3E,eAAe,EAAE,kBAAkB;CAC3B,CAAA"}
@@ -1,9 +1,9 @@
1
- import { type Anim, type AtlasJSON } from '../../src/graphics/atlas.ts';
2
- import { type Box, type XY } from '../../src/types/geo.ts';
3
- import { type Aseprite, type AsepriteFrame, type AsepriteFrameMap, type AsepriteSlice, type AsepriteTagSpan } from './aseprite.ts';
4
- export declare function parseAtlasJSON(ase: Readonly<Aseprite>): AtlasJSON;
1
+ import * as V from '../../src/index.ts';
2
+ import * as ase from './aseprite.ts';
3
+ import './aseprite-json.ts';
4
+ export declare function parseAtlasJSON(json: Readonly<ase.Aseprite>): V.AtlasJSON;
5
5
  /** @internal */
6
- export declare function parseAnim(id: number, span: Readonly<AsepriteTagSpan>, map: Readonly<AsepriteFrameMap>, slices: readonly Readonly<AsepriteSlice>[]): Anim;
6
+ export declare function parseAnim(id: number, span: Readonly<ase.TagSpan>, map: Readonly<ase.FrameMap>, slices: readonly Readonly<ase.Slice>[]): V.Anim;
7
7
  /**
8
8
  * every frame is guaranteed to be present for at least `celMillis`. cels are
9
9
  * duplicated until cel duration is at least met. cels are unpacked until a full
@@ -11,11 +11,12 @@ export declare function parseAnim(id: number, span: Readonly<AsepriteTagSpan>, m
11
11
  * or uneven periods.
12
12
  * @internal
13
13
  */
14
- export declare function parseAnimFrames(span: AsepriteTagSpan, map: AsepriteFrameMap): AsepriteFrame[];
14
+ export declare function parseAnimFrames(span: ase.TagSpan, map: ase.FrameMap): ase.Frame[];
15
15
  /** @internal */
16
- export declare function parseCel(frame: Readonly<AsepriteFrame>): XY;
16
+ export declare function parseCel(frame: Readonly<ase.Frame>): V.XY;
17
17
  /** @internal */
18
- export declare function parseHitboxes(span: Readonly<AsepriteTagSpan>, slices: readonly Readonly<AsepriteSlice>[]): {
19
- hitbox: Box | undefined;
20
- hurtbox: Box | undefined;
18
+ export declare function parseHitboxes(span: Readonly<ase.TagSpan>, slices: readonly Readonly<ase.Slice>[]): {
19
+ hitbox: V.Box | undefined;
20
+ hurtbox: V.Box | undefined;
21
21
  };
22
+ //# sourceMappingURL=atlas-json-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlas-json-parser.d.ts","sourceRoot":"","sources":["../../../tools/atlas-pack/atlas-json-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,oBAAoB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,eAAe,CAAA;AAEpC,OAAO,oBAAoB,CAAA;AAE3B,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAexE;AAED,gBAAgB;AAChB,wBAAgB,SAAS,CACvB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC3B,MAAM,EAAE,SAAS,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GACrC,CAAC,CAAC,IAAI,CAYR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,GAAG,CAAC,OAAO,EACjB,GAAG,EAAE,GAAG,CAAC,QAAQ,GAChB,GAAG,CAAC,KAAK,EAAE,CAuCb;AAED,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAKzD;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAC3B,MAAM,EAAE,SAAS,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GACrC;IAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,SAAS,CAAA;CAAC,CAiCzD"}