74 lines
1.9 KiB
Plaintext
74 lines
1.9 KiB
Plaintext
import standard;
|
|
import engine;
|
|
import node;
|
|
|
|
|
|
//constants for generating maps
|
|
var TILE_PIXEL_WIDTH: int const = 16;
|
|
var TILE_PIXEL_HEIGHT: int const = 16;
|
|
|
|
var ROOM_MIN_WIDTH: int const = 4; //minimum safe value 4
|
|
var ROOM_MIN_HEIGHT: int const = 4;
|
|
|
|
var ROOM_MAX_WIDTH: int const = 12;
|
|
var ROOM_MAX_HEIGHT: int const = 12;
|
|
|
|
var CELL_WIDTH: int const = 16; //minimum safe value ROOM_MAX_* + 4
|
|
var CELL_HEIGHT: int const = 16;
|
|
|
|
var CELL_COUNT_X: int const = 3;
|
|
var CELL_COUNT_Y: int const = 3;
|
|
|
|
var MAP_GRID_WIDTH: int const = CELL_WIDTH * CELL_COUNT_X;
|
|
var MAP_GRID_HEIGHT: int const = CELL_HEIGHT * CELL_COUNT_Y;
|
|
|
|
|
|
//lifecycle functions
|
|
fn onLoad(node: opaque) {
|
|
//load the atlas into this node
|
|
node.loadNodeTexture("sprites:/tileset.png");
|
|
|
|
//create a child as a render target
|
|
var child: opaque = node.loadChildNode("scripts:/tilemap/renderer-child.toy");
|
|
child.createNodeTexture(MAP_GRID_WIDTH * TILE_PIXEL_WIDTH, MAP_GRID_HEIGHT * TILE_PIXEL_HEIGHT);
|
|
}
|
|
|
|
//TODO: lazily render
|
|
fn setTilemap(node: opaque, tilemap: [int]) {
|
|
assert tilemap, "provided tilemap is null (in setTilemap)";
|
|
|
|
var child: opaque = node.getChildNode(0);
|
|
setRenderTarget(child);
|
|
|
|
//draw the tilemap to the child
|
|
for (var j = 0; j < MAP_GRID_HEIGHT; j++) {
|
|
for (var i = 0; i < MAP_GRID_WIDTH; i++) {
|
|
//don't recalculate this every time
|
|
var ITERATION: int const = j * MAP_GRID_WIDTH * 3 + i * 3;
|
|
|
|
//don't render empty tiles
|
|
if (tilemap[ITERATION] < 0 || tilemap[ITERATION + 1] < 0) {
|
|
continue;
|
|
}
|
|
|
|
//set the rect of the node on the tilesheet - the "tilemap" var is a single blob of data
|
|
node.setNodeRect(
|
|
tilemap[ITERATION] * TILE_PIXEL_WIDTH,
|
|
tilemap[ITERATION + 1] * TILE_PIXEL_HEIGHT,
|
|
TILE_PIXEL_WIDTH, TILE_PIXEL_HEIGHT
|
|
);
|
|
|
|
//draw to the screen
|
|
node.drawNode(
|
|
(i * TILE_PIXEL_WIDTH),
|
|
(j * TILE_PIXEL_HEIGHT),
|
|
TILE_PIXEL_WIDTH,
|
|
TILE_PIXEL_HEIGHT
|
|
);
|
|
}
|
|
}
|
|
|
|
//reset the render target to the screen
|
|
setRenderTarget(null);
|
|
}
|