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