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..6698087 160000 --- a/Toy +++ b/Toy @@ -1 +1 @@ -Subproject commit 6e9d42f892a8e4a4827904d928eb372a5508cabe +Subproject commit 669808730e3b881c0995408b8331e2e29d5943cc 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..2dfffeb --- /dev/null +++ b/assets/scripts/gameplay/tilemap.toy @@ -0,0 +1,75 @@ +import standard; +import node; + +//consts +var ROOM_WIDTH: int const = 5; +var ROOM_HEIGHT: int const = 5; + +var TILE_WIDTH: int const = 128; +var TILE_HEIGHT: int const = 128; + +//vars +var tilemap: [[int]] = null; + +//debug vars +var camX = 0; +var camY = 0; +var camW = 1080; +var camH = 720; + + + +//lifecycle functions +fn onInit(node: opaque) { + tilemap = generateBlankMap(ROOM_WIDTH, ROOM_HEIGHT); + + node.loadTexture("sprites:/tileset.png"); + node.setNodeRect(0, 0, 32, 32); + + //debug + print tilemap; + tilemap[1][1] = 1; + 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++) { + node.setCurrentNodeFrame(tilemap[i][j]); + node.drawNode(i * TILE_WIDTH, j * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT); + } + } +} + + +//utils functions +fn generateBlankMap(width: int, height: int) { + //generate the row template + var row: [int] = []; + for (var j: int = 0; j < height; j++) { + row.push(0); + } + + var result: [[int]] = []; + //generate the game map proper + for (var i: int = 0; i < width; i++) { + result.push(row); + } + + 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..b50809a 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);