caa-game/src/game.js

110 lines
2.8 KiB
JavaScript

const { ipcRenderer, remote } = require("electron");
var asdf = require("asdf-games");
// eslint-disable-next-line no-unused-vars
const { Game, KeyControls, MouseControls, Camera } = asdf;
const window = { w: 640, h: 320 };
const game = new Game(window.w, window.h, true);
ipcRenderer.send("resize", window);
const { scene } = game;
const mouseAim = new MouseControls(document.getElementById("board"));
const keys = new KeyControls();
const Stats = require("./src/helpers/stats.js");
var Player = require("./src/entities/player.js");
var Level = require("./src/helpers/level.js");
// Initialise first level 1-1.js at startPosition 0
var player = new Player(keys, window);
var level = new Level(require("./src/levels/1-1.js"), keys, player);
player.pos.x = level.startPos[0].x / 1;
player.pos.y = level.startPos[0].y / 1;
player.level = level;
const camera = new Camera(player, window, { w: level.w * 2, h: level.h * 2 });
var stats = new Stats(player);
scene.add(camera);
camera.add(level);
camera.add(player);
scene.add(stats);
function switchLevel(module, pos = 0) {
scene.remove(stats);
console.log(scene);
camera.map(function(e) {
camera.remove(e);
if (e instanceof Level) {
var lives = player.lives;
var items = player.items;
var p = new Player(keys, window);
player = p;
e = new Level(module, keys, player);
level = e;
player.pos.x = level.startPos[pos].x / 1;
player.pos.y = level.startPos[pos].y / 1;
player.lives = lives;
player.items = items;
player.level = e;
stats = new Stats(player);
camera.add(e);
camera.add(player);
camera.setSubject(player);
scene.add(stats);
}
});
}
game.run(() => {
// Debugging tools
if (mouseAim.isDown) {
console.log("cliccccccccccc");
console.log(player);
console.log(level);
}
// Switch to another level
if (level.switch) {
console.log("Switching level!", level);
switchLevel(require(level.switch.module), level.switch.pos);
level.switch = undefined;
}
// Refocus camera to player when player is moved by a portal
if (player.refocus) {
camera.setSubject(player);
player.refocus = false;
}
});
/* *********************************************************
Settings behavior
********************************************************* */
// Opening and closing of menu.
document.getElementById("settings").addEventListener("click", () => {
const menuRef = document.getElementById("menu");
menuRef.style.display = menuRef.style.display === "block" ? "none" : "block";
});
// Quit Game handling.
document.getElementById("close").addEventListener("click", () => {
remote.app.quit();
});
// Return to main menu button
document.getElementById("mainmenu").addEventListener("click", () => {
remote.getCurrentWindow().loadFile(__dirname + "/index.html");
});