120 lines
2.8 KiB
JavaScript
120 lines
2.8 KiB
JavaScript
const asdf = require("asdf-games");
|
|
// eslint-disable-next-line no-unused-vars
|
|
const { Container, Camera } = asdf;
|
|
|
|
const debugMode = false;
|
|
|
|
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/1-1.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; |