kaboom
kaboom copied to clipboard
Level api rework (draft)
Changes the addLevel() api, put all level related data into 1 single structure LevelData
- Put everything into one data struct, move level ascii drawing into
mapfield - More explicitly named fields
width->tileWidthheight->tileHeightany->wildcardTile
- Moved definition for each tile into one
tilesmap, to separate arbitrary fields and named fields
Previous:
const level = addLevel([
"@ = $",
"=======",
], {
width: 64,
height: 64,
pos: vec2(100, 200),
"@": () => [
sprite("bean"),
area(),
body(),
origin("bot"),
"player",
],
"=": () => [
sprite("grass"),
area(),
body({ isStatic: true }),
origin("bot"),
],
"$": () => [
sprite("coin"),
area(),
origin("bot"),
"coin",
],
any: (sym) => {
const char = characters[sym]
if (char) {
return [
sprite(char.sprite),
"character",
{ msg: char.msg },
]
}
}
})
Now:
const level = addLevel({
map: [
"@ = $",
"=======",
],
tileWidth: 64,
tileHeight: 64,
pos: vec2(100, 200),
tiles: {
"@": () => [
sprite("bean"),
area(),
body(),
origin("bot"),
"player",
],
"=": () => [
sprite("grass"),
area(),
body({ isStatic: true }),
origin("bot"),
],
"$": () => [
sprite("coin"),
area(),
origin("bot"),
"coin",
],
},
wildcardTile: (sym) => {
const char = characters[sym]
if (char) {
return [
sprite(char.sprite),
"character",
{ msg: char.msg },
]
}
},
})