@oidoid/void 0.1.0-4 → 0.1.0-6

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 (300) hide show
  1. package/dist/meta.json +1 -0
  2. package/dist/package.json +66 -0
  3. package/dist/public/favicon/favicon16.png +0 -0
  4. package/dist/public/favicon/favicon192.png +0 -0
  5. package/dist/public/favicon/favicon32.png +0 -0
  6. package/dist/public/favicon/favicon48.png +0 -0
  7. package/dist/public/favicon/favicon512.png +0 -0
  8. package/dist/public/favicon/favicon64.png +0 -0
  9. package/dist/public/index.html +23 -0
  10. package/dist/public/index.js +3844 -0
  11. package/dist/public/index.js.map +7 -0
  12. package/dist/public/manifest.json +1 -0
  13. package/dist/public/preload-atlas.png +0 -0
  14. package/dist/public/void-v0.1.0-4.html +111 -0
  15. package/dist/public/void-v0.1.0-5.html +111 -0
  16. package/dist/public/void-v0.1.0-6.html +111 -0
  17. package/dist/schema/config-file.d.ts +32 -0
  18. package/dist/schema/config-file.js +41 -0
  19. package/dist/schema/config-file.js.map +1 -0
  20. package/dist/schema/config-file.v0.json +68 -0
  21. package/dist/src/audio.d.ts +7 -0
  22. package/dist/src/audio.js +25 -0
  23. package/dist/src/audio.js.map +1 -0
  24. package/dist/src/demo/assets/manifest.json +46 -0
  25. package/dist/src/demo/assets/preload-atlas.json +193 -0
  26. package/dist/src/demo/ents/clock-ent.d.ts +10 -0
  27. package/dist/src/demo/ents/clock-ent.js +26 -0
  28. package/dist/src/demo/ents/clock-ent.js.map +1 -0
  29. package/dist/src/demo/ents/render-toggle-ent.d.ts +10 -0
  30. package/dist/src/demo/ents/render-toggle-ent.js +38 -0
  31. package/dist/src/demo/ents/render-toggle-ent.js.map +1 -0
  32. package/dist/src/demo/ents/work-counter-ent.d.ts +10 -0
  33. package/dist/src/demo/ents/work-counter-ent.js +24 -0
  34. package/dist/src/demo/ents/work-counter-ent.js.map +1 -0
  35. package/dist/src/demo/game.d.ts +13 -0
  36. package/dist/src/demo/game.js +155 -0
  37. package/dist/src/demo/game.js.map +1 -0
  38. package/dist/src/demo/index.d.ts +1 -0
  39. package/dist/src/demo/index.js +8 -0
  40. package/dist/src/demo/index.js.map +1 -0
  41. package/dist/src/demo/tsconfig.json +15 -0
  42. package/dist/src/demo/types/tag.d.ts +2 -0
  43. package/dist/src/demo/types/tag.js +2 -0
  44. package/dist/src/demo/types/tag.js.map +1 -0
  45. package/dist/src/demo/void.json +11 -0
  46. package/dist/src/ents/button-ent.d.ts +38 -0
  47. package/dist/src/ents/button-ent.js +124 -0
  48. package/dist/src/ents/button-ent.js.map +1 -0
  49. package/dist/src/ents/cursor-ent.d.ts +18 -0
  50. package/dist/src/ents/cursor-ent.js +58 -0
  51. package/dist/src/ents/cursor-ent.js.map +1 -0
  52. package/dist/src/ents/ent.d.ts +7 -0
  53. package/dist/src/ents/ent.js +2 -0
  54. package/dist/src/ents/ent.js.map +1 -0
  55. package/dist/src/ents/follow-cam-ent.d.ts +25 -0
  56. package/dist/src/ents/follow-cam-ent.js +87 -0
  57. package/dist/src/ents/follow-cam-ent.js.map +1 -0
  58. package/dist/src/ents/nine-patch-ent.d.ts +43 -0
  59. package/dist/src/ents/nine-patch-ent.js +143 -0
  60. package/dist/src/ents/nine-patch-ent.js.map +1 -0
  61. package/dist/src/ents/text-ent.d.ts +23 -0
  62. package/dist/src/ents/text-ent.js +109 -0
  63. package/dist/src/ents/text-ent.js.map +1 -0
  64. package/dist/src/ents/zoo.d.ts +16 -0
  65. package/dist/src/ents/zoo.js +38 -0
  66. package/dist/src/ents/zoo.js.map +1 -0
  67. package/dist/src/graphics/atlas-parser.d.ts +4 -0
  68. package/dist/src/graphics/atlas-parser.js +27 -0
  69. package/dist/src/graphics/atlas-parser.js.map +1 -0
  70. package/dist/src/graphics/atlas.d.ts +49 -0
  71. package/dist/src/graphics/atlas.js +7 -0
  72. package/dist/src/graphics/atlas.js.map +1 -0
  73. package/dist/src/graphics/cam.d.ts +89 -0
  74. package/dist/src/graphics/cam.js +211 -0
  75. package/dist/src/graphics/cam.js.map +1 -0
  76. package/dist/src/graphics/gl.d.ts +24 -0
  77. package/dist/src/graphics/gl.js +70 -0
  78. package/dist/src/graphics/gl.js.map +1 -0
  79. package/dist/src/graphics/layer.d.ts +21 -0
  80. package/dist/src/graphics/layer.js +23 -0
  81. package/dist/src/graphics/layer.js.map +1 -0
  82. package/dist/src/graphics/renderer.d.ts +22 -0
  83. package/dist/src/graphics/renderer.js +168 -0
  84. package/dist/src/graphics/renderer.js.map +1 -0
  85. package/dist/src/graphics/sprite-frag.glsl.d.ts +1 -0
  86. package/dist/src/graphics/sprite-frag.glsl.js +35 -0
  87. package/dist/src/graphics/sprite-frag.glsl.js.map +1 -0
  88. package/dist/src/graphics/sprite-vert.glsl.d.ts +1 -0
  89. package/dist/src/graphics/sprite-vert.glsl.js +68 -0
  90. package/dist/src/graphics/sprite-vert.glsl.js.map +1 -0
  91. package/dist/src/graphics/sprite.d.ts +108 -0
  92. package/dist/src/graphics/sprite.js +301 -0
  93. package/dist/src/graphics/sprite.js.map +1 -0
  94. package/dist/src/index.d.ts +30 -0
  95. package/dist/src/index.js +33 -0
  96. package/dist/src/index.js.map +1 -0
  97. package/dist/src/input/context-menu.d.ts +8 -0
  98. package/dist/src/input/context-menu.js +25 -0
  99. package/dist/src/input/context-menu.js.map +1 -0
  100. package/dist/src/input/gamepad.d.ts +18 -0
  101. package/dist/src/input/gamepad.js +49 -0
  102. package/dist/src/input/gamepad.js.map +1 -0
  103. package/dist/src/input/input.d.ts +148 -0
  104. package/dist/src/input/input.js +383 -0
  105. package/dist/src/input/input.js.map +1 -0
  106. package/dist/src/input/keyboard.d.ts +17 -0
  107. package/dist/src/input/keyboard.js +46 -0
  108. package/dist/src/input/keyboard.js.map +1 -0
  109. package/dist/src/input/pointer.d.ts +53 -0
  110. package/dist/src/input/pointer.js +162 -0
  111. package/dist/src/input/pointer.js.map +1 -0
  112. package/dist/src/input/wheel.d.ts +12 -0
  113. package/dist/src/input/wheel.js +30 -0
  114. package/dist/src/input/wheel.js.map +1 -0
  115. package/dist/src/looper.d.ts +15 -0
  116. package/dist/src/looper.js +48 -0
  117. package/dist/src/looper.js.map +1 -0
  118. package/dist/src/mem/pool.d.ts +31 -0
  119. package/dist/src/mem/pool.js +98 -0
  120. package/dist/src/mem/pool.js.map +1 -0
  121. package/dist/src/pixel-ratio-observer.d.ts +10 -0
  122. package/dist/src/pixel-ratio-observer.js +26 -0
  123. package/dist/src/pixel-ratio-observer.js.map +1 -0
  124. package/dist/src/random/random.d.ts +8 -0
  125. package/dist/src/random/random.js +23 -0
  126. package/dist/src/random/random.js.map +1 -0
  127. package/dist/src/storage/local-storage.d.ts +3 -0
  128. package/dist/src/storage/local-storage.js +11 -0
  129. package/dist/src/storage/local-storage.js.map +1 -0
  130. package/dist/src/text/font.d.ts +6 -0
  131. package/dist/src/text/font.js +20 -0
  132. package/dist/src/text/font.js.map +1 -0
  133. package/dist/src/text/mem-prop-5x6.json +573 -0
  134. package/dist/src/text/text-layout.d.ts +19 -0
  135. package/dist/src/text/text-layout.js +85 -0
  136. package/dist/src/text/text-layout.js.map +1 -0
  137. package/dist/src/tsconfig.json +15 -0
  138. package/dist/src/types/geo.d.ts +38 -0
  139. package/dist/src/types/geo.js +61 -0
  140. package/dist/src/types/geo.js.map +1 -0
  141. package/dist/src/types/json.d.ts +31 -0
  142. package/dist/src/types/json.js +2 -0
  143. package/dist/src/types/json.js.map +1 -0
  144. package/dist/src/types/time.d.ts +19 -0
  145. package/dist/src/types/time.js +10 -0
  146. package/dist/src/types/time.js.map +1 -0
  147. package/dist/src/types/void-version.d.ts +9 -0
  148. package/dist/src/types/void-version.js +2 -0
  149. package/dist/src/types/void-version.js.map +1 -0
  150. package/dist/src/utils/async-util.d.ts +11 -0
  151. package/dist/src/utils/async-util.js +36 -0
  152. package/dist/src/utils/async-util.js.map +1 -0
  153. package/dist/src/utils/canvas-util.d.ts +7 -0
  154. package/dist/src/utils/canvas-util.js +128 -0
  155. package/dist/src/utils/canvas-util.js.map +1 -0
  156. package/dist/src/utils/color-util.d.ts +1 -0
  157. package/dist/src/utils/color-util.js +4 -0
  158. package/dist/src/utils/color-util.js.map +1 -0
  159. package/dist/src/utils/debug.d.ts +17 -0
  160. package/dist/src/utils/debug.js +34 -0
  161. package/dist/src/utils/debug.js.map +1 -0
  162. package/dist/src/utils/dom-util.d.ts +3 -0
  163. package/dist/src/utils/dom-util.js +29 -0
  164. package/dist/src/utils/dom-util.js.map +1 -0
  165. package/dist/src/utils/fetch-util.d.ts +3 -0
  166. package/dist/src/utils/fetch-util.js +24 -0
  167. package/dist/src/utils/fetch-util.js.map +1 -0
  168. package/dist/src/utils/math.d.ts +6 -0
  169. package/dist/src/utils/math.js +18 -0
  170. package/dist/src/utils/math.js.map +1 -0
  171. package/dist/src/utils/vibrate.d.ts +1 -0
  172. package/dist/src/utils/vibrate.js +4 -0
  173. package/dist/src/utils/vibrate.js.map +1 -0
  174. package/dist/src/void.d.ts +43 -0
  175. package/dist/src/void.js +95 -0
  176. package/dist/src/void.js.map +1 -0
  177. package/dist/tools/atlas-pack/aseprite.d.ts +58 -0
  178. package/dist/tools/atlas-pack/aseprite.js +16 -0
  179. package/dist/tools/atlas-pack/aseprite.js.map +1 -0
  180. package/dist/tools/atlas-pack/atlas-json-parser.d.ts +21 -0
  181. package/dist/tools/atlas-pack/atlas-json-parser.js +116 -0
  182. package/dist/tools/atlas-pack/atlas-json-parser.js.map +1 -0
  183. package/dist/tools/atlas-pack/atlas-pack.d.ts +2 -0
  184. package/dist/tools/atlas-pack/atlas-pack.js +17 -0
  185. package/dist/tools/atlas-pack/atlas-pack.js.map +1 -0
  186. package/dist/tools/bundle/bundle.d.ts +3 -0
  187. package/dist/tools/bundle/bundle.js +48 -0
  188. package/dist/tools/bundle/bundle.js.map +1 -0
  189. package/dist/tools/bundle/html-plugin.d.ts +3 -0
  190. package/dist/tools/bundle/html-plugin.js +88 -0
  191. package/dist/tools/bundle/html-plugin.js.map +1 -0
  192. package/dist/tools/tsconfig-base.json +45 -0
  193. package/dist/tools/tsconfig.json +21 -0
  194. package/dist/tools/types/config.d.ts +20 -0
  195. package/dist/tools/types/config.js +22 -0
  196. package/dist/tools/types/config.js.map +1 -0
  197. package/dist/tools/utils/argv.d.ts +12 -0
  198. package/dist/tools/utils/argv.js +19 -0
  199. package/dist/tools/utils/argv.js.map +1 -0
  200. package/dist/tools/utils/exec.d.ts +3 -0
  201. package/dist/tools/utils/exec.js +15 -0
  202. package/dist/tools/utils/exec.js.map +1 -0
  203. package/dist/tools/utils/file-util.d.ts +1 -0
  204. package/dist/tools/utils/file-util.js +13 -0
  205. package/dist/tools/utils/file-util.js.map +1 -0
  206. package/dist/tools/utils/html-parser.d.ts +1 -0
  207. package/dist/tools/utils/html-parser.js +10 -0
  208. package/dist/tools/utils/html-parser.js.map +1 -0
  209. package/dist/tools/void.d.ts +17 -0
  210. package/dist/tools/void.js +30 -0
  211. package/dist/tools/void.js.map +1 -0
  212. package/package.json +31 -41
  213. package/readme.md +1 -1
  214. package/schema/config-file.test.ts +55 -0
  215. package/schema/config-file.ts +69 -0
  216. package/schema/config-file.v0.json +68 -0
  217. package/tools/atlas-pack/aseprite.ts +60 -0
  218. package/tools/atlas-pack/atlas-json-parser.test.ts +780 -0
  219. package/tools/atlas-pack/atlas-json-parser.ts +159 -0
  220. package/tools/atlas-pack/atlas-pack.ts +38 -0
  221. package/tools/bundle/bundle.ts +65 -0
  222. package/tools/bundle/html-plugin.ts +135 -0
  223. package/tools/types/config.ts +43 -0
  224. package/tools/utils/argv.test.ts +41 -0
  225. package/tools/utils/argv.ts +29 -0
  226. package/tools/utils/exec.ts +22 -0
  227. package/tools/utils/file-util.ts +11 -0
  228. package/tools/utils/html-parser.ts +9 -0
  229. package/tools/void.ts +54 -0
  230. package/dist/atlas/anim.d.ts +0 -30
  231. package/dist/atlas/anim.js +0 -16
  232. package/dist/atlas/anim.js.map +0 -1
  233. package/dist/atlas/aseprite.d.ts +0 -37
  234. package/dist/atlas/aseprite.js +0 -2
  235. package/dist/atlas/aseprite.js.map +0 -1
  236. package/dist/atlas/atlas-parser.d.ts +0 -52
  237. package/dist/atlas/atlas-parser.js +0 -109
  238. package/dist/atlas/atlas-parser.js.map +0 -1
  239. package/dist/atlas/atlas.d.ts +0 -4
  240. package/dist/atlas/atlas.js +0 -2
  241. package/dist/atlas/atlas.js.map +0 -1
  242. package/dist/audio/synth.d.ts +0 -4
  243. package/dist/audio/synth.js +0 -21
  244. package/dist/audio/synth.js.map +0 -1
  245. package/dist/graphics/bitmap.d.ts +0 -14
  246. package/dist/graphics/bitmap.js +0 -14
  247. package/dist/graphics/bitmap.js.map +0 -1
  248. package/dist/graphics/cam.d.ts +0 -16
  249. package/dist/graphics/cam.js +0 -42
  250. package/dist/graphics/cam.js.map +0 -1
  251. package/dist/graphics/frag.glsl.d.ts +0 -1
  252. package/dist/graphics/frag.glsl.js +0 -15
  253. package/dist/graphics/frag.glsl.js.map +0 -1
  254. package/dist/graphics/frame-listener.d.ts +0 -16
  255. package/dist/graphics/frame-listener.js +0 -83
  256. package/dist/graphics/frame-listener.js.map +0 -1
  257. package/dist/graphics/renderer.d.ts +0 -12
  258. package/dist/graphics/renderer.js +0 -184
  259. package/dist/graphics/renderer.js.map +0 -1
  260. package/dist/graphics/vert.glsl.d.ts +0 -1
  261. package/dist/graphics/vert.glsl.js +0 -46
  262. package/dist/graphics/vert.glsl.js.map +0 -1
  263. package/dist/index.d.ts +0 -31
  264. package/dist/index.js +0 -79
  265. package/dist/index.js.map +0 -1
  266. package/dist/input/gamepad-poller.d.ts +0 -8
  267. package/dist/input/gamepad-poller.js +0 -38
  268. package/dist/input/gamepad-poller.js.map +0 -1
  269. package/dist/input/input.d.ts +0 -44
  270. package/dist/input/input.js +0 -175
  271. package/dist/input/input.js.map +0 -1
  272. package/dist/input/keyboard-poller.d.ts +0 -7
  273. package/dist/input/keyboard-poller.js +0 -30
  274. package/dist/input/keyboard-poller.js.map +0 -1
  275. package/dist/input/pointer-poller.d.ts +0 -12
  276. package/dist/input/pointer-poller.js +0 -67
  277. package/dist/input/pointer-poller.js.map +0 -1
  278. package/dist/sprite/sprite.d.ts +0 -51
  279. package/dist/sprite/sprite.js +0 -161
  280. package/dist/sprite/sprite.js.map +0 -1
  281. package/dist/storage/json-storage.d.ts +0 -4
  282. package/dist/storage/json-storage.js +0 -13
  283. package/dist/storage/json-storage.js.map +0 -1
  284. package/dist/test/tsconfig.json +0 -14
  285. package/dist/text/font.d.ts +0 -6
  286. package/dist/text/font.js +0 -18
  287. package/dist/text/font.js.map +0 -1
  288. package/dist/text/text-layout.d.ts +0 -11
  289. package/dist/text/text-layout.js +0 -73
  290. package/dist/text/text-layout.js.map +0 -1
  291. package/dist/tsconfig.json +0 -13
  292. package/dist/types/2d.d.ts +0 -9
  293. package/dist/types/2d.js +0 -2
  294. package/dist/types/2d.js.map +0 -1
  295. package/dist/void.js +0 -60
  296. package/dist/void.js.map +0 -7
  297. package/dist/void.meta.json +0 -289
  298. package/src/atlas/anim.js +0 -17
  299. package/tools/atlas-parser.js +0 -120
  300. package/tools/void.js +0 -143
@@ -1,37 +0,0 @@
1
- import type { Box, WH } from '../types/2d.js';
2
- /** https://github.com/aseprite/aseprite/blob/master/docs/ase-file-specs.md */
3
- export type Aseprite = {
4
- readonly meta: AsepriteMeta;
5
- readonly frames: AsepriteFrameMap;
6
- };
7
- export type AsepriteFrameMap = {
8
- readonly [key: AsepriteAnimTagFrame]: AsepriteFrame;
9
- };
10
- export type AsepriteMeta = {
11
- /** `--list-tags`. */
12
- readonly frameTags: readonly AsepriteTagSpan[];
13
- /** `--list-slices`. */
14
- readonly slices: readonly AsepriteSlice[];
15
- };
16
- /** `--filename-format='{title}--{tag}--{frame}'`. */
17
- export type AsepriteAnimTagFrame = `${AnimTag}--${bigint}`;
18
- /** `--tagname-format={title}--{tag}`. */
19
- export type AnimTag = `${string}--${string}`;
20
- export type AsepriteFrame = {
21
- /** Bounds including padding. */
22
- readonly frame: Readonly<Box>;
23
- /** WH without padding. */
24
- readonly sourceSize: Readonly<WH>;
25
- };
26
- export type AsepriteTagSpan = {
27
- readonly name: AnimTag | string;
28
- readonly from: number;
29
- /** The inclusive ending index, possibly equal to from. */
30
- readonly to: number;
31
- };
32
- export type AsepriteSlice = {
33
- readonly name: AnimTag | string;
34
- readonly keys: readonly {
35
- readonly bounds: Readonly<Box>;
36
- }[];
37
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=aseprite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aseprite.js","sourceRoot":"","sources":["../../src/atlas/aseprite.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- /**
2
- * @arg {Aseprite} ase
3
- * @return {Atlas}
4
- */
5
- export function parseAtlas(ase: Aseprite): Atlas;
6
- /**
7
- * @arg {number} id
8
- * @arg {AsepriteTagSpan} span
9
- * @arg {AsepriteFrameMap} map
10
- * @arg {readonly AsepriteSlice[]} slices
11
- * @return {Anim}
12
- * @internal
13
- */
14
- export function parseAnim(id: number, span: AsepriteTagSpan, map: AsepriteFrameMap, slices: readonly AsepriteSlice[]): Anim;
15
- /**
16
- * @arg {AsepriteFrame} frame
17
- * @return {Readonly<XY>}
18
- * @internal
19
- */
20
- export function parseCel(frame: AsepriteFrame): Readonly<XY>;
21
- /**
22
- * @arg {AsepriteTagSpan} span
23
- * @arg {readonly AsepriteSlice[]} slices
24
- * @return {Readonly<Box>}
25
- * @internal
26
- */
27
- export function parseHitbox(span: AsepriteTagSpan, slices: readonly AsepriteSlice[]): Readonly<Box>;
28
- /** @typedef {import('./aseprite.js').AnimTag} AnimTag */
29
- /** @typedef {import('./aseprite.js').Aseprite} Aseprite */
30
- /** @typedef {import('./aseprite.js').AsepriteAnimTagFrame} AsepriteAnimTagFrame */
31
- /** @typedef {import('./aseprite.js').AsepriteFrame} AsepriteFrame */
32
- /** @typedef {import('./aseprite.js').AsepriteFrameMap} AsepriteFrameMap */
33
- /** @typedef {import('./aseprite.js').AsepriteSlice} AsepriteSlice */
34
- /** @typedef {import('./aseprite.js').AsepriteTagSpan} AsepriteTagSpan */
35
- /** @typedef {import('./atlas.js').Anim} Anim */
36
- /** @typedef {import('./atlas.js').Atlas} Atlas */
37
- /** @typedef {import('../types/2d.js').Box} Box */
38
- /** @typedef {import('../types/2d.js').WH} WH */
39
- /** @typedef {import('../types/2d.js').XY} XY */
40
- export const maxAnimCels: 16;
41
- export type AnimTag = import('./aseprite.js').AnimTag;
42
- export type Aseprite = import('./aseprite.js').Aseprite;
43
- export type AsepriteAnimTagFrame = import('./aseprite.js').AsepriteAnimTagFrame;
44
- export type AsepriteFrame = import('./aseprite.js').AsepriteFrame;
45
- export type AsepriteFrameMap = import('./aseprite.js').AsepriteFrameMap;
46
- export type AsepriteSlice = import('./aseprite.js').AsepriteSlice;
47
- export type AsepriteTagSpan = import('./aseprite.js').AsepriteTagSpan;
48
- export type Anim = import('./atlas.js').Anim;
49
- export type Atlas = import('./atlas.js').Atlas;
50
- export type Box = import('../types/2d.js').Box;
51
- export type WH = import('../types/2d.js').WH;
52
- export type XY = import('../types/2d.js').XY;
@@ -1,109 +0,0 @@
1
- /** @typedef {import('./aseprite.js').AnimTag} AnimTag */
2
- /** @typedef {import('./aseprite.js').Aseprite} Aseprite */
3
- /** @typedef {import('./aseprite.js').AsepriteAnimTagFrame} AsepriteAnimTagFrame */
4
- /** @typedef {import('./aseprite.js').AsepriteFrame} AsepriteFrame */
5
- /** @typedef {import('./aseprite.js').AsepriteFrameMap} AsepriteFrameMap */
6
- /** @typedef {import('./aseprite.js').AsepriteSlice} AsepriteSlice */
7
- /** @typedef {import('./aseprite.js').AsepriteTagSpan} AsepriteTagSpan */
8
- /** @typedef {import('./atlas.js').Anim} Anim */
9
- /** @typedef {import('./atlas.js').Atlas} Atlas */
10
- /** @typedef {import('../types/2d.js').Box} Box */
11
- /** @typedef {import('../types/2d.js').WH} WH */
12
- /** @typedef {import('../types/2d.js').XY} XY */
13
- export const maxAnimCels = 16;
14
- /**
15
- * @arg {Aseprite} ase
16
- * @return {Atlas}
17
- */
18
- export function parseAtlas(ase) {
19
- const atlas = new Map();
20
- for (const span of ase.meta.frameTags) {
21
- const tag = parseTag(span.name);
22
- if (atlas.has(tag))
23
- throw Error(`duplicate tag "${tag}" in atlas`);
24
- const id = atlas.size * maxAnimCels;
25
- atlas.set(tag, parseAnim(id, span, ase.frames, ase.meta.slices));
26
- }
27
- const extraSlices = ase.meta.slices.filter(slice => !atlas.has(parseTag(slice.name)));
28
- if (extraSlices.length)
29
- throw Error(`unknown hitbox tags in atlas: ${extraSlices.map(slice => slice.name).join(', ')}`);
30
- return Object.fromEntries(atlas);
31
- }
32
- /**
33
- * @arg {number} id
34
- * @arg {AsepriteTagSpan} span
35
- * @arg {AsepriteFrameMap} map
36
- * @arg {readonly AsepriteSlice[]} slices
37
- * @return {Anim}
38
- * @internal
39
- */
40
- export function parseAnim(id, span, map, slices) {
41
- const frames = [...parseAnimFrames(span, map)];
42
- if (!frames[0])
43
- throw Error('animation missing frames');
44
- return {
45
- id,
46
- w: frames[0].sourceSize.w,
47
- h: frames[0].sourceSize.h,
48
- cels: frames.map(parseCel),
49
- hitbox: parseHitbox(span, slices),
50
- tag: parseTag(span.name)
51
- };
52
- }
53
- /**
54
- * @arg {AsepriteTagSpan} span
55
- * @arg {AsepriteFrameMap} map
56
- * @return {IterableIterator<AsepriteFrame>}
57
- */
58
- function* parseAnimFrames(span, map) {
59
- for (let i = span.from; i <= span.to && i - span.from < maxAnimCels; i++) {
60
- const animTagFrame = /** @type {AsepriteAnimTagFrame} */ (`${span.name}--${i}`);
61
- const frame = map[animTagFrame];
62
- if (!frame)
63
- throw Error(`missing frame "${animTagFrame}"`);
64
- yield frame;
65
- }
66
- }
67
- /**
68
- * @arg {AsepriteFrame} frame
69
- * @return {Readonly<XY>}
70
- * @internal
71
- */
72
- export function parseCel(frame) {
73
- return {
74
- x: frame.frame.x + (frame.frame.w - frame.sourceSize.w) / 2,
75
- y: frame.frame.y + (frame.frame.h - frame.sourceSize.h) / 2
76
- };
77
- }
78
- /**
79
- * @arg {AsepriteTagSpan} span
80
- * @arg {readonly AsepriteSlice[]} slices
81
- * @return {Readonly<Box>}
82
- * @internal
83
- */
84
- export function parseHitbox(span, slices) {
85
- const tagSlices = slices.filter(slice => slice.name === span.name);
86
- if (tagSlices.length > 1) {
87
- throw Error(`tag "${span.name}" has multiple hitboxes`);
88
- }
89
- const box = tagSlices[0]?.keys[0]?.bounds ?? { x: 0, y: 0, w: 0, h: 0 };
90
- // https://github.com/aseprite/aseprite/issues/3524
91
- for (const key of tagSlices[0]?.keys ?? []) {
92
- if (key.bounds.x !== box.x ||
93
- key.bounds.y !== box.y ||
94
- key.bounds.w !== box.w ||
95
- key.bounds.h !== box.h)
96
- throw Error(`tag "${span.name}" hitbox varies across frames`);
97
- }
98
- return box;
99
- }
100
- /**
101
- * @arg {string} tag
102
- * @return {AnimTag}
103
- */
104
- function parseTag(tag) {
105
- if (!tag.includes('--'))
106
- throw Error(`tag "${tag}" is malformed`);
107
- return /** @type {AnimTag} */ (tag);
108
- }
109
- //# sourceMappingURL=atlas-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"atlas-parser.js","sourceRoot":"","sources":["../../src/atlas/atlas-parser.js"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Anim, AnimTag } from './anim.js';
2
- export type Atlas<T extends AnimTag = AnimTag> = {
3
- readonly [tag in T]: Anim<T>;
4
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=atlas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../src/atlas/atlas.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- export declare class Synth {
2
- #private;
3
- beep(type: OscillatorType, startHz: number, endHz: number, duration: number): void;
4
- }
@@ -1,21 +0,0 @@
1
- export class Synth {
2
- #context;
3
- beep(type, startHz, endHz, duration // why can't this be short?
4
- ) {
5
- this.#context ??= new AudioContext();
6
- const now = this.#context.currentTime;
7
- const end = now + duration;
8
- const oscillator = this.#context.createOscillator();
9
- oscillator.type = type;
10
- oscillator.frequency.setValueAtTime(startHz, now);
11
- oscillator.frequency.exponentialRampToValueAtTime(endHz, end);
12
- const gain = this.#context.createGain();
13
- gain.gain.setValueAtTime(1, now);
14
- gain.gain.exponentialRampToValueAtTime(0.01, end);
15
- oscillator.connect(gain);
16
- gain.connect(this.#context.destination);
17
- oscillator.start();
18
- oscillator.stop(end);
19
- }
20
- }
21
- //# sourceMappingURL=synth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/audio/synth.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IAChB,QAAQ,CAAe;IAEvB,IAAI,CACF,IAAoB,EACpB,OAAe,EACf,KAAa,EACb,QAAgB,CAAC,2BAA2B;;QAE5C,IAAI,CAAC,QAAQ,KAAK,IAAI,YAAY,EAAE,CAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;QACrC,MAAM,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;QACnD,UAAU,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACjD,UAAU,CAAC,SAAS,CAAC,4BAA4B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAEjD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAEvC,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;CACF"}
@@ -1,14 +0,0 @@
1
- export type Bitmap = {
2
- /** 8x: i16, 8y: i16 */
3
- readonly _xy: number;
4
- /** w: u12, h: u12 */
5
- readonly _wh: number;
6
- /** id+cel: u15, flipX: b1, flipY: b1, zend: b1, z: u3 */
7
- readonly _iffzz: number;
8
- };
9
- export declare class BitmapBuffer {
10
- readonly buffer: Uint32Array;
11
- size: number;
12
- constructor(capacity: number);
13
- push(bmp: Readonly<Bitmap>): void;
14
- }
@@ -1,14 +0,0 @@
1
- export class BitmapBuffer {
2
- buffer;
3
- size = 0;
4
- constructor(capacity) {
5
- this.buffer = new Uint32Array(capacity * 3);
6
- }
7
- push(bmp) {
8
- this.buffer[this.size * 3] = bmp._xy;
9
- this.buffer[this.size * 3 + 1] = bmp._wh;
10
- this.buffer[this.size * 3 + 2] = bmp._iffzz;
11
- this.size++;
12
- }
13
- }
14
- //# sourceMappingURL=bitmap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bitmap.js","sourceRoot":"","sources":["../../src/graphics/bitmap.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,YAAY;IACd,MAAM,CAAa;IAC5B,IAAI,GAAG,CAAC,CAAA;IAER,YAAY,QAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,CAAC,GAAqB;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAA;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;CACF"}
@@ -1,16 +0,0 @@
1
- import type { Box, WH, XY } from '../types/2d.js';
2
- export declare class Cam implements Box {
3
- #private;
4
- minWH: WH;
5
- minScale: number;
6
- x: number;
7
- y: number;
8
- lvl: Box;
9
- get h(): number;
10
- /** Fill or just barely not fill the viewport in scaled pixels. */
11
- resize(zoomOut?: number): void;
12
- get scale(): number;
13
- /** Returns the integral position in level coordinates. */
14
- toLevelXY(clientXY: Readonly<XY>): XY;
15
- get w(): number;
16
- }
@@ -1,42 +0,0 @@
1
- export class Cam {
2
- minWH = { w: 256, h: 256 };
3
- minScale = 1;
4
- x = 0; //xy?
5
- y = 0;
6
- lvl = { x: -4096, y: -4096, w: 8191, h: 8191 };
7
- #clientWH = { w: 1, h: 1 };
8
- #scale = 1;
9
- #w = this.minWH.w;
10
- #h = this.minWH.h;
11
- get h() {
12
- return this.#h;
13
- }
14
- /** Fill or just barely not fill the viewport in scaled pixels. */
15
- resize(zoomOut) {
16
- // WH of body in CSS px; document.body.getBoundingClientRect() returns
17
- // incorrectly large sizing on mobile that includes the address bar
18
- this.#clientWH.w = innerWidth;
19
- this.#clientWH.h = innerHeight;
20
- const nativeW = Math.round(this.#clientWH.w * devicePixelRatio); // physical
21
- const nativeH = Math.round(this.#clientWH.h * devicePixelRatio);
22
- this.#scale = Math.max(this.minScale, Math.floor(Math.min(nativeW / this.minWH.w, nativeH / this.minWH.h)) -
23
- (zoomOut ?? 0) // Default is to zoom in as much as possible.
24
- );
25
- this.#w = Math.floor(nativeW / this.#scale);
26
- this.#h = Math.floor(nativeH / this.#scale);
27
- }
28
- get scale() {
29
- return this.#scale;
30
- }
31
- /** Returns the integral position in level coordinates. */
32
- toLevelXY(clientXY) {
33
- return {
34
- x: Math.round(this.x + (clientXY.x / this.#clientWH.w) * this.#w),
35
- y: Math.round(this.y + (clientXY.y / this.#clientWH.h) * this.#h)
36
- };
37
- }
38
- get w() {
39
- return this.#w;
40
- }
41
- }
42
- //# sourceMappingURL=cam.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cam.js","sourceRoot":"","sources":["../../src/graphics/cam.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG;IACd,KAAK,GAAO,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAC,CAAA;IAC5B,QAAQ,GAAW,CAAC,CAAA;IACpB,CAAC,GAAW,CAAC,CAAA,CAAC,KAAK;IACnB,CAAC,GAAW,CAAC,CAAA;IACb,GAAG,GAAQ,EAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAC,CAAA;IAExC,SAAS,GAAO,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAA;IACrC,MAAM,GAAG,CAAC,CAAA;IACV,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACjB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,OAAgB;QACrB,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAA;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAA,CAAC,WAAW;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAA;QAE/D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,6CAA6C;SAC/D,CAAA;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,0DAA0D;IAC1D,SAAS,CAAC,QAAsB;QAC9B,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACjE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SAClE,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;CACF"}
@@ -1 +0,0 @@
1
- export declare const fragGLSL = "#version 300 es\nuniform mediump sampler2D uSpritesheet;\nuniform mediump uvec2 uSpritesheetSize;\n\nflat in highp ivec4 vTexXYWH;\nin highp vec2 vDstWH;\n\nout highp vec4 oFrag;\n\nvoid main() {\n highp vec2 px = vec2(vTexXYWH.xy) + mod(vDstWH, vec2(vTexXYWH.zw));\n oFrag = texture(uSpritesheet, px / vec2(uSpritesheetSize));\n if(oFrag.a < 1.) discard;\n}";
@@ -1,15 +0,0 @@
1
- export const fragGLSL = `#version 300 es
2
- uniform mediump sampler2D uSpritesheet;
3
- uniform mediump uvec2 uSpritesheetSize;
4
-
5
- flat in highp ivec4 vTexXYWH;
6
- in highp vec2 vDstWH;
7
-
8
- out highp vec4 oFrag;
9
-
10
- void main() {
11
- highp vec2 px = vec2(vTexXYWH.xy) + mod(vDstWH, vec2(vTexXYWH.zw));
12
- oFrag = texture(uSpritesheet, px / vec2(uSpritesheetSize));
13
- if(oFrag.a < 1.) discard;
14
- }`;
15
- //# sourceMappingURL=frag.glsl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frag.glsl.js","sourceRoot":"","sources":["../../src/graphics/frag.glsl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;EAatB,CAAA"}
@@ -1,16 +0,0 @@
1
- import { Input } from '../input/input.js';
2
- import { BitmapBuffer } from './bitmap.js';
3
- import { Cam } from './cam.js';
4
- import { Renderer } from './renderer.js';
5
- export declare class FrameListener {
6
- #private;
7
- /** The running lifetime in milliseconds. */
8
- age: number;
9
- /** The exact duration in milliseconds to apply on a given update step. */
10
- tick: number;
11
- constructor(canvas: HTMLCanvasElement, input: Input<string>, renderer: Renderer);
12
- cancel(): void;
13
- get frame(): number;
14
- register(op: 'add' | 'remove'): void;
15
- render(cam: Readonly<Cam>, buffer: BitmapBuffer, loop?: () => void): void;
16
- }
@@ -1,83 +0,0 @@
1
- import { Input } from '../input/input.js';
2
- import { BitmapBuffer } from './bitmap.js';
3
- import { Cam } from './cam.js';
4
- import { Renderer } from './renderer.js';
5
- export class FrameListener {
6
- /** The running lifetime in milliseconds. */
7
- age = 0;
8
- /** The exact duration in milliseconds to apply on a given update step. */
9
- tick = 0;
10
- #canvas;
11
- #frame;
12
- #loop;
13
- #time;
14
- #input;
15
- #renderer;
16
- constructor(canvas, input, renderer) {
17
- this.#canvas = canvas;
18
- this.#input = input;
19
- this.#renderer = renderer;
20
- }
21
- cancel() {
22
- if (this.#frame != null)
23
- cancelAnimationFrame(this.#frame);
24
- this.#frame = undefined;
25
- this.tick = 0;
26
- this.#time = undefined;
27
- this.#input.reset();
28
- this.#loop = undefined;
29
- }
30
- get frame() {
31
- // Assume 60 FPS so games can scale to this number regardless of actual.
32
- return Math.trunc(this.age / 16.666666666666668);
33
- }
34
- register(op) {
35
- const fn = `${op}EventListener`;
36
- for (const type of ['webglcontextrestored', 'webglcontextlost']) {
37
- this.#canvas[fn](type, this.#onEvent, true);
38
- }
39
- globalThis[fn]('visibilitychange', this.#onEvent, true);
40
- if (op === 'add')
41
- this.#renderer.initGL();
42
- this.#input.register(op);
43
- }
44
- render(cam, buffer, loop) {
45
- this.#loop = loop;
46
- if (!this.#isVisible() || !this.#renderer.hasContext())
47
- return;
48
- if (this.#loop)
49
- this.#frame ??= requestAnimationFrame(this.#onFrame);
50
- this.#renderer.render(cam, this.frame, buffer);
51
- }
52
- #isVisible() {
53
- return document.visibilityState === 'visible';
54
- }
55
- #onEvent = (event) => {
56
- event.preventDefault();
57
- if (event.type === 'webglcontextrestored')
58
- this.#renderer.initGL();
59
- if (this.#renderer.hasContext() && this.#isVisible()) {
60
- if (this.#loop)
61
- this.#frame ??= requestAnimationFrame(this.#onFrame);
62
- }
63
- else {
64
- if (this.#frame != null)
65
- cancelAnimationFrame(this.#frame);
66
- this.#frame = undefined;
67
- this.tick = 0;
68
- this.#time = undefined;
69
- this.#input.reset();
70
- }
71
- };
72
- #onFrame = (time) => {
73
- this.#frame = undefined;
74
- this.tick = time - (this.#time ?? time);
75
- this.#time = time;
76
- this.age += this.tick;
77
- const loop = this.#loop;
78
- this.#loop = undefined;
79
- this.#input.poll(this.tick);
80
- loop?.();
81
- };
82
- }
83
- //# sourceMappingURL=frame-listener.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame-listener.js","sourceRoot":"","sources":["../../src/graphics/frame-listener.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { Atlas } from '../index.js';
2
- import { BitmapBuffer } from './bitmap.js';
3
- import { Cam } from './cam.js';
4
- export declare class Renderer {
5
- #private;
6
- constructor(atlas: Atlas, canvas: HTMLCanvasElement, spritesheet: HTMLImageElement);
7
- clearColor(rgba: number): void;
8
- initGL(): void;
9
- get loseContext(): WEBGL_lose_context | null;
10
- hasContext(): boolean;
11
- render(cam: Readonly<Cam>, frame: number, bmps: Readonly<BitmapBuffer>): void;
12
- }