From b45386ce69419e05b51220ddb11bf59bdc76a01f Mon Sep 17 00:00:00 2001
From: Bye <bye@byecorps.com>
Date: Wed, 16 Aug 2023 14:31:03 +0100
Subject: [PATCH] Remove mistakingly committed dist shit

---
 dist/game.js     | 400 -----------------------------------------------
 dist/game.js.map |   7 -
 2 files changed, 407 deletions(-)
 delete mode 100644 dist/game.js
 delete mode 100644 dist/game.js.map

diff --git a/dist/game.js b/dist/game.js
deleted file mode 100644
index 9805237..0000000
--- a/dist/game.js
+++ /dev/null
@@ -1,400 +0,0 @@
-(() => {
-  // src/js/config.js
-  var GAME_TITLE = "Untitled JS13K23 Game.";
-  var WIDTH = 256;
-  var HEIGHT = 240;
-  var SCALE = 2 << 4;
-
-  // src/js/utils.js
-  var params = new URLSearchParams(location.search);
-  var convertTileToScreen = (x, y) => ({x: x * SCALE, y: y * SCALE});
-  var getParameter = (key) => key ? params.get(key) : 0;
-  var hash = window.location.hash.split("?")[0].slice(1);
-
-  // src/js/canvas.js
-  var Canvas = class {
-    constructor(id = "c", w = 128, h = 128) {
-      this.canvas = document.getElementById(id);
-      this.canvas.width = w;
-      this.canvas.height = h;
-      this.ctx = this.canvas.getContext("2d");
-      this.ctx.imageSmoothingEnabled = false;
-      this.ctx.textBaseline = "top";
-      this.width = this.canvas.width;
-      this.height = this.canvas.height;
-      this.cX = 0;
-      this.cY = 0;
-    }
-    fill(c = "black") {
-      this.ctx.fillStyle = c;
-      this.ctx.fillRect(0, 0, this.width, this.height);
-    }
-    drawImage(image, x, y, width = image.width, height = image.height) {
-      this.ctx.drawImage(image, x - this.cX, y - this.cY, width, height);
-    }
-    sliceImage(img, x, y, w, h, cropX, cropY, cropW, cropH, direction = 0) {
-      this.ctx.save();
-      this.ctx.translate(x + w / 2 - this.cX, y + h / 2 - this.cY);
-      this.ctx.rotate(direction);
-      this.ctx.drawImage(img, cropX, cropY, cropW, cropH, -w / 2, -h / 2, w, h);
-      this.ctx.restore();
-    }
-    drawText(text2, x, y, c = "white", size = 16, font = "monospace") {
-      this.ctx.fillStyle = c;
-      this.ctx.font = `${size}px ${font}`;
-      this.ctx.fillText(text2, x, y);
-    }
-    drawLine(x1, y1, x2, y2, c = "white", w = 1) {
-      this.ctx.strokeStyle = c;
-      this.ctx.lineWidth = w;
-      this.ctx.beginPath();
-      this.ctx.moveTo(x1 - this.cX, y1 - this.cY);
-      this.ctx.lineTo(x2 - this.cX, y2 - this.cY);
-      this.ctx.stroke();
-    }
-  };
-
-  // src/js/text.js
-  var TextRenderer = class {
-    constructor(canvas2, fontimg) {
-      this.fontimg = fontimg;
-      this.fontWidth = 7;
-      this.fontHeight = 7;
-      this.fontChars = "abcdefghijklmnopqrstuvwxyz1234567890.,!?:;)(~>";
-      this.canvas = canvas2;
-    }
-    drawLetter(letter, x, y, substituteOK = 1) {
-      let {canvas: canvas2, fontWidth, fontHeight} = this;
-      let index = this.fontChars.indexOf(letter.toLowerCase());
-      if (index == -1) {
-        if (!substituteOK)
-          return;
-        canvas2.drawText(letter, x, y, "#ffffff", 7, "monospace");
-      }
-      let sx = index * fontWidth;
-      let sy = 0;
-      let yOffset = 0;
-      if (letter == ",") {
-        yOffset = -1;
-      }
-      canvas2.sliceImage(this.fontimg, x + canvas2.cX, y + yOffset + canvas2.cY, fontWidth, fontHeight, sx, sy, fontWidth, fontHeight);
-    }
-    render(text2, x, y) {
-      let heightOffset = 0;
-      let xOffset = 0;
-      for (let i = 0; i < text2.length; i++) {
-        if (text2[i] == "\n") {
-          heightOffset++;
-          xOffset = 0;
-          continue;
-        }
-        this.drawLetter(text2[i], x + xOffset * this.fontWidth, y + heightOffset * this.fontHeight);
-        xOffset++;
-      }
-    }
-    throwPanic = (err) => {
-      this.canvas.fill("#00000080");
-      this.render(err, 0, 0);
-      throw err;
-    };
-  };
-
-  // src/js/objects.js
-  var Object2 = class {
-    draw() {
-    }
-    step() {
-    }
-  };
-  var Room = class extends Object2 {
-    constructor(name = "") {
-      super();
-      this.objects = [];
-      this.name = name;
-    }
-    draw() {
-      for (let i = 0; i < this.objects.length; i++) {
-        this.objects[i].draw();
-      }
-    }
-    drawGUI() {
-    }
-    keyDown(key) {
-    }
-    keyUp(key) {
-    }
-    step() {
-      for (let i = 0; i < this.objects.length; i++) {
-        this.objects[i].step();
-      }
-    }
-  };
-
-  // src/js/keyboard.js
-  var KEYS = {};
-  var _isKeyDown = (code) => KEYS[code] || 0;
-  var _releaseKey = (code) => delete KEYS[code];
-  addEventListener("keydown", (e) => {
-    e.preventDefault();
-    if (!e.repeat) {
-      KEYS[e.code] = performance.now();
-    }
-  });
-  addEventListener("keyup", (e) => _releaseKey(e.code));
-  var whichKeyDown = () => Object.keys(KEYS).filter((code) => _isKeyDown(code));
-
-  // src/js/game.js
-  var assets = {
-    images: {
-      splash: "../img/splash1.webp",
-      font: "../img/hampsterfont.webp",
-      tiles: "../img/t.webp",
-      selector: "../img/selector.webp"
-    },
-    spritesheets: {
-      player: [
-        {x: 0},
-        {x: 16},
-        {x: 32},
-        {x: 48}
-      ]
-    }
-  };
-  var tileTypes = {
-    1: 1,
-    2: 2
-  };
-  var running = 1;
-  var currentFrame = 0;
-  var targetFrames = 60;
-  var lastFrameTime = performance.now();
-  var debug = getParameter("debug") || 0;
-  var rooms = [];
-  var debugStatuses = [];
-  var canvas = new Canvas("c", WIDTH, HEIGHT);
-  var text;
-  var pressedLastFrame = [];
-  canvas.fill("#222034");
-  var splash = new Image();
-  splash.src = assets.images.splash;
-  splash.onload = () => {
-    canvas.drawImage(splash, canvas.width / 2 - splash.width / 2, canvas.height / 2 - splash.height / 2);
-    let font = new Image();
-    font.src = assets.images.font;
-    font.onload = () => {
-      console.log("font loaded");
-      text = new TextRenderer(canvas, font);
-      window.onerror = (e) => {
-        running = 0;
-        text.throwPanic(e);
-      };
-    };
-  };
-  var roomIndex = 0;
-  var currentRoom = rooms[roomIndex];
-  var searchForRoom = (name) => {
-    for (let i = 0; i < rooms.length; i++) {
-      if (rooms[i].name == name)
-        return i;
-    }
-    throw new Error("Room not found:" + name + ". Are you sure it's pushed?");
-  };
-  var changeRoom = (index) => {
-    currentRoom = rooms[index];
-    roomIndex = index;
-  };
-  var loadingRoom = new Room("loading");
-  loadingRoom.updateStatus = (status) => {
-    console.log(status);
-    canvas.fill("#222034");
-    canvas.drawImage(splash, canvas.width / 2 - splash.width / 2, canvas.height / 2 - splash.height / 2);
-    text.render(status, 0, 0);
-  };
-  var debugRoom = new Room("debug");
-  debugRoom.draw = () => {
-    canvas.fill("black");
-  };
-  debugRoom.drawGUI = () => {
-    debugStatuses.push("Current Frame:" + currentFrame + `(~${Math.round(currentFrame / targetFrames * 100) / 100} sec)`);
-  };
-  debugRoom.keyDown = (key) => {
-    if (key == "Escape")
-      changeRoom(searchForRoom("menu"));
-  };
-  var menuRoom = new Room("menu");
-  menuRoom.options = [
-    {label: "Start Game", action: (_) => {
-      changeRoom(searchForRoom("game"));
-    }}
-  ];
-  menuRoom.index = 0;
-  menuRoom.draw = () => {
-    canvas.fill("black");
-  };
-  menuRoom.drawGUI = () => {
-    text.render(GAME_TITLE, 8, 7 * 4);
-    for (let i = 0; i < menuRoom.options.length; i++) {
-      if (i == menuRoom.index) {
-        text.render(">", 8, 7 * (i + 5));
-      }
-      text.render(menuRoom.options[i].label, 16, 7 * (i + 5));
-    }
-  };
-  menuRoom.keyDown = (key) => {
-    if (pressedLastFrame.includes(key))
-      return;
-    const keyActions = {
-      ArrowUp: () => menuRoom.index--,
-      ArrowDown: () => menuRoom.index++,
-      Enter: () => menuRoom.options[menuRoom.index].action()
-    };
-    const action = keyActions[key];
-    if (action)
-      action();
-    if (menuRoom.index >= menuRoom.options.length)
-      menuRoom.index = 0;
-    if (menuRoom.index < 0)
-      menuRoom.index = menuRoom.options.length - 1;
-  };
-  var getTileType = (x, y, data) => {
-    for (let i = 0; i < data.tiles.length; i++) {
-      let tile = data.tiles[i];
-      if (tile.x == x && tile.y == y)
-        return tileTypes[tile.id];
-    }
-    return 0;
-  };
-  var renderTiles = (data) => {
-    for (let i = 0; i < data.tiles.length; i++) {
-      let tile = data.tiles[i];
-      let tileLocation = convertTileToScreen(tile.x, tile.y);
-      let tId = tile.id;
-      if (tile.id == 2) {
-        tId = 3;
-        getTileType(tile.x, tile.y - 1, data) == 2 ? tId += 1 : tId += 0;
-        getTileType(tile.x, tile.y + 1, data) == 2 ? tId += 2 : tId += 0;
-        getTileType(tile.x - 1, tile.y, data) == 2 ? tId += 4 : tId += 0;
-        getTileType(tile.x + 1, tile.y, data) == 2 ? tId += 8 : tId += 0;
-      }
-      canvas.sliceImage(assets.images.tiles, tileLocation.x, tileLocation.y, SCALE, SCALE, tId * 16, 0, 16, 16);
-    }
-  };
-  var gameRoom = new Room("game");
-  gameRoom.data = {tiles: []};
-  gameRoom.draw = () => {
-    canvas.fill("black");
-    renderTiles(gameRoom.data);
-  };
-  var levelEditor = new Room("editor");
-  levelEditor.currentTile = {x: 0, y: 0, id: 0};
-  levelEditor.data = {tiles: []};
-  levelEditor.step = (_) => {
-    let tileLocation = convertTileToScreen(levelEditor.currentTile.x, levelEditor.currentTile.y);
-    if (tileLocation.x < canvas.cX)
-      canvas.cX = tileLocation.x;
-    if (tileLocation.x >= canvas.cX + 256)
-      canvas.cX = tileLocation.x - canvas.width;
-    if (tileLocation.y < canvas.cY)
-      canvas.cY = tileLocation.y;
-    if (tileLocation.y > canvas.cY + 224)
-      canvas.cY = tileLocation.y - canvas.height;
-    debugStatuses.push("Current tile:" + levelEditor.currentTile.x + "," + levelEditor.currentTile.y);
-    debugStatuses.push("Current tile ID:" + levelEditor.currentTile.id);
-    debugStatuses.push("Camera:" + canvas.cX + "," + canvas.cY);
-  };
-  levelEditor.keyDown = (key) => {
-    if (pressedLastFrame.includes(key))
-      return;
-    const {currentTile, data} = levelEditor;
-    const {x, y, id} = currentTile;
-    const keyActions = {
-      ArrowUp: () => currentTile.y--,
-      ArrowDown: () => currentTile.y++,
-      ArrowLeft: () => currentTile.x--,
-      ArrowRight: () => currentTile.x++,
-      PageUp: () => currentTile.id++,
-      PageDown: () => currentTile.id--,
-      KeyP: () => console.log(data),
-      Enter: () => {
-        data.tiles = data.tiles.filter((tile) => tile.x !== x || tile.y !== y);
-        data.tiles.push({id, x, y});
-      }
-    };
-    const action = keyActions[key];
-    if (action)
-      action();
-  };
-  levelEditor.draw = () => {
-    canvas.fill("#010101");
-    renderTiles(levelEditor.data);
-    canvas.drawLine(-canvas.width * 100, 0, canvas.width * 100, 0, "white");
-    canvas.drawLine(0, -canvas.height * 100, 0, canvas.height * 100, "white");
-    text.render("(0,0)", 1 - canvas.cX, 1 - canvas.cY);
-    let tileLocation = convertTileToScreen(levelEditor.currentTile.x, levelEditor.currentTile.y);
-    canvas.ctx.globalAlpha = 0.5;
-    canvas.sliceImage(assets.images.tiles, tileLocation.x, tileLocation.y, SCALE, SCALE, levelEditor.currentTile.id * 16, 0, 16, 16);
-    canvas.ctx.globalAlpha = 1;
-    canvas.drawImage(assets.images.selector, tileLocation.x, tileLocation.y, SCALE, SCALE);
-  };
-  rooms.push(loadingRoom);
-  rooms.push(menuRoom);
-  rooms.push(gameRoom);
-  rooms.push(levelEditor);
-  rooms.push(debugRoom);
-  currentRoom = rooms[roomIndex];
-  var main = () => {
-    if (!running)
-      return;
-    requestAnimationFrame(main);
-    let now = performance.now();
-    let delta = now - lastFrameTime;
-    if (delta < 1e3 / targetFrames)
-      return;
-    currentFrame++;
-    debugStatuses = [];
-    currentRoom.step();
-    currentRoom.draw();
-    currentRoom.drawGUI();
-    let currentKeys = whichKeyDown();
-    for (let i = 0; i < currentKeys.length; i++) {
-      if (debug)
-        debugStatuses.push(currentKeys[i]);
-      currentRoom.keyDown(currentKeys[i]);
-    }
-    pressedLastFrame = currentKeys;
-    if (debug) {
-      text.render("FPS:" + Math.round(1e3 / delta), 0, 0);
-      text.render(currentRoom.name, canvas.width - 8 * currentRoom.name.length, 0);
-      debugStatuses.push("Debug mode");
-      if (currentFrame <= 60 * 5) {
-        debugStatuses.push("Dimensions:" + canvas.width + "x" + canvas.height);
-        debugStatuses.push("Have fun!");
-      }
-    }
-    for (let i = 0; i < debugStatuses.length; i++) {
-      text.render(debugStatuses[i], 0, canvas.height - 7 * (debugStatuses.length - i));
-    }
-    lastFrameTime = now;
-  };
-  var init = () => {
-    currentRoom.updateStatus("Loading images...");
-    for (let image in assets.images) {
-      currentRoom.updateStatus("Loading image " + image);
-      let img = new Image();
-      img.src = assets.images[image];
-      img.onload = () => {
-        assets.images[image] = img;
-      };
-    }
-    console.log("Images loaded.");
-    currentRoom.updateStatus("Loading complete!");
-    setTimeout(() => {
-      main();
-    }, 1e3);
-  };
-  window.onload = () => {
-    document.title = GAME_TITLE;
-    init();
-  };
-})();
-//# sourceMappingURL=game.js.map
diff --git a/dist/game.js.map b/dist/game.js.map
deleted file mode 100644
index 7dcd7b8..0000000
--- a/dist/game.js.map
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "version": 3,
-  "sources": ["../src/js/config.js", "../src/js/utils.js", "../src/js/canvas.js", "../src/js/text.js", "../src/js/objects.js", "../src/js/keyboard.js", "../src/js/game.js"],
-  "sourcesContent": ["// Holds all the config for your game.\r\n\r\nexport const GAME_TITLE = \"Untitled JS13K23 Game.\"\r\n\r\nexport const WIDTH = 256; // pixels\r\nexport const HEIGHT = 240; // pixels\r\n\r\nexport const SCALE = 2<<4;\r\n\r\n", "// random shit\r\n\r\nimport { SCALE } from \"./config\";\r\n\r\nconst params = new URLSearchParams(location.search);\r\n\r\nexport const pi = Math.PI;\r\nexport const convertTileToScreen = (x, y) => ({x: x*SCALE, y: y*SCALE});\r\nexport const getParameter = key => key ? params.get(key) : 0;\r\nexport const hash = window.location.hash.split(\"?\")[0].slice(1);\r\n\r\n// The following code is responsible for building levels.\r\nconst lineToCoords=(x0,y0,x1,y1,id=2)=>{const c=[];let dx=Math.abs(x1-x0),dy=Math.abs(y1-y0),sx=(x0<x1)?1:-1,sy=(y0<y1)?1:-1,err=dx-dy;while(true){c.push({x:x0,y:y0,id:id});if(x0===x1&&y0===y1)break;const e2=2*err;if(e2>-dy){err-=dy;x0+=sx}if(e2<dx){err+=dx;y0+=sy}}return c};\r\n\r\nconst generateBox = (x, y, width, height, fillTileId=1) => {\r\n    const box = [];\r\n    \r\n    for (let y = y; y < height; y++) {\r\n        for (let x = x; x < width; x++) {\r\n            box.push({ x, y, id: fillTileId });\r\n        }\r\n    }\r\n    \r\n    return box;\r\n}\r\n\r\nexport const generateRoom = (x,y,width,height,lineId=2,fillId=1) => {\r\n    let top = lineToCoords(x, y, x+width, y, lineId);\r\n    let bottom = lineToCoords(x, y+height, x+width, y+height, lineId);\r\n    let left = lineToCoords(x, y, x, y+height, lineId);\r\n    let right = lineToCoords(x+width, y, x+width, y+height, lineId);\r\n\r\n    let fill = generateBox(x+1, y+1, x+width-1, y+height-1, fillId);\r\n\r\n    return [...top, ...bottom, ...left, ...right, ...fill];\r\n}\r\n", "\r\n// Holds canvas, context and adds endpoints for graphics\r\n\r\nimport { pi } from \"./utils.js\"\r\nclass Canvas {\r\n    constructor(id=\"c\", w=128, h=128) {\r\n        this.canvas = document.getElementById(id);\r\n        this.canvas.width = w;\r\n        this.canvas.height = h;\r\n\r\n        this.ctx = this.canvas.getContext(\"2d\");\r\n        this.ctx.imageSmoothingEnabled = false;\r\n        this.ctx.textBaseline = \"top\";\r\n\r\n        this.width = this.canvas.width;\r\n        this.height = this.canvas.height;\r\n\r\n        // camera\r\n        this.cX = 0;\r\n        this.cY = 0;\r\n    }\r\n\r\n    fill(c=\"black\") {\r\n        this.ctx.fillStyle = c;\r\n        this.ctx.fillRect(0, 0, this.width, this.height);\r\n    }\r\n    \r\n    drawImage(image, x, y, width = image.width, height = image.height) {\r\n        this.ctx.drawImage(image, x-this.cX, y-this.cY, width, height);\r\n    }\r\n\r\n    sliceImage(img, x, y, w, h, cropX, cropY, cropW, cropH, direction=0) {\r\n        // console.debug(\"sliceImage\", img, x, y, w, h, cropX, cropY, cropW, cropH, direction);\r\n        this.ctx.save();\r\n        this.ctx.translate((x+w/2)-this.cX, (y+h/2)-this.cY);\r\n        this.ctx.rotate(direction);\r\n        this.ctx.drawImage(img, cropX, cropY, cropW, cropH, -w/2, -h/2, w, h);\r\n        this.ctx.restore();\r\n        // console.log(`${x}, ${y}, ${w}, ${h}, ${cropX}, ${cropY}, ${cropW}, ${cropH}`);\r\n    }\r\n\r\n    drawText(text, x, y, c=\"white\", size=16, font=\"monospace\") {\r\n        this.ctx.fillStyle = c;\r\n        this.ctx.font = `${size}px ${font}`;\r\n        this.ctx.fillText(text, x, y);\r\n    }\r\n\r\n    drawLine(x1, y1, x2, y2, c=\"white\", w=1) {\r\n        this.ctx.strokeStyle = c;\r\n        this.ctx.lineWidth = w;\r\n        this.ctx.beginPath();\r\n        this.ctx.moveTo(x1-this.cX, y1-this.cY);\r\n        this.ctx.lineTo(x2-this.cX, y2-this.cY);\r\n        this.ctx.stroke();\r\n    }\r\n}\r\n\r\nexport { Canvas };\r\n", "// draws text to the screen by splicing a font sheet.\r\n\r\nclass TextRenderer {\r\n    constructor(canvas, fontimg) {\r\n        this.fontimg = fontimg; // MUST BE AN IMAGE OBJECT\r\n        this.fontWidth = 7;\r\n        this.fontHeight = 7;\r\n        this.fontChars = \"abcdefghijklmnopqrstuvwxyz1234567890.,!?:;)(~>\";\r\n        this.canvas = canvas;\r\n    }\r\n\r\n    drawLetter(letter, x, y, substituteOK=1) {\r\n        let { canvas, fontWidth, fontHeight } = this;\r\n\r\n        let index = this.fontChars.indexOf(letter.toLowerCase());\r\n        if (index == -1) {\r\n            if (!substituteOK) return;\r\n            canvas.drawText(letter, x, y, \"#ffffff\", 7, \"monospace\");\r\n        }\r\n        let sx = index * fontWidth;\r\n        let sy = 0;\r\n        // draw image to context\r\n        let yOffset = 0;\r\n        // if the letter is \",\", offset it by -1\r\n        if (letter == \",\") {\r\n            yOffset = -1;\r\n        }\r\n        canvas.sliceImage(this.fontimg, x+canvas.cX, y + yOffset + canvas.cY, fontWidth, fontHeight, sx, sy, fontWidth, fontHeight); \r\n            // canvas.cX and canvas.cY are the camera offsets. we dont want to have text flying off the screen.\r\n            // you can counteract this by specifying x-cX and x-cY when calling this.\r\n    }\r\n\r\n    render(text, x, y) {\r\n        let heightOffset = 0;\r\n        let xOffset = 0;\r\n        for (let i = 0; i < text.length; i++) {\r\n            if (text[i] == \"\\n\") {\r\n                heightOffset++;\r\n                xOffset = 0;\r\n                continue;\r\n            }\r\n            this.drawLetter(text[i], x + (xOffset * this.fontWidth), y + (heightOffset * this.fontHeight));\r\n            xOffset++;\r\n        }\r\n    }\r\n\r\n    throwPanic = (err) => {\r\n        // This function is called when an error is caught but unhandled.\r\n        // It'll show the error on-screen.\r\n    \r\n        this.canvas.fill(\"#00000080\") // 50% black\r\n        \r\n        this.render(err, 0, 0);\r\n        throw err;\r\n    }\r\n}\r\n\r\nexport { TextRenderer };", "class Object {\r\n    draw() {}\r\n    step() {}\r\n}\r\n\r\n\r\nclass Room extends Object {\r\n    constructor(name=\"\") {\r\n        super();\r\n        this.objects = [];\r\n        this.name = name; // needs to be unique, otherwise the searching code will just use the first one it finds.\r\n    }\r\n\r\n    draw() {\r\n        for (let i = 0; i < this.objects.length; i++) {\r\n            this.objects[i].draw();\r\n        }\r\n    }\r\n\r\n    drawGUI() {\r\n\r\n    }\r\n\r\n    keyDown(key) {\r\n    }\r\n\r\n    keyUp(key) {\r\n    }\r\n\r\n\r\n\r\n    step() {\r\n        for (let i = 0; i < this.objects.length; i++) {\r\n            this.objects[i].step();\r\n        }\r\n    }\r\n}\r\n\r\n\r\n\r\nexport { Object, Room };", "// Manages keyboard inputs. Code may have been stolen from herebefrogs/gamejam-boilerplate, under MIT license.\r\n\r\n/** Keyboard input\r\n * Record time at which each key gets pressed\r\n * and provide utilities to queries which keys are pressed or released\r\n *\r\n * Note: importing any public function of this module\r\n * will install the keyboard event listeners\r\n */\r\n\r\n/* private */\r\n\r\n// time at which each key was pressed\r\n// key = KeyboardEvent.code\r\n// value = time in ms at which keyboard event was first emitted (repeats are filtered out)\r\nconst KEYS = {};\r\n\r\nconst _isKeyDown = code => KEYS[code] || 0;\r\n\r\nconst _releaseKey = code => delete KEYS[code];\r\n\r\naddEventListener('keydown', e => {\r\n  // prevent itch.io from scrolling the page up/down\r\n  e.preventDefault();\r\n\r\n  if (!e.repeat) {\r\n    KEYS[e.code] = performance.now();\r\n  }\r\n});\r\n\r\naddEventListener('keyup', e => _releaseKey(e.code));\r\n\r\n\r\n\r\n\r\n/* public API */\r\n\r\n// returns the most recent key pressed amongst the array passed as argument (or 0 if none were)\r\nexport const isKeyDown = (...codes) => Math.max(...codes.map(code => _isKeyDown(code)))\r\n\r\n// retuns the list of keys currently pressed\r\nexport const whichKeyDown = () => Object.keys(KEYS).filter(code => _isKeyDown(code));\r\n\r\n// returns if any key is currently pressed\r\nexport const anyKeyDown = () => whichKeyDown().length;\r\n\r\n// return true if a key can be released (must be currently pressed) or false if it can't\r\n// note: this \"consumes\" the key pressed by releasing it (only if it was pressed)\r\nexport const isKeyUp = code => _isKeyDown(code) ? _releaseKey(code) : false;", "\r\nimport { WIDTH, HEIGHT, GAME_TITLE, SCALE } from \"./config.js\";\r\nimport { Canvas } from \"./canvas.js\";\r\nimport { TextRenderer } from \"./text.js\";\r\nimport { Room, Object } from \"./objects.js\";\r\nimport { whichKeyDown } from \"./keyboard.js\";\r\nimport { convertTileToScreen, getParameter, hash } from \"./utils.js\";\r\n\r\nlet assets = {\r\n    images: {\r\n        splash: \"../img/splash1.webp\",\r\n        font: \"../img/hampsterfont.webp\",\r\n        tiles: \"../img/t.webp\",\r\n        selector: \"../img/selector.webp\",\r\n    },\r\n    spritesheets: {\r\n        player: [\r\n            {x: 0}, // looking up\r\n            {x: 16}, // looking right\r\n            {x: 32}, // looking down\r\n            {x: 48} // looking left\r\n        ]\r\n    }\r\n}\r\n\r\nconst tileTypes = {\r\n    1: 1, // floor\r\n    2: 2, // wall\r\n}\r\n\r\nlet running = 1;\r\n\r\nlet currentFrame = 0;\r\nlet targetFrames = 60;\r\n\r\nlet lastFrameTime = performance.now();\r\n\r\nlet debug = getParameter(\"debug\") || 0;\r\n\r\nlet rooms = [];\r\nlet debugStatuses = [];\r\nlet canvas = new Canvas(\"c\", WIDTH, HEIGHT);\r\nlet text;\r\n\r\nlet pressedLastFrame = [];\r\ncanvas.fill(\"#222034\");\r\n\r\nlet splash = new Image();\r\nsplash.src = assets.images.splash;\r\nsplash.onload = () => {\r\n    canvas.drawImage(splash, canvas.width / 2 - splash.width / 2, canvas.height / 2 - splash.height / 2);\r\n    let font = new Image();\r\n    font.src = assets.images.font;\r\n    font.onload = () => {\r\n        console.log(\"font loaded\")\r\n        text = new TextRenderer(canvas, font);\r\n        window.onerror = (e) => {\r\n            running = 0;\r\n            text.throwPanic(e);\r\n        }\r\n    }\r\n}\r\n\r\n// Entity class is here becuase otherwise every entity would need the canvas passed into it\r\nclass Entity extends Object {\r\n    constructor(x=0, y=0, spritesheet=null, sprite=null) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.sprite = sprite;\r\n        this.spritesheet = spritesheet;\r\n    }\r\n\r\n    draw() {\r\n        canvas.drawImage(this.sprite, this.x, this.y);\r\n    }\r\n}\r\n\r\n// Create all the game rooms\r\nlet roomIndex = 0;\r\nlet currentRoom = rooms[roomIndex];\r\n\r\nlet searchForRoom = (name) => {\r\n    // returns the room's index in the rooms array\r\n    for (let i = 0; i < rooms.length; i++) {\r\n        if (rooms[i].name == name) return i;\r\n    } throw new Error(\"Room not found:\"+name+\". Are you sure it's pushed?\");\r\n}\r\n\r\nconst changeRoom = (index) => {\r\n    currentRoom = rooms[index];\r\n    roomIndex = index;\r\n}\r\n\r\nconst loadingRoom = new Room(\"loading\");\r\nloadingRoom.updateStatus = (status) => {\r\n    console.log(status);\r\n    canvas.fill(\"#222034\");\r\n    canvas.drawImage(splash, canvas.width / 2 - splash.width / 2, canvas.height / 2 - splash.height / 2);\r\n    text.render(status, 0, 0);\r\n}\r\n\r\nconst debugRoom = new Room(\"debug\");\r\ndebugRoom.draw = () => {\r\n    canvas.fill(\"black\");\r\n}\r\ndebugRoom.drawGUI = () => {\r\n    debugStatuses.push(\"Current Frame:\"+currentFrame+`(~${Math.round((currentFrame/targetFrames)*100)/100} sec)`);\r\n}\r\ndebugRoom.keyDown = (key) => {\r\n    if (key == \"Escape\") changeRoom(searchForRoom(\"menu\"));\r\n}\r\n\r\nconst menuRoom = new Room(\"menu\");\r\nmenuRoom.options = [\r\n    {\"label\": \"Start Game\", \"action\": _ => {changeRoom(searchForRoom(\"game\"))}},\r\n];\r\nmenuRoom.index = 0;\r\n\r\nmenuRoom.draw = () => {\r\n    canvas.fill(\"black\");\r\n}\r\nmenuRoom.drawGUI = () => {\r\n    text.render(GAME_TITLE, 8, 7*4);\r\n    for (let i = 0; i < menuRoom.options.length; i++) {\r\n        if (i == menuRoom.index) {\r\n            text.render(\">\", 8, 7*(i+5));\r\n        }\r\n        text.render(menuRoom.options[i].label, 16, 7*(i+5));\r\n    }\r\n}\r\nmenuRoom.keyDown = (key) => {\r\n    if (pressedLastFrame.includes(key)) return;\r\n\r\n    const keyActions = {\r\n        ArrowUp: () => menuRoom.index--,\r\n        ArrowDown: () => menuRoom.index++,\r\n        Enter: () => menuRoom.options[menuRoom.index].action(),\r\n    };\r\n\r\n    const action = keyActions[key];\r\n    if (action) action();\r\n    if (menuRoom.index >= menuRoom.options.length) menuRoom.index = 0;\r\n    if (menuRoom.index < 0) menuRoom.index = menuRoom.options.length-1;\r\n}\r\n\r\nconst getTileType = (x, y, data) => {\r\n    for (let i = 0; i < data.tiles.length; i++) {\r\n        let tile = data.tiles[i];\r\n        if (tile.x == x && tile.y == y) return tileTypes[tile.id];\r\n    }\r\n    return 0;\r\n}\r\n    \r\n\r\nconst renderTiles = (data) => {\r\n    for (let i = 0; i < data.tiles.length; i++) {\r\n        let tile = data.tiles[i];\r\n        let tileLocation = convertTileToScreen(tile.x, tile.y);\r\n        let tId = tile.id;\r\n\r\n        if (tile.id == 2) {\r\n            tId = 3;\r\n            // connect walls to each other.\r\n            // check the tile above, below, left, and right of this one. if it is also id 2, then set the corresponding variable to 1\r\n            getTileType(tile.x, tile.y-1, data) == 2 ? tId += 1 : tId += 0;\r\n            getTileType(tile.x, tile.y+1, data) == 2 ? tId += 2 : tId += 0;\r\n            getTileType(tile.x-1, tile.y, data) == 2 ? tId += 4 : tId += 0;\r\n            getTileType(tile.x+1, tile.y, data) == 2 ? tId += 8 : tId += 0;\r\n        }\r\n\r\n        canvas.sliceImage(assets.images.tiles, tileLocation.x, tileLocation.y, SCALE, SCALE, tId*16, 0, 16, 16);\r\n    }\r\n}\r\n\r\nconst gameRoom = new Room(\"game\"); \r\ngameRoom.data = { tiles: [ ] };\r\ngameRoom.draw = () => {\r\n    canvas.fill(\"black\");\r\n\r\n    renderTiles(gameRoom.data);\r\n}\r\n\r\nconst levelEditor = new Room(\"editor\");\r\nlevelEditor.currentTile = { x: 0, y: 0, id: 0 };\r\nlevelEditor.data = { tiles : [] };\r\nlevelEditor.step = _ => {\r\n\r\n    // place the camera at the center of the current tile if it is outside the screen\r\n    let tileLocation = convertTileToScreen(levelEditor.currentTile.x, levelEditor.currentTile.y);\r\n    if (tileLocation.x < canvas.cX) canvas.cX = tileLocation.x;\r\n    if (tileLocation.x >= canvas.cX+256) canvas.cX = tileLocation.x-canvas.width;\r\n    if (tileLocation.y < canvas.cY) canvas.cY = tileLocation.y;\r\n    if (tileLocation.y > canvas.cY+224) canvas.cY = tileLocation.y-canvas.height;\r\n\r\n\r\n    debugStatuses.push(\"Current tile:\"+levelEditor.currentTile.x+\",\"+levelEditor.currentTile.y);\r\n    debugStatuses.push(\"Current tile ID:\"+levelEditor.currentTile.id);\r\n    debugStatuses.push(\"Camera:\"+canvas.cX+\",\"+canvas.cY);\r\n}\r\nlevelEditor.keyDown = (key) => {\r\n    if (pressedLastFrame.includes(key)) return;\r\n\r\n    const { currentTile, data } = levelEditor;\r\n    const { x, y, id } = currentTile;\r\n\r\n    const keyActions = {\r\n        ArrowUp: () => currentTile.y--,\r\n        ArrowDown: () => currentTile.y++,\r\n        ArrowLeft: () => currentTile.x--,\r\n        ArrowRight: () => currentTile.x++,\r\n        PageUp: () => currentTile.id++,\r\n        PageDown: () => currentTile.id--,\r\n        KeyP: () => console.log(data),\r\n        Enter: () => {\r\n            data.tiles = data.tiles.filter(tile => tile.x !== x || tile.y !== y);\r\n            data.tiles.push({ id, x, y });\r\n        },\r\n    };\r\n\r\n    const action = keyActions[key];\r\n    if (action) action();\r\n};\r\n\r\nlevelEditor.draw = () => {\r\n    canvas.fill(\"#010101\");\r\n\r\n    renderTiles(levelEditor.data);\r\n\r\n    canvas.drawLine(-canvas.width*100, 0, canvas.width*100, 0, \"white\");\r\n    canvas.drawLine(0, -canvas.height*100, 0, canvas.height*100, \"white\");\r\n    text.render(\"(0,0)\", 1-canvas.cX, 1-canvas.cY)\r\n\r\n    let tileLocation = convertTileToScreen(levelEditor.currentTile.x, levelEditor.currentTile.y);\r\n    canvas.ctx.globalAlpha = 0.5;\r\n    canvas.sliceImage(assets.images.tiles, tileLocation.x, tileLocation.y, SCALE, SCALE, levelEditor.currentTile.id*16, 0, 16, 16);\r\n    canvas.ctx.globalAlpha = 1;\r\n    canvas.drawImage(assets.images.selector, tileLocation.x, tileLocation.y, SCALE, SCALE);\r\n}\r\n\r\nrooms.push(loadingRoom);\r\nrooms.push(menuRoom);\r\nrooms.push(gameRoom);\r\nrooms.push(levelEditor);\r\nrooms.push(debugRoom);\r\n\r\ncurrentRoom = rooms[roomIndex];\r\n\r\nlet main = () => { // main game loop\r\n    if (!running) return;\r\n    requestAnimationFrame(main);\r\n    let now = performance.now();\r\n    let delta = now - lastFrameTime;\r\n\r\n    if (delta < 1000 / targetFrames) return;\r\n\r\n    currentFrame++;\r\n    debugStatuses = [];\r\n\r\n    currentRoom.step();\r\n\r\n    currentRoom.draw();\r\n    currentRoom.drawGUI();\r\n\r\n    let currentKeys = whichKeyDown();\r\n    for (let i = 0; i < currentKeys.length; i++) {\r\n        if (debug) debugStatuses.push(currentKeys[i]);\r\n        currentRoom.keyDown(currentKeys[i]);\r\n    }\r\n    \r\n    pressedLastFrame = currentKeys;    \r\n\r\n    if (debug) {\r\n        text.render(\"FPS:\" + Math.round(1000 / delta), 0, 0);\r\n        text.render(currentRoom.name, canvas.width-8*(currentRoom.name.length), 0);\r\n\r\n        debugStatuses.push(\"Debug mode\");\r\n        if (currentFrame <= 60*5) {\r\n            debugStatuses.push(\"Dimensions:\"+canvas.width+\"x\"+canvas.height);\r\n            debugStatuses.push(\"Have fun!\");\r\n        }\r\n    }\r\n\r\n    for (let i = 0; i < debugStatuses.length; i++) {\r\n        text.render(debugStatuses[i], 0, canvas.height-7*(debugStatuses.length-i));\r\n    }\r\n\r\n    lastFrameTime = now;\r\n    }\r\n\r\nlet init = () => {\r\n    // begin loading all the assets.\r\n    currentRoom.updateStatus(\"Loading images...\");\r\n    for (let image in assets.images) {\r\n        currentRoom.updateStatus(\"Loading image \" + image);\r\n        let img = new Image();\r\n        img.src = assets.images[image];\r\n        img.onload = () => {\r\n            assets.images[image] = img;\r\n        }\r\n    }\r\n    console.log(\"Images loaded.\")\r\n    currentRoom.updateStatus(\"Loading complete!\");\r\n    setTimeout(() => {\r\n        \r\n        main();\r\n    }, 1000);\r\n}\r\n\r\nwindow.onload = () => {\r\n    document.title = GAME_TITLE;\r\n    init();\r\n}\r\n"],
-  "mappings": "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",
-  "names": []
-}
-- 
GitLab