mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 18:47:35 +00:00
130 lines
3.5 KiB
JavaScript
Executable file
130 lines
3.5 KiB
JavaScript
Executable file
define([
|
|
"Game/" + GLOBALS.context + "/Physics/Engine",
|
|
"Game/" + GLOBALS.context + "/Loader/TiledLevel",
|
|
"Game/" + GLOBALS.context + "/Player",
|
|
"Lib/Utilities/NotificationCenter",
|
|
"Game/" + GLOBALS.context + "/GameObjects/Doll",
|
|
],
|
|
|
|
function (PhysicsEngine, TiledLevel, Player, Nc, Doll) {
|
|
|
|
function GameController (options) {
|
|
|
|
this.options = options;
|
|
this.players = {};
|
|
this.level = null;
|
|
this.gameObjects = null;
|
|
this.resetGameObjects();
|
|
|
|
this.physicsEngine = new PhysicsEngine();
|
|
this.physicsEngine.setCollisionDetector();
|
|
|
|
this.ncTokens = [
|
|
Nc.on(Nc.ns.core.game.gameObject.add, this.onGameObjectAdd, this),
|
|
Nc.on(Nc.ns.core.game.gameObject.remove, this.onGameObjectRemove, this)
|
|
];
|
|
|
|
this.loadLevel(options.levelUid);
|
|
|
|
this.update();
|
|
}
|
|
|
|
GameController.prototype.update = function() {
|
|
// extend for both sides if necessary
|
|
};
|
|
|
|
GameController.prototype.resetGameObjects = function() {
|
|
this.gameObjects = {
|
|
fixed: [],
|
|
animated: []
|
|
};
|
|
};
|
|
|
|
GameController.prototype.onGameObjectAdd = function(type, object) {
|
|
this.gameObjects[type].push(object);
|
|
};
|
|
|
|
GameController.prototype.onGameObjectRemove = function(type, object) {
|
|
var i = this.gameObjects[type].indexOf(object);
|
|
if(i>=0) this.gameObjects[type].splice(i, 1);
|
|
};
|
|
|
|
GameController.prototype.getPhysicsEngine = function () {
|
|
return this.physicsEngine;
|
|
}
|
|
|
|
GameController.prototype.loadLevel = function (levelUid) {
|
|
|
|
if (this.level) {
|
|
this.level.destroy();
|
|
this.resetGameObjects();
|
|
}
|
|
|
|
this.level = new TiledLevel(levelUid, this.physicsEngine, this.gameObjects);
|
|
}
|
|
|
|
GameController.prototype.onResetLevel = function() {
|
|
this.loadLevel(this.level.uid);
|
|
};
|
|
|
|
/*
|
|
GameController.prototype.userJoined = function (user) {
|
|
this.players[user.id] = this.createPlayer(user);
|
|
}
|
|
*/
|
|
|
|
GameController.prototype.onUserLeft = function (userId) {
|
|
var player = this.players[userId];
|
|
if(!player) {
|
|
console.warn("User (", userId ,") left who has not joined");
|
|
return;
|
|
}
|
|
|
|
this.onGameObjectRemove('animated', player);
|
|
|
|
player.destroy();
|
|
delete this.players[userId];
|
|
}
|
|
|
|
GameController.prototype.createPlayer = function(user) {
|
|
var player = new Player(user.id, this.physicsEngine, user);
|
|
this.players[user.id] = player;
|
|
return player;
|
|
};
|
|
|
|
GameController.prototype.destroy = function () {
|
|
for(var player in this.players) {
|
|
// this.players[player].destroy();
|
|
|
|
// FIXME:
|
|
// commented out for now, because players are in gameObjects array.
|
|
// try using a real gameobject for the health bar
|
|
}
|
|
|
|
for (var i = 0; i < this.ncTokens.length; i++) {
|
|
Nc.off(this.ncTokens[i]);
|
|
};
|
|
|
|
/*
|
|
* Contents of gameObject: Players, Items, Tiles, RagDolls
|
|
* No Dolls.
|
|
*/
|
|
|
|
for (var key in this.gameObjects) {
|
|
for (var i = 0; i < this.gameObjects[key].length; i++) {
|
|
var gameObject = this.gameObjects[key][i];
|
|
|
|
gameObject.destroy();
|
|
};
|
|
};
|
|
|
|
this.gameObjects = {
|
|
fixed: [],
|
|
animated: []
|
|
};
|
|
|
|
this.physicsEngine.destroy();
|
|
}
|
|
|
|
return GameController;
|
|
});
|