From 2fe6cd6f7482278b328a7b2593120258d7af9626 Mon Sep 17 00:00:00 2001 From: Ratstail91 Date: Sun, 5 Mar 2023 03:24:20 +1100 Subject: [PATCH] Collision map baked --- assets/scripts/gameplay/tilemap.toy | 93 ++++++++++++++++++++-------- assets/sprites/tileset.png | Bin 1858 -> 1857 bytes 2 files changed, 68 insertions(+), 25 deletions(-) diff --git a/assets/scripts/gameplay/tilemap.toy b/assets/scripts/gameplay/tilemap.toy index 427faa2..fecee15 100644 --- a/assets/scripts/gameplay/tilemap.toy +++ b/assets/scripts/gameplay/tilemap.toy @@ -10,29 +10,30 @@ var TILE_HEIGHT: int const = 64; //map between the identity and position on the sprite sheet var tilemap: [[string]] = null; +var collisions: [[bool]] = null; var tileset: [string : [int]] = [ - "pillar": [0, 0], + "pillar": [0, 0, 1], - "floor-0": [0, 1], - "floor-1": [1, 1], - "floor-2": [2, 1], - "floor-3": [3, 1], + "floor-0": [0, 1, 0], + "floor-1": [1, 1, 0], + "floor-2": [2, 1, 0], + "floor-3": [3, 1, 0], - "wall-t": [0, 2], - "wall-b": [1, 2], - "wall-l": [2, 2], - "wall-r": [3, 2], + "wall-t": [0, 2, 1], + "wall-b": [1, 2, 1], + "wall-l": [2, 2, 1], + "wall-r": [3, 2, 1], - "corner-tl": [0, 3], - "corner-tr": [1, 3], - "corner-bl": [2, 3], - "corner-br": [3, 3], + "corner-tl": [0, 3, 1], + "corner-tr": [1, 3, 1], + "corner-bl": [2, 3, 1], + "corner-br": [3, 3, 1], - "edge-tl": [0, 4], - "edge-tr": [1, 4], - "edge-bl": [2, 4], - "edge-br": [3, 4] + "edge-tl": [0, 4, 1], + "edge-tr": [1, 4, 1], + "edge-bl": [2, 4, 1], + "edge-br": [3, 4, 1] ]; @@ -45,11 +46,13 @@ var camH = 720; //lifecycle functions fn onInit(node: opaque) { - tilemap = generateMap(ROOM_WIDTH, ROOM_HEIGHT); - node.loadTexture("sprites:/tileset.png"); + tilemap = generateTilemap(clock().hash(), ROOM_WIDTH, ROOM_HEIGHT); + collisions = bakeCollisionMap(tilemap, ROOM_WIDTH, ROOM_HEIGHT); + print tilemap; + print collisions; } fn onDraw(node: opaque) { @@ -79,10 +82,10 @@ fn onDraw(node: opaque) { } -//utils functions -fn generateMap(width: int, height: int) { +//utils functions for map generation +fn generateTilemap(seed: int, width: int, height: int) { import random; - var rng: opaque = createRandomGenerator(clock().hash()); + var rng: opaque = createRandomGenerator(seed); //generate an empty grid var result: [[string]] = []; @@ -95,9 +98,9 @@ fn generateMap(width: int, height: int) { 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++) { + //generate the contents of the grid - floor + for (var j: int = 1; j < height - 1; j++) { + for (var i: int = 1; i < width - 1; i++) { //select a random floor tile var x: int = rng.generateRandomNumber() % 4; var t: string = "floor-" + string x; @@ -106,6 +109,46 @@ fn generateMap(width: int, height: int) { } } + //draw top and bottom walls + for (var i: int = 1; i < width - 1; i++) { + result[i][0] = "wall-t"; + result[i][height - 1] = "wall-b"; + } + + //draw the left and right walls + for (var j: int = 1; j < height - 1; j++) { + result[0][j] = "wall-l"; + result[width-1][j] = "wall-r"; + } + + //draw the corners + result[0][0] = "corner-tl"; + result[width - 1][0] = "corner-tr"; + result[0][height - 1] = "corner-bl"; + result[width - 1][height - 1] = "corner-br"; + return result; } +fn bakeCollisionMap(tilemap: [[string]], width: int, height: int) { + //generate an empty grid + var result: [[bool]] = []; + var row: [bool] = []; + for (var j: int = 0; j < height; j++) { + row.push(false); + } + + for (var i: int = 0; i < width; i++) { + result.push(row); + } + + //extract the collision map + for (var j: int = 0; j < height; j++) { + for (var i: int = 0; i < width; i++) { + //almost - you still need one pair of parentheses + result[i][j] = (tileset[ tilemap[i][j] ][2] != 0); + } + } + + return result; +} diff --git a/assets/sprites/tileset.png b/assets/sprites/tileset.png index 57e353517a2431395da7f712deaa5e09b3c28a27..cb6e6c5faab89773dc46eca590be4e7e0e6494b5 100644 GIT binary patch delta 1791 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 ifJ42Xr=Kq;C;tFRQYDx|N4!Y@0000qdv