kaboom icon indicating copy to clipboard operation
kaboom copied to clipboard

Level api rework (draft)

Open slmjkdbtl opened this issue 3 years ago • 0 comments

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 map field
  • More explicitly named fields
    • width -> tileWidth
    • height -> tileHeight
    • any -> wildcardTile
  • Moved definition for each tile into one tiles map, 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 },
			]
		}
	},
})

slmjkdbtl avatar May 12 '22 22:05 slmjkdbtl