diff options
Diffstat (limited to 'client/src/editor.ts')
-rw-r--r-- | client/src/editor.ts | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/client/src/editor.ts b/client/src/editor.ts index 77088ce..1abaad4 100644 --- a/client/src/editor.ts +++ b/client/src/editor.ts @@ -1,11 +1,11 @@ -import { genMap } from "./map.js" +import { genMap, compressMap, decompressMap } from "./map.js" import { startGraphicsUpdater } from "./renderer.js" import { GameState, Vec2, Tile } from "./types.js" const mapgen = document.getElementById("mapgen") const sidebar = document.getElementById("sidebar") -mapgen.onsubmit = async function(event) { +mapgen.onsubmit = async (event) => { event.preventDefault() const width_str = (<HTMLInputElement>document.getElementById("width")).value @@ -86,31 +86,33 @@ const getTilePos = (width: number, height: number, mousePos: Vec2): Vec2 => { } -const checkInputs = (pressed: {[key: string]: boolean}): Tile => { +const checkInputs = (pressed: {[key: string]: boolean}): [Tile, boolean] => { if (pressed["KeyW"]) { - return Tile.WALL + return [Tile.WALL, false] } else if (pressed["KeyG"]) { - return Tile.GHOST_WALL + return [Tile.GHOST_WALL, false] + } else if (pressed["KeyH"]) { + return [Tile.GHOST_SPAWN, true] } else if (pressed["KeyF"]) { - return Tile.FOOD + return [Tile.FOOD, false] } else if (pressed["Digit1"]) { - return Tile.PLAYER_SPAWN_1 + return [Tile.PLAYER_SPAWN_1, true] } else if (pressed["Digit2"]) { - return Tile.PLAYER_SPAWN_2 + return [Tile.PLAYER_SPAWN_2, true] } else if (pressed["Digit3"]) { - return Tile.PLAYER_SPAWN_3 + return [Tile.PLAYER_SPAWN_3, true] } else if (pressed["Digit4"]) { - return Tile.PLAYER_SPAWN_4 + return [Tile.PLAYER_SPAWN_4, true] } else if (pressed["KeyT"]) { - return Tile.THICC_DOT + return [Tile.THICC_DOT, false] } else if (pressed["KeyI"]) { - return Tile.INITIAL_DOT + return [Tile.INITIAL_DOT, false] } else if (pressed["KeyC"]) { - return Tile.EMPTY + return [Tile.EMPTY, false] } - return undefined + return [undefined, undefined] } const checkBounds = (tilePos: Vec2, width: number, height: number) => { @@ -124,7 +126,7 @@ const runMapEditor = (width: number, height: number) => { let data: number[] = new Array(width * height).fill(0) - genMap(width, height, data, Tile.EMPTY) + let map = genMap(width, height, data, Tile.EMPTY) let state: GameState = { started: true, @@ -145,13 +147,19 @@ const runMapEditor = (width: number, height: number) => { const tilePos = getTilePos(width, height, mousePos) const pressed = getInput() - const tile = checkInputs(pressed) + const [tile, unique] = checkInputs(pressed) if (tile !== undefined && checkBounds(tilePos, width, height)) { let current = data[tilePos.y * width + tilePos.x]; - if (current != tile) { + if (current != tile && (current == Tile.EMPTY || tile == Tile.EMPTY)) { + if (unique) { + data = data.map(t => { + if (t == tile) return Tile.EMPTY + else return t + }) + } data[tilePos.y * width + tilePos.x] = tile - genMap(width, height, data, 0) + map = genMap(width, height, data, 0) } } @@ -162,4 +170,16 @@ const runMapEditor = (width: number, height: number) => { requestAnimationFrame(loop) + document.getElementById("export").onclick = () => { + let encoded = compressMap(map) + document.getElementById("textarea").textContent = encoded + document.getElementById("popup").style.display = 'flex' + + console.log(decompressMap(encoded)) + } + + document.getElementById("copy").onclick = () => { + navigator.clipboard.writeText(document.getElementById("textarea").textContent) + } + } |