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.ts56
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)
+ }
+
}