summaryrefslogtreecommitdiff
path: root/client/src/map.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--client/src/map.ts72
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)