62 lines
1.7 KiB
Plaintext
62 lines
1.7 KiB
Plaintext
//constants for generating maps
|
|
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 tilemap: [int] = null;
|
|
|
|
fn setTilemap(node: opaque, t: [int]) {
|
|
tilemap = t;
|
|
}
|
|
|
|
//lifecycle functions
|
|
fn onLoad(node: opaque) {
|
|
node.loadNodeTexture("sprites:/tileset.png");
|
|
|
|
node.setNodeScaleX(CAMERA_SCALE_X);
|
|
node.setNodeScaleY(CAMERA_SCALE_Y);
|
|
}
|
|
|
|
fn onDraw(node: opaque) {
|
|
assert tilemap, "tilemap is null";
|
|
|
|
var posX: int const = node.getNodeWorldPositionX();
|
|
var posY: int const = node.getNodeWorldPositionY();
|
|
|
|
//draw everything at twice the original size
|
|
var scaleX: float const = node.getNodeWorldScaleX();
|
|
var scaleY: float const = node.getNodeWorldScaleY();
|
|
|
|
//draw the tilemap
|
|
for (var j = 0; j < CELL_HEIGHT * CELL_COUNT_Y; j++) {
|
|
for (var i = 0; i < CELL_WIDTH * CELL_COUNT_X; i++) {
|
|
//don't render empty tiles
|
|
if (tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3] < 0) {
|
|
continue;
|
|
}
|
|
|
|
//set the rect of the node on the tilesheet - the "tilemap" var is a single blob of data
|
|
node.setNodeRect(
|
|
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3] * TILE_PIXEL_WIDTH,
|
|
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 1] * TILE_PIXEL_HEIGHT,
|
|
TILE_PIXEL_WIDTH, TILE_PIXEL_HEIGHT
|
|
);
|
|
|
|
//draw to the screen
|
|
node.drawNode(
|
|
floor((i * TILE_PIXEL_WIDTH + posX) * scaleX) + globalCameraX,
|
|
floor((j * TILE_PIXEL_HEIGHT + posY) * scaleY) + globalCameraY,
|
|
floor(TILE_PIXEL_WIDTH * scaleX),
|
|
floor(TILE_PIXEL_HEIGHT * scaleY)
|
|
);
|
|
}
|
|
}
|
|
} |