diff options
Diffstat (limited to '')
-rw-r--r-- | client/src/map.ts | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/client/src/map.ts b/client/src/map.ts index 1ad6d63..70de0b8 100644 --- a/client/src/map.ts +++ b/client/src/map.ts @@ -1,4 +1,4 @@ -import { Wall, ItemType, Map, Maps, Items, Tile } from "./types.js" +import { Wall, ItemType, Map, Maps, Items, Tile, SpawnIndex, Vec2 } from "./types.js" import { LZString } from "./lib/lz-string.js" export const getItemKey = ( @@ -165,6 +165,76 @@ export const getMap = (mapId: number): Map | undefined => { return mapData[mapId] } +export const checkMap = (map: Map): [boolean, string | Vec2[]] => { + let spawns = new Array(5).fill(undefined) + let hasFood = false + let hasThicc = false + let hasInitial = false + + if (map.width < 5 || map.height < 5 || map.width > 50 || map.height > 50) { + return [false, "Map but be between either 5 or 50 on both axies"] + } + + for (let y = 0; y < map.height; y++) { + for (let x = 0; x < map.width; x++) { + + let type = map.data[y * map.width + x] + + switch (type) { + case Tile.FOOD: + hasFood = true + break + case Tile.THICC_DOT: + hasThicc = true + break + case Tile.INITIAL_DOT: + hasInitial = true + break + case Tile.PLAYER_SPAWN_1: + if (spawns[SpawnIndex.PAC_SPAWN_1]) + return [false, "Map cannot have duplicate spawns"] + spawns[SpawnIndex.PAC_SPAWN_1] = {x, y} + break + case Tile.PLAYER_SPAWN_2: + if (spawns[SpawnIndex.PAC_SPAWN_2]) + return [false, "Map cannot have duplicate spawns"] + spawns[SpawnIndex.PAC_SPAWN_2] = {x, y} + break + case Tile.PLAYER_SPAWN_3: + if (spawns[SpawnIndex.PAC_SPAWN_3]) + return [false, "Map cannot have duplicate spawns"] + spawns[SpawnIndex.PAC_SPAWN_3] = {x, y} + break + case Tile.PLAYER_SPAWN_4: + if (spawns[SpawnIndex.PAC_SPAWN_4]) + return [false, "Map cannot have duplicate spawns"] + spawns[SpawnIndex.PAC_SPAWN_4] = {x, y} + break + case Tile.GHOST_SPAWN: + if (spawns[SpawnIndex.GHOST_SPAWN]) + return [false, "Map cannot have duplicate spawns"] + spawns[SpawnIndex.GHOST_SPAWN] = {x, y} + break + } + + } + } + + if (!hasFood) + return [false, "Map must have at least 1 food"] + + if (!hasThicc) + return [false, "Map must have at least 1 thicc dot"] + + if (!hasInitial) + return [false, "Map must have at least 1 initial dot"] + + if (spawns.filter(s => s === undefined).length > 0) + return [false, "Map must have 4 pac spawns and 1 ghost spawn"] + + return [true, spawns] +} + export const compressMap = (map: Map): string => { let encoded = map.width + '|' + map.height + '|' + map.data.map(n => n + ',').join('').slice(0, -1) return LZString.compressToBase64(encoded) |