caa-game/src/screens/game.js

120 lines
2.8 KiB
JavaScript

const asdf = require("asdf-games");
// eslint-disable-next-line no-unused-vars
const { Container, Camera } = asdf;
const debugMode = true;
const Stats = require(__dirname + "/../helpers/stats.js");
var Player = require(__dirname + "/../entities/player.js");
var Level = require(__dirname + "/../helpers/level.js");
class GameScreen extends Container {
constructor(game, window, keys, onGameOver, onComplete) {
super();
this.game = game;
this.scene = this;
this.window = window;
this.keys = keys;
this.onGameOver = onGameOver;
this.onComplete = onComplete;
this.keys.reset();
// Initialise first level 1-1.js at startPosition 0
var player = new Player(keys, window);
var level = new Level(require(__dirname + "/../levels/2-2.js"), keys, player, this);
player.pos.x = level.startPos[0].x / 1;
player.pos.y = level.startPos[0].y / 1;
player.level = level;
var camera = new Camera(player, window, { w: level.w * 2, h: level.h * 2 });
var stats = new Stats(player);
this.add(camera);
camera.add(level);
camera.add(player);
this.add(stats);
this.camera = camera;
this.player = player;
this.level = level;
this.stats = stats;
}
switchLevel(module, pos = 0) {
var { scene, camera, player, level, stats, keys } = this;
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, scene);
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.player = player;
camera.add(e);
camera.worldSize = { w: e.w, h: e.h };
camera.add(player);
camera.setSubject(player);
}
});
this.player = player;
this.level = level;
this.stats = stats;
this.camera = camera;
this.keys.reset();
}
update(dt, t) {
super.update(dt, t);
var { camera, player, level, keys } = this;
// Debug options
if (debugMode && keys.escape) {
console.debug(level);
console.debug(player);
}
if (player.lives <= 0) {
this.onGameOver();
}
if (level.gameComplete) {
this.onComplete();
}
// Switch to another level
if (level.switch) {
if (debugMode) {
console.debug("Switching level!", level);
}
this.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;
}
}
}
module.exports = GameScreen;