Skip to content

Commit 14f62b9

Browse files
committed
drop sprite hitbox/hurtbox caching and reserve ID 0
1 parent 3e824f6 commit 14f62b9

17 files changed

Lines changed: 898 additions & 863 deletions

src/cli/atlas-pack/atlas-json-parser.test.ts

Lines changed: 201 additions & 170 deletions
Large diffs are not rendered by default.

src/cli/atlas-pack/atlas-json-parser.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@ import * as ase from './aseprite.ts'
44
import './aseprite-json.ts'
55

66
export function parseAtlasJSON(json: Readonly<ase.Aseprite>): V.AtlasJSON {
7-
const anim: {[tag: string]: V.Anim} = {}
8-
const cels: number[] = []
7+
const anim: {[tag: string]: V.Anim} = {
8+
'void--Nil': {
9+
cels: 1,
10+
data: undefined,
11+
hitbox: undefined,
12+
hurtbox: undefined,
13+
id: 0,
14+
w: 0,
15+
h: 0
16+
}
17+
}
18+
const cels: number[] = [0, 0] // void--Nil cel.
919
for (const span of json.meta.frameTags) {
1020
const tag = parseTag(span.name)
1121
if (anim[tag]) throw Error(`atlas tag "${tag}" duplicate`)
12-
const id = Object.keys(anim).length // to-do: ID 0 means discard.
22+
const id = Object.keys(anim).length
1323
anim[tag] = parseAnim(id, span, json.frames, json.meta.slices)
1424
for (const cel of parseAnimFrames(span, json.frames).map(parseCel))
1525
cels.push(cel.x, cel.y)

src/cli/atlas-pack/tileset-parser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function parseTileset(json: Readonly<ase.Aseprite>): V.Tileset {
77
const tiles: V.Tile[] = ['void--Nil']
88
let tileWH: V.WH | undefined
99

10-
for (const [i, span] of json.meta.frameTags.entries()) {
10+
for (const span of json.meta.frameTags) {
1111
if (span.from !== span.to)
1212
throw Error(`tileset tag "${span.name}" is animated`)
1313

@@ -19,7 +19,7 @@ export function parseTileset(json: Readonly<ase.Aseprite>): V.Tileset {
1919
if (tileWH.w !== frame.sourceSize.w || tileWH.h !== frame.sourceSize.h)
2020
throw Error(`tileset tile "${span.name}" size mismatch`)
2121

22-
tiles[i + 1] = parseTile(span.name)
22+
tiles.push(parseTile(span.name))
2323
}
2424

2525
return {tiles, tileWH: tileWH ?? {w: 0, h: 0}}

src/demo/assets/void.game.json

Lines changed: 172 additions & 171 deletions
Large diffs are not rendered by default.

src/demo/ents/superball-button.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export class SuperballButtonHook implements V.Hook {
1010
update(ent: SuperballButtonEnt, v: V.Void): void {
1111
if (!V.buttonOn(ent)) return
1212

13-
for (let i = 0; i < 100; i++) {
13+
// to-do: how to deal with `Input.handled` in `ButtonHook` preventing shift?
14+
for (let i = 0; i < 100 * (v.input.isOnStart('Shift') ? 100 : 1); i++) {
1415
const angle = v.random.num * Math.PI * 2
1516
const speed = 20 + 200 * v.random.num
1617
const sprite = parseSprite(

src/demo/level/tags.json

Lines changed: 154 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"Tag": {
66
"description": "sprite atlas tag.",
77
"enum": [
8+
"void--Nil",
89
"background--OrangeCheckerboard",
910
"background--GreyCheckerboard",
1011
"background--BlackCheckerboard",
@@ -165,158 +166,159 @@
165166
}
166167
},
167168
"tags": {
168-
"background--OrangeCheckerboard": 0,
169-
"background--GreyCheckerboard": 1,
170-
"background--BlackCheckerboard": 2,
171-
"background--Kiwi": 3,
172-
"background--Strawberry": 4,
173-
"background--Grape": 5,
174-
"background--Blueberry": 6,
175-
"background--Bubblegum": 7,
176-
"background--Transparent": 8,
177-
"background--Black": 9,
178-
"backpacker--WalkRight": 10,
179-
"backpacker--WalkDown": 11,
180-
"backpacker--WalkUp": 12,
181-
"cursor--Pointer": 13,
182-
"mem-prop-5x6--00": 14,
183-
"mem-prop-5x6--01": 15,
184-
"mem-prop-5x6--02": 16,
185-
"mem-prop-5x6--03": 17,
186-
"mem-prop-5x6--04": 18,
187-
"mem-prop-5x6--05": 19,
188-
"mem-prop-5x6--06": 20,
189-
"mem-prop-5x6--07": 21,
190-
"mem-prop-5x6--08": 22,
191-
"mem-prop-5x6--09": 23,
192-
"mem-prop-5x6--0a": 24,
193-
"mem-prop-5x6--0b": 25,
194-
"mem-prop-5x6--0c": 26,
195-
"mem-prop-5x6--0d": 27,
196-
"mem-prop-5x6--0e": 28,
197-
"mem-prop-5x6--0f": 29,
198-
"mem-prop-5x6--10": 30,
199-
"mem-prop-5x6--11": 31,
200-
"mem-prop-5x6--12": 32,
201-
"mem-prop-5x6--13": 33,
202-
"mem-prop-5x6--14": 34,
203-
"mem-prop-5x6--15": 35,
204-
"mem-prop-5x6--16": 36,
205-
"mem-prop-5x6--17": 37,
206-
"mem-prop-5x6--18": 38,
207-
"mem-prop-5x6--19": 39,
208-
"mem-prop-5x6--1a": 40,
209-
"mem-prop-5x6--1b": 41,
210-
"mem-prop-5x6--1c": 42,
211-
"mem-prop-5x6--1d": 43,
212-
"mem-prop-5x6--1e": 44,
213-
"mem-prop-5x6--1f": 45,
214-
"mem-prop-5x6--20": 46,
215-
"mem-prop-5x6--21": 47,
216-
"mem-prop-5x6--22": 48,
217-
"mem-prop-5x6--23": 49,
218-
"mem-prop-5x6--24": 50,
219-
"mem-prop-5x6--25": 51,
220-
"mem-prop-5x6--26": 52,
221-
"mem-prop-5x6--27": 53,
222-
"mem-prop-5x6--28": 54,
223-
"mem-prop-5x6--29": 55,
224-
"mem-prop-5x6--2a": 56,
225-
"mem-prop-5x6--2b": 57,
226-
"mem-prop-5x6--2c": 58,
227-
"mem-prop-5x6--2d": 59,
228-
"mem-prop-5x6--2e": 60,
229-
"mem-prop-5x6--2f": 61,
230-
"mem-prop-5x6--30": 62,
231-
"mem-prop-5x6--31": 63,
232-
"mem-prop-5x6--32": 64,
233-
"mem-prop-5x6--33": 65,
234-
"mem-prop-5x6--34": 66,
235-
"mem-prop-5x6--35": 67,
236-
"mem-prop-5x6--36": 68,
237-
"mem-prop-5x6--37": 69,
238-
"mem-prop-5x6--38": 70,
239-
"mem-prop-5x6--39": 71,
240-
"mem-prop-5x6--3a": 72,
241-
"mem-prop-5x6--3b": 73,
242-
"mem-prop-5x6--3c": 74,
243-
"mem-prop-5x6--3d": 75,
244-
"mem-prop-5x6--3e": 76,
245-
"mem-prop-5x6--3f": 77,
246-
"mem-prop-5x6--40": 78,
247-
"mem-prop-5x6--41": 79,
248-
"mem-prop-5x6--42": 80,
249-
"mem-prop-5x6--43": 81,
250-
"mem-prop-5x6--44": 82,
251-
"mem-prop-5x6--45": 83,
252-
"mem-prop-5x6--46": 84,
253-
"mem-prop-5x6--47": 85,
254-
"mem-prop-5x6--48": 86,
255-
"mem-prop-5x6--49": 87,
256-
"mem-prop-5x6--4a": 88,
257-
"mem-prop-5x6--4b": 89,
258-
"mem-prop-5x6--4c": 90,
259-
"mem-prop-5x6--4d": 91,
260-
"mem-prop-5x6--4e": 92,
261-
"mem-prop-5x6--4f": 93,
262-
"mem-prop-5x6--50": 94,
263-
"mem-prop-5x6--51": 95,
264-
"mem-prop-5x6--52": 96,
265-
"mem-prop-5x6--53": 97,
266-
"mem-prop-5x6--54": 98,
267-
"mem-prop-5x6--55": 99,
268-
"mem-prop-5x6--56": 100,
269-
"mem-prop-5x6--57": 101,
270-
"mem-prop-5x6--58": 102,
271-
"mem-prop-5x6--59": 103,
272-
"mem-prop-5x6--5a": 104,
273-
"mem-prop-5x6--5b": 105,
274-
"mem-prop-5x6--5c": 106,
275-
"mem-prop-5x6--5d": 107,
276-
"mem-prop-5x6--5e": 108,
277-
"mem-prop-5x6--5f": 109,
278-
"mem-prop-5x6--60": 110,
279-
"mem-prop-5x6--61": 111,
280-
"mem-prop-5x6--62": 112,
281-
"mem-prop-5x6--63": 113,
282-
"mem-prop-5x6--64": 114,
283-
"mem-prop-5x6--65": 115,
284-
"mem-prop-5x6--66": 116,
285-
"mem-prop-5x6--67": 117,
286-
"mem-prop-5x6--68": 118,
287-
"mem-prop-5x6--69": 119,
288-
"mem-prop-5x6--6a": 120,
289-
"mem-prop-5x6--6b": 121,
290-
"mem-prop-5x6--6c": 122,
291-
"mem-prop-5x6--6d": 123,
292-
"mem-prop-5x6--6e": 124,
293-
"mem-prop-5x6--6f": 125,
294-
"mem-prop-5x6--70": 126,
295-
"mem-prop-5x6--71": 127,
296-
"mem-prop-5x6--72": 128,
297-
"mem-prop-5x6--73": 129,
298-
"mem-prop-5x6--74": 130,
299-
"mem-prop-5x6--75": 131,
300-
"mem-prop-5x6--76": 132,
301-
"mem-prop-5x6--77": 133,
302-
"mem-prop-5x6--78": 134,
303-
"mem-prop-5x6--79": 135,
304-
"mem-prop-5x6--7a": 136,
305-
"mem-prop-5x6--7b": 137,
306-
"mem-prop-5x6--7c": 138,
307-
"mem-prop-5x6--7d": 139,
308-
"mem-prop-5x6--7e": 140,
309-
"mem-prop-5x6--7f": 141,
310-
"mouse-status--Base": 142,
311-
"mouse-status--Primary": 143,
312-
"mouse-status--Secondary": 144,
313-
"mouse-status--Tertiary": 145,
314-
"mouse-status--Locked": 146,
315-
"oidoid--Default": 147,
316-
"poly--Triangle": 148,
317-
"poly--Square": 149,
318-
"superball--Default": 150,
319-
"ui-checkbox--Checked": 151
169+
"void--Nil": 0,
170+
"background--OrangeCheckerboard": 1,
171+
"background--GreyCheckerboard": 2,
172+
"background--BlackCheckerboard": 3,
173+
"background--Kiwi": 4,
174+
"background--Strawberry": 5,
175+
"background--Grape": 6,
176+
"background--Blueberry": 7,
177+
"background--Bubblegum": 8,
178+
"background--Transparent": 9,
179+
"background--Black": 10,
180+
"backpacker--WalkRight": 11,
181+
"backpacker--WalkDown": 12,
182+
"backpacker--WalkUp": 13,
183+
"cursor--Pointer": 14,
184+
"mem-prop-5x6--00": 15,
185+
"mem-prop-5x6--01": 16,
186+
"mem-prop-5x6--02": 17,
187+
"mem-prop-5x6--03": 18,
188+
"mem-prop-5x6--04": 19,
189+
"mem-prop-5x6--05": 20,
190+
"mem-prop-5x6--06": 21,
191+
"mem-prop-5x6--07": 22,
192+
"mem-prop-5x6--08": 23,
193+
"mem-prop-5x6--09": 24,
194+
"mem-prop-5x6--0a": 25,
195+
"mem-prop-5x6--0b": 26,
196+
"mem-prop-5x6--0c": 27,
197+
"mem-prop-5x6--0d": 28,
198+
"mem-prop-5x6--0e": 29,
199+
"mem-prop-5x6--0f": 30,
200+
"mem-prop-5x6--10": 31,
201+
"mem-prop-5x6--11": 32,
202+
"mem-prop-5x6--12": 33,
203+
"mem-prop-5x6--13": 34,
204+
"mem-prop-5x6--14": 35,
205+
"mem-prop-5x6--15": 36,
206+
"mem-prop-5x6--16": 37,
207+
"mem-prop-5x6--17": 38,
208+
"mem-prop-5x6--18": 39,
209+
"mem-prop-5x6--19": 40,
210+
"mem-prop-5x6--1a": 41,
211+
"mem-prop-5x6--1b": 42,
212+
"mem-prop-5x6--1c": 43,
213+
"mem-prop-5x6--1d": 44,
214+
"mem-prop-5x6--1e": 45,
215+
"mem-prop-5x6--1f": 46,
216+
"mem-prop-5x6--20": 47,
217+
"mem-prop-5x6--21": 48,
218+
"mem-prop-5x6--22": 49,
219+
"mem-prop-5x6--23": 50,
220+
"mem-prop-5x6--24": 51,
221+
"mem-prop-5x6--25": 52,
222+
"mem-prop-5x6--26": 53,
223+
"mem-prop-5x6--27": 54,
224+
"mem-prop-5x6--28": 55,
225+
"mem-prop-5x6--29": 56,
226+
"mem-prop-5x6--2a": 57,
227+
"mem-prop-5x6--2b": 58,
228+
"mem-prop-5x6--2c": 59,
229+
"mem-prop-5x6--2d": 60,
230+
"mem-prop-5x6--2e": 61,
231+
"mem-prop-5x6--2f": 62,
232+
"mem-prop-5x6--30": 63,
233+
"mem-prop-5x6--31": 64,
234+
"mem-prop-5x6--32": 65,
235+
"mem-prop-5x6--33": 66,
236+
"mem-prop-5x6--34": 67,
237+
"mem-prop-5x6--35": 68,
238+
"mem-prop-5x6--36": 69,
239+
"mem-prop-5x6--37": 70,
240+
"mem-prop-5x6--38": 71,
241+
"mem-prop-5x6--39": 72,
242+
"mem-prop-5x6--3a": 73,
243+
"mem-prop-5x6--3b": 74,
244+
"mem-prop-5x6--3c": 75,
245+
"mem-prop-5x6--3d": 76,
246+
"mem-prop-5x6--3e": 77,
247+
"mem-prop-5x6--3f": 78,
248+
"mem-prop-5x6--40": 79,
249+
"mem-prop-5x6--41": 80,
250+
"mem-prop-5x6--42": 81,
251+
"mem-prop-5x6--43": 82,
252+
"mem-prop-5x6--44": 83,
253+
"mem-prop-5x6--45": 84,
254+
"mem-prop-5x6--46": 85,
255+
"mem-prop-5x6--47": 86,
256+
"mem-prop-5x6--48": 87,
257+
"mem-prop-5x6--49": 88,
258+
"mem-prop-5x6--4a": 89,
259+
"mem-prop-5x6--4b": 90,
260+
"mem-prop-5x6--4c": 91,
261+
"mem-prop-5x6--4d": 92,
262+
"mem-prop-5x6--4e": 93,
263+
"mem-prop-5x6--4f": 94,
264+
"mem-prop-5x6--50": 95,
265+
"mem-prop-5x6--51": 96,
266+
"mem-prop-5x6--52": 97,
267+
"mem-prop-5x6--53": 98,
268+
"mem-prop-5x6--54": 99,
269+
"mem-prop-5x6--55": 100,
270+
"mem-prop-5x6--56": 101,
271+
"mem-prop-5x6--57": 102,
272+
"mem-prop-5x6--58": 103,
273+
"mem-prop-5x6--59": 104,
274+
"mem-prop-5x6--5a": 105,
275+
"mem-prop-5x6--5b": 106,
276+
"mem-prop-5x6--5c": 107,
277+
"mem-prop-5x6--5d": 108,
278+
"mem-prop-5x6--5e": 109,
279+
"mem-prop-5x6--5f": 110,
280+
"mem-prop-5x6--60": 111,
281+
"mem-prop-5x6--61": 112,
282+
"mem-prop-5x6--62": 113,
283+
"mem-prop-5x6--63": 114,
284+
"mem-prop-5x6--64": 115,
285+
"mem-prop-5x6--65": 116,
286+
"mem-prop-5x6--66": 117,
287+
"mem-prop-5x6--67": 118,
288+
"mem-prop-5x6--68": 119,
289+
"mem-prop-5x6--69": 120,
290+
"mem-prop-5x6--6a": 121,
291+
"mem-prop-5x6--6b": 122,
292+
"mem-prop-5x6--6c": 123,
293+
"mem-prop-5x6--6d": 124,
294+
"mem-prop-5x6--6e": 125,
295+
"mem-prop-5x6--6f": 126,
296+
"mem-prop-5x6--70": 127,
297+
"mem-prop-5x6--71": 128,
298+
"mem-prop-5x6--72": 129,
299+
"mem-prop-5x6--73": 130,
300+
"mem-prop-5x6--74": 131,
301+
"mem-prop-5x6--75": 132,
302+
"mem-prop-5x6--76": 133,
303+
"mem-prop-5x6--77": 134,
304+
"mem-prop-5x6--78": 135,
305+
"mem-prop-5x6--79": 136,
306+
"mem-prop-5x6--7a": 137,
307+
"mem-prop-5x6--7b": 138,
308+
"mem-prop-5x6--7c": 139,
309+
"mem-prop-5x6--7d": 140,
310+
"mem-prop-5x6--7e": 141,
311+
"mem-prop-5x6--7f": 142,
312+
"mouse-status--Base": 143,
313+
"mouse-status--Primary": 144,
314+
"mouse-status--Secondary": 145,
315+
"mouse-status--Tertiary": 146,
316+
"mouse-status--Locked": 147,
317+
"oidoid--Default": 148,
318+
"poly--Triangle": 149,
319+
"poly--Square": 150,
320+
"superball--Default": 151,
321+
"ui-checkbox--Checked": 152
320322
},
321323
"tiles": {"void--Nil": 0, "tile--GreyDots": 1, "tile--BlueDots": 2}
322324
}

0 commit comments

Comments
 (0)