diff options
Diffstat (limited to '')
-rw-r--r-- | client/src/editor.ts | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/client/src/editor.ts b/client/src/editor.ts index 0be5c68..0f72545 100644 --- a/client/src/editor.ts +++ b/client/src/editor.ts @@ -1,9 +1,10 @@ import { InitialState } from "./logic/logic.js" -import { genMap, compressMap, decompressMap } from "./map.js" +import { genMap, compressMap, decompressMap, checkMap } from "./map.js" import { startGraphicsUpdater } from "./renderer.js" import { GameState, Vec2, Tile } from "./types.js" const mapgen = document.getElementById("mapgen") +const mapload = document.getElementById("mapload") const sidebar = document.getElementById("sidebar") mapgen.onsubmit = async (event) => { @@ -21,10 +22,30 @@ mapgen.onsubmit = async (event) => { } mapgen.style.display = "none" + mapload.style.display = "none" runMapEditor(width, height) } +mapload.onsubmit = async (event) => { + event.preventDefault() + + const data_str = (<HTMLInputElement>document.getElementById("data")).value + const {width, height, data} = decompressMap(data_str) + const map = genMap(width, height, data, 0) + const [success, result] = checkMap(map) + + if (!success) { + alert(result as String) + return + } + + mapgen.style.display = "none" + mapload.style.display = "none" + + runMapEditor(width, height, data) +} + const startKeyListener = () => { let keys = {} @@ -93,6 +114,8 @@ const checkInputs = (pressed: {[key: string]: boolean}): [Tile, boolean] => { return [Tile.WALL, false] } else if (pressed["KeyG"]) { return [Tile.GHOST_WALL, false] + } else if (pressed["KeyR"]) { + return [Tile.GHOST_EXIT, true] } else if (pressed["KeyH"]) { return [Tile.GHOST_SPAWN, true] } else if (pressed["KeyF"]) { @@ -121,12 +144,11 @@ const checkBounds = (tilePos: Vec2, width: number, height: number) => { return true } -const runMapEditor = (width: number, height: number) => { +const runMapEditor = (width: number, height: number, map_data: number[] = undefined) => { sidebar.style.display = "" - let data: number[] = new Array(width * height).fill(0) - + let data: number[] = map_data ? map_data : new Array(width * height).fill(0) let map = genMap(width, height, data, Tile.EMPTY) let state: GameState = structuredClone(InitialState); @@ -168,6 +190,13 @@ const runMapEditor = (width: number, height: number) => { requestAnimationFrame(loop) document.getElementById("export").onclick = () => { + + let [success, status] = checkMap(map) + if (!success) { + alert(status) + return + } + let encoded = compressMap(map) document.getElementById("textarea").textContent = encoded document.getElementById("popup").style.display = 'flex' |