Reduced some number crunching in the generator
This commit is contained in:
@@ -132,9 +132,6 @@
|
||||
xcopy "$(SDL2ImageDir)\lib\x64\SDL2_image.dll" "$(OutDir)" /Y /I /E
|
||||
xcopy "$(SDL2MixerDir)\lib\x64\SDL2_mixer.dll" "$(OutDir)" /Y /I /E
|
||||
xcopy "$(SDL2TTFDir)\lib\x64\SDL2_ttf.dll" "$(OutDir)" /Y /I /E
|
||||
del "$(OutDir)$(ProjectName).exp"
|
||||
del "$(OutDir)$(ProjectName).pdb"
|
||||
rmdir "$(OutDir)optional"
|
||||
xcopy "$(ProjectDir)assets" "$(Outdir)assets" /Y /I /E</Command>
|
||||
</PostBuildEvent>
|
||||
<Bscmake>
|
||||
@@ -168,9 +165,6 @@ xcopy "$(ProjectDir)assets" "$(Outdir)assets" /Y /I /E</Command>
|
||||
xcopy "$(SDL2ImageDir)\lib\x64\SDL2_image.dll" "$(OutDir)" /Y /I /E
|
||||
xcopy "$(SDL2MixerDir)\lib\x64\SDL2_mixer.dll" "$(OutDir)" /Y /I /E
|
||||
xcopy "$(SDL2TTFDir)\lib\x64\SDL2_ttf.dll" "$(OutDir)" /Y /I /E
|
||||
del "$(OutDir)$(ProjectName).exp"
|
||||
del "$(OutDir)$(ProjectName).pdb"
|
||||
rmdir "$(OutDir)optional"
|
||||
xcopy "$(ProjectDir)assets" "$(Outdir)assets" /Y /I /E</Command>
|
||||
</PostBuildEvent>
|
||||
<Bscmake>
|
||||
|
||||
2
Box
2
Box
Submodule Box updated: 4297e15959...cdfc42cf84
@@ -61,8 +61,8 @@ fn generateTilemapData(rng: opaque) {
|
||||
//generate a grid filled with only empty tiles, as a starting point
|
||||
tilemap = [];
|
||||
|
||||
for (var j: int = 0; j < CELL_COUNT_Y * CELL_HEIGHT; j++) {
|
||||
for (var i: int = 0; i < CELL_COUNT_X * CELL_WIDTH; i++) {
|
||||
for (var j: int = 0; j < MAP_GRID_HEIGHT; j++) {
|
||||
for (var i: int = 0; i < MAP_GRID_WIDTH; i++) {
|
||||
tilemap.push(-1); //x
|
||||
tilemap.push(-1); //y
|
||||
tilemap.push(0); //collision
|
||||
@@ -148,10 +148,12 @@ fn etchRoom(rng: opaque, metadata: [string: any]) {
|
||||
//etch the floor-space
|
||||
for (var j: int = y; j < y + h; j++) {
|
||||
for (var i: int = x; i < x + w; i++) {
|
||||
var floorIndex = rng.generateRandomNumber() % 4; //NOTE: there might not always be only 4 floor sprites
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 0] = tileset[theme + "-floor-" + string floorIndex][0];
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 1] = tileset[theme + "-floor-" + string floorIndex][1];
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 2] = tileset[theme + "-floor-" + string floorIndex][2];
|
||||
var ITERATION: int const = j * MAP_GRID_WIDTH * 3 + i * 3;
|
||||
var r = rng.generateRandomNumber() % 4; //BUG: see Toy#67
|
||||
var floorIndex: string const = theme + "-floor-" + string r; //NOTE: there might not always be only 4 floor sprites
|
||||
tilemap[ITERATION + 0] = tileset[floorIndex][0];
|
||||
tilemap[ITERATION + 1] = tileset[floorIndex][1];
|
||||
tilemap[ITERATION + 2] = tileset[floorIndex][2];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -356,10 +358,12 @@ fn etchLine(x: int, y: int, xLength: int, yLength: int, theme: string, rng: opaq
|
||||
//lengths can be negative, so handle it
|
||||
while (abs(xLength) > 0 || abs(yLength) > 0) {
|
||||
//etch floor at this position
|
||||
var floorIndex = rng.generateRandomNumber() % 4; //NOTE: there might not always be only 4 floor sprites
|
||||
tilemap[y * CELL_WIDTH * CELL_COUNT_X * 3 + x * 3 + 0] = tileset[theme + "-floor-" + string floorIndex][0];
|
||||
tilemap[y * CELL_WIDTH * CELL_COUNT_X * 3 + x * 3 + 1] = tileset[theme + "-floor-" + string floorIndex][1];
|
||||
tilemap[y * CELL_WIDTH * CELL_COUNT_X * 3 + x * 3 + 2] = tileset[theme + "-floor-" + string floorIndex][2];
|
||||
var ITERATION: int const = y * MAP_GRID_WIDTH * 3 + x * 3;
|
||||
var r = rng.generateRandomNumber() % 4;
|
||||
var floorIndex: string const = theme + "-floor-" + string r; //NOTE: there might not always be only 4 floor sprites
|
||||
tilemap[ITERATION + 0] = tileset[floorIndex][0];
|
||||
tilemap[ITERATION + 1] = tileset[floorIndex][1];
|
||||
tilemap[ITERATION + 2] = tileset[floorIndex][2];
|
||||
|
||||
//tick down
|
||||
if (abs(xLength) > 0) {
|
||||
@@ -398,10 +402,13 @@ fn etchWalls(roomData) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var ITERATION: int const = j * MAP_GRID_WIDTH * 3 + i * 3;
|
||||
var theme = roomData[floor(i / CELL_WIDTH)][floor(j / CELL_HEIGHT)]["theme"];
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 0] = tileset[theme + "-" + signals[j * MAP_GRID_WIDTH + i]][0];
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 1] = tileset[theme + "-" + signals[j * MAP_GRID_WIDTH + i]][1];
|
||||
tilemap[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3 + 2] = tileset[theme + "-" + signals[j * MAP_GRID_WIDTH + i]][2];
|
||||
var index: string const = theme + "-" + signals[j * MAP_GRID_WIDTH + i];
|
||||
|
||||
tilemap[ITERATION + 0] = tileset[index][0];
|
||||
tilemap[ITERATION + 1] = tileset[index][1];
|
||||
tilemap[ITERATION + 2] = tileset[index][2];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -499,7 +506,7 @@ var marchingFilterResult: [string] const = [
|
||||
//if walkable is below, then return top, etc.
|
||||
fn parseTilemapAt(x: int, y: int) {
|
||||
//parse based on walkability, for now
|
||||
if (tilemap[y * CELL_WIDTH * CELL_COUNT_X * 3 + x * 3 + 2] != 0) {
|
||||
if (tilemap[y * MAP_GRID_WIDTH * 3 + x * 3 + 2] != 0) {
|
||||
return ""; //empty
|
||||
}
|
||||
|
||||
@@ -510,9 +517,9 @@ fn parseTilemapAt(x: int, y: int) {
|
||||
for (var i: int = 0; i < 12 -2; i++) {
|
||||
for (var j: int = 0; j < 12 -2; j++) {
|
||||
if (
|
||||
marchingFilter[(j + 0) * 12 + (i + 0)] == snapshot[0 * 3 + 0] &&
|
||||
marchingFilter[(j + 0) * 12 + (i + 1)] == snapshot[0 * 3 + 1] &&
|
||||
marchingFilter[(j + 0) * 12 + (i + 2)] == snapshot[0 * 3 + 2] &&
|
||||
marchingFilter[j * 12 + (i + 0)] == snapshot[0 * 3 + 0] &&
|
||||
marchingFilter[j * 12 + (i + 1)] == snapshot[0 * 3 + 1] &&
|
||||
marchingFilter[j * 12 + (i + 2)] == snapshot[0 * 3 + 2] &&
|
||||
|
||||
marchingFilter[(j + 1) * 12 + (i + 0)] == snapshot[1 * 3 + 0] &&
|
||||
marchingFilter[(j + 1) * 12 + (i + 1)] == snapshot[1 * 3 + 1] &&
|
||||
@@ -540,6 +547,7 @@ fn parseTilemapAt(x: int, y: int) {
|
||||
return "";
|
||||
}
|
||||
|
||||
//TODO: can this be optimized out?
|
||||
fn generateSnapshotAt(x: int, y: int) {
|
||||
var result: [int] = [];
|
||||
|
||||
@@ -549,7 +557,7 @@ fn generateSnapshotAt(x: int, y: int) {
|
||||
result.push(0);
|
||||
}
|
||||
else {
|
||||
result.push(tilemap[(y+j) * CELL_WIDTH * CELL_COUNT_X * 3 + (x+i) * 3 + 2] != 0 ? 1 : 0); //walkable
|
||||
result.push(tilemap[(y+j) * MAP_GRID_WIDTH * 3 + (x+i) * 3 + 2] != 0 ? 1 : 0); //walkable
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,9 @@ 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) {
|
||||
@@ -27,29 +30,31 @@ fn onLoad(node: opaque) {
|
||||
|
||||
//create a child as a render target
|
||||
var child: opaque = node.loadChildNode("scripts:/tilemap/renderer-child.toy");
|
||||
child.createNodeTexture(CELL_WIDTH * CELL_COUNT_X * TILE_PIXEL_WIDTH, CELL_HEIGHT * CELL_COUNT_Y * TILE_PIXEL_HEIGHT);
|
||||
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)";
|
||||
|
||||
print "start setting tilemap";
|
||||
|
||||
var child: opaque = node.getChildNode(0);
|
||||
setRenderTarget(child);
|
||||
|
||||
//draw the tilemap to the child
|
||||
for (var j = 0; j < CELL_HEIGHT * CELL_COUNT_Y; j++) {
|
||||
for (var i = 0; i < CELL_WIDTH * CELL_COUNT_X; i++) {
|
||||
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[j * CELL_WIDTH * CELL_COUNT_X * 3 + i * 3] < 0) {
|
||||
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[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,
|
||||
tilemap[ITERATION] * TILE_PIXEL_WIDTH,
|
||||
tilemap[ITERATION + 1] * TILE_PIXEL_HEIGHT,
|
||||
TILE_PIXEL_WIDTH, TILE_PIXEL_HEIGHT
|
||||
);
|
||||
|
||||
@@ -65,6 +70,4 @@ fn setTilemap(node: opaque, tilemap: [int]) {
|
||||
|
||||
//reset the render target to the screen
|
||||
setRenderTarget(null);
|
||||
|
||||
print "finished setting tilemap";
|
||||
}
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
|
||||
#include "drive_system.h"
|
||||
|
||||
#include "toy_memory.h"
|
||||
|
||||
//modified allocator
|
||||
void* speedyMemoryAllocator(void* pointer, size_t oldSize, size_t newSize) {
|
||||
return realloc(pointer, newSize);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
//debugging tools
|
||||
#ifdef _DEBUG
|
||||
@@ -9,6 +16,9 @@ int main(int argc, char* argv[]) {
|
||||
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||
#endif//win32 && debug
|
||||
|
||||
//set the memory allocator
|
||||
Toy_setMemoryAllocator(speedyMemoryAllocator);
|
||||
|
||||
//the drive system maps filepaths to "drives", which specifies which folders can be accessed by the scripts
|
||||
Toy_initDriveSystem();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user