From f71caaf9ed61c39e9284510ac5c7056d7444546f Mon Sep 17 00:00:00 2001 From: Aaron Delasy Date: Wed, 6 Nov 2024 04:29:01 +0200 Subject: [PATCH] Update renderer background logic --- public/tile-map.png | Bin 19836 -> 19567 bytes renderer/Background.ts | 126 ++++++++++++++++++++--------------------- 2 files changed, 60 insertions(+), 66 deletions(-) diff --git a/public/tile-map.png b/public/tile-map.png index 255c1e5aa0fdd9429b7af092483e39d2526581cd..4695ed8efc78cd26696a38ebc2c23a3b766ac508 100644 GIT binary patch literal 19567 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 literal 19836 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 buP=iZkj(+aAaE&oGKlhY^>bP0l+XkKo^ce^ diff --git a/renderer/Background.ts b/renderer/Background.ts index 10e7103..00548c4 100644 --- a/renderer/Background.ts +++ b/renderer/Background.ts @@ -1,95 +1,89 @@ +import { canvasToImage } from "../lib/canvasToImage"; +import { createCanvas } from "../lib/createCanvas"; +import { ZombieSurvival } from "../simulator"; import { assets } from "./Assets"; -import { canvasToImage } from "@/lib/canvasToImage"; -import { createCanvas } from "@/lib/createCanvas"; -import { ZombieSurvival } from "@/simulator"; -export const BITMASK_TO_TILE_INDEX = { +export const BITMASK_TO_TILE_INDEX: Record = { 0: 0, - 4: 1, - 92: 2, - 124: 3, - 116: 4, - 80: 5, - // no index 6: tile not used - 16: 7, - 20: 8, - 87: 9, - 223: 10, - 241: 11, - 21: 12, - 64: 13, - 29: 14, - 117: 15, - 85: 16, - 71: 17, - 221: 18, - 125: 19, - 112: 20, - 31: 21, - 253: 22, - 113: 23, - 28: 24, - 127: 25, - 247: 26, - 209: 27, - 23: 28, - 199: 29, - 213: 30, - 95: 31, - 255: 32, - 245: 33, - 81: 34, - 5: 35, - 84: 36, - 93: 37, - 119: 38, - 215: 39, - 193: 40, - 17: 41, - // no index 42: tile not used - 1: 43, - 7: 44, - 197: 45, - 69: 46, - 68: 47, - 65: 48, + 16: 1, + 88: 2, + 216: 3, + 248: 4, + 120: 5, + 72: 6, + 64: 7, + 208: 8, + 122: 9, + 222: 10, + 255: 11, + 251: 12, + 106: 13, + 82: 14, + 94: 15, + 219: 16, + 254: 17, + // 18 not used + 127: 19, + 75: 20, + 210: 21, + 250: 22, + 126: 23, + 31: 24, + 95: 25, + 91: 26, + 74: 27, + 214: 28, + // 29 not used + 107: 30, + 80: 31, + 10: 32, + 66: 33, + 2: 34, + 86: 35, + 223: 36, + 123: 37, + 90: 38, + 24: 39, + 218: 40, + 104: 41, + 18: 42, + 30: 43, + 27: 44, + 26: 45, + 8: 46, + 22: 47, + 11: 48, } as const; const neighborOffsets = [ + [-1, -1], [0, -1], [1, -1], + [-1, 0], [1, 0], - [1, 1], - [0, 1], [-1, 1], - [-1, 0], - [-1, -1], + [0, 1], + [1, 1], ] as const; export function getBitMask( map: string[][], x: number, y: number, - outOfBound = 1, + outOfBoundToken = " ", ) { - const width = ZombieSurvival.boardWidth(map); - const height = ZombieSurvival.boardHeight(map); - let bitmask = 0; for (let i = 0; i < neighborOffsets.length; i++) { const [dx, dy] = neighborOffsets[i]; - const nx = x + dx; - const ny = y + dy; + const token = map[y + dy]?.[x + dx] ?? outOfBoundToken; - if (ny < 0 || ny >= height || nx < 0 || nx >= width) { - bitmask |= outOfBound << i; - } else if (map[ny][nx] === "R") { + if (token === "R") { bitmask |= 1 << i; } } - return bitmask as keyof typeof BITMASK_TO_TILE_INDEX; + return bitmask; } export async function generateBg(