diff --git a/Airport.vcxproj b/Airport.vcxproj index 999d88a..9dbfdac 100644 --- a/Airport.vcxproj +++ b/Airport.vcxproj @@ -30,6 +30,7 @@ + diff --git a/Toy b/Toy index 6e9d42f..76ddd57 160000 --- a/Toy +++ b/Toy @@ -1 +1 @@ -Subproject commit 6e9d42f892a8e4a4827904d928eb372a5508cabe +Subproject commit 76ddd5703e73cc7435595f7b38c8d8a1c63a80d0 diff --git a/assets/scripts/gameplay/lejana.toy b/assets/scripts/gameplay/lejana.toy index e51303a..66744ae 100644 --- a/assets/scripts/gameplay/lejana.toy +++ b/assets/scripts/gameplay/lejana.toy @@ -31,7 +31,7 @@ fn faceUp(node: opaque) { } fn faceLeft(node: opaque) { - node.setNodeRect(32 * 8, 0, SPRITE_WIDTH, SPRITE_HEIGHT); + node.setNodeRect(32 * 12, 0, SPRITE_WIDTH, SPRITE_HEIGHT); node.setNodeFrames(4); } diff --git a/assets/scripts/gameplay/tilemap.toy b/assets/scripts/gameplay/tilemap.toy new file mode 100644 index 0000000..427faa2 --- /dev/null +++ b/assets/scripts/gameplay/tilemap.toy @@ -0,0 +1,111 @@ +import standard; +import node; + +//consts +var ROOM_WIDTH: int const = 8; +var ROOM_HEIGHT: int const = 8; + +var TILE_WIDTH: int const = 64; +var TILE_HEIGHT: int const = 64; + +//map between the identity and position on the sprite sheet +var tilemap: [[string]] = null; + +var tileset: [string : [int]] = [ + "pillar": [0, 0], + + "floor-0": [0, 1], + "floor-1": [1, 1], + "floor-2": [2, 1], + "floor-3": [3, 1], + + "wall-t": [0, 2], + "wall-b": [1, 2], + "wall-l": [2, 2], + "wall-r": [3, 2], + + "corner-tl": [0, 3], + "corner-tr": [1, 3], + "corner-bl": [2, 3], + "corner-br": [3, 3], + + "edge-tl": [0, 4], + "edge-tr": [1, 4], + "edge-bl": [2, 4], + "edge-br": [3, 4] +]; + + +//debug vars +var camX = 0; +var camY = 0; +var camW = 1080; +var camH = 720; + + +//lifecycle functions +fn onInit(node: opaque) { + tilemap = generateMap(ROOM_WIDTH, ROOM_HEIGHT); + + node.loadTexture("sprites:/tileset.png"); + + print tilemap; +} + +fn onDraw(node: opaque) { + //calc the region to render + var lowerX: int = round((camX - camW/2.0) / TILE_WIDTH); + var upperX: int = round((camX - camW*1.5) / TILE_WIDTH); + var lowerY: int = round((camY - camH/2.0) / TILE_HEIGHT); + var upperY: int = round((camY - camH*1.5) / TILE_HEIGHT); + + //bounds check + lowerX = max(0, lowerX); + upperX = min(upperX < 0 ? abs(upperX) : 0, ROOM_WIDTH); + lowerY = max(0, lowerY); + upperY = min(upperY < 0 ? abs(upperY) : 0, ROOM_HEIGHT); + + + //draw the tilemap + for (var j = lowerY; j < upperY; j++) { + for (var i = lowerX; i < upperX; i++) { + + var pos = tileset[tilemap[i][j]]; + node.setNodeRect(pos[0] * 16, pos[1] * 16, 16, 16); + + node.drawNode(i * TILE_WIDTH, j * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT); + } + } +} + + +//utils functions +fn generateMap(width: int, height: int) { + import random; + var rng: opaque = createRandomGenerator(clock().hash()); + + //generate an empty grid + var result: [[string]] = []; + var row: [string] = []; + for (var j: int = 0; j < height; j++) { + row.push("pillar"); + } + + for (var i: int = 0; i < width; i++) { + result.push(row); + } + + //generate the contents of the grid + for (var j: int = 0; j < height; j++) { + for (var i: int = 0; i < width; i++) { + //select a random floor tile + var x: int = rng.generateRandomNumber() % 4; + var t: string = "floor-" + string x; + + result[i][j] = t; + } + } + + return result; +} + diff --git a/assets/scripts/init.toy b/assets/scripts/init.toy index 614326f..f531a69 100644 --- a/assets/scripts/init.toy +++ b/assets/scripts/init.toy @@ -31,7 +31,7 @@ initWindow("Skyland", 1080, 720, false); //kick off the logic of the scene graph - loadRootNode("scripts:/gameplay/lejana.toy"); + loadRootNode("scripts:/gameplay/tilemap.toy"); } //Globals go here diff --git a/assets/sprites/lejana.png b/assets/sprites/lejana.png index e1b279f..0fcc02a 100644 Binary files a/assets/sprites/lejana.png and b/assets/sprites/lejana.png differ diff --git a/assets/sprites/tileset.png b/assets/sprites/tileset.png new file mode 100644 index 0000000..57e3535 Binary files /dev/null and b/assets/sprites/tileset.png differ diff --git a/box/box_engine.c b/box/box_engine.c index 8d5cd30..55d0a84 100644 --- a/box/box_engine.c +++ b/box/box_engine.c @@ -432,7 +432,7 @@ void Box_execEngine() { } //render the world - SDL_SetRenderDrawColor(engine.renderer, 0, 0, 0, 255); //NOTE: This line can be disabled later + SDL_SetRenderDrawColor(engine.renderer, 128, 128, 128, 255); //NOTE: This line can be disabled later SDL_RenderClear(engine.renderer); //NOTE: This line can be disabled later Box_callRecursiveEngineNode(engine.rootNode, &engine.interpreter, "onDraw", NULL); diff --git a/box/lib_node.c b/box/lib_node.c index 6712b31..ac5f323 100644 --- a/box/lib_node.c +++ b/box/lib_node.c @@ -594,7 +594,7 @@ static int nativeSetCurrentNodeFrame(Toy_Interpreter* interpreter, Toy_LiteralAr //actually set Box_EngineNode* node = (Box_EngineNode*)TOY_AS_OPAQUE(nodeLiteral); - Box_setFramesEngineNode(node, TOY_AS_INTEGER(currentFrameLiteral)); + Box_setCurrentFrameEngineNode(node, TOY_AS_INTEGER(currentFrameLiteral)); //cleanup Toy_freeLiteral(nodeLiteral);