This commit is contained in:
Jeena 2014-03-02 01:15:33 +01:00
parent 810a74a28b
commit 39bdac0d7b
12 changed files with 118 additions and 100 deletions

View file

@ -46,22 +46,26 @@
// Channel command callbacks
Channel.prototype.onAddUser = function (userId) {
Channel.prototype.onAddUser = function (options) {
var self = this;
if(!this.gameController.level || !this.gameController.level.isLoaded) {
var token = Nc.on("game/level/loaded", function() {
self.sendJoinSuccess(userId);
self.sendJoinSuccess(options);
Nc.off(token);
});
} else {
self.sendJoinSuccess(userId);
self.sendJoinSuccess(options);
}
}
Channel.prototype.sendJoinSuccess = function(userId) {
var user = new User(userId, this);
var joinedUsers = Object.keys(this.users);
Channel.prototype.sendJoinSuccess = function(options) {
var user = new User(options.id, options);
var joinedUsers = [];
for(var userId in this.users) {
joinedUsers.push(this.users[userId].options)
}
var levelUid = null;
if(this.gameController.level) {
@ -71,14 +75,16 @@
this.users[user.id] = user;
var options = {
userId: user.id,
channelName: this.name,
user: user.options,
joinedUsers: joinedUsers,
levelUid: levelUid
};
Nc.trigger('user/' + user.id + "/joinSuccess", options);
//Nc.trigger('user/' + user.id + "/joinSuccess", options);
user.sendControlCommand("joinSuccess", options);
Nc.trigger('user/joined', user);
this.broadcastControlCommandExcept("userJoined", user.options, user);
};
Channel.prototype.onReleaseUser = function (userId) {

View file

@ -88,15 +88,6 @@ function (Parent, PhysicsEngine, Settings, PlayerController, requestAnimFrame, N
}, respawnTime * 1000);
};
/*
GameController.prototype.createPlayer = function(user) {
var player = new Player(user.id, this.physicsEngine);
player.setPlayerController(new PlayerController(player))
return player;
};
*/
GameController.prototype.updateWorld = function () {
var update = this.getWorldUpdateObject(false);

View file

@ -5,8 +5,8 @@ define([
function (Parent, Nc) {
function Player(id, physicsEngine) {
Parent.call(this, id, physicsEngine);
function Player(id, physicsEngine, user) {
Parent.call(this, id, physicsEngine, user);
}
Player.prototype = Object.create(Parent.prototype);

View file

@ -7,20 +7,13 @@ define([
function(Parent, Nc, ProtocolHelper, ProtocolParser) {
function User(id, channel) {
Parent.call(this, id);
function User(id, options) {
Parent.call(this, id, options);
this.channel = channel;
this.player = null;
this.isReady = false;
var self = this;
Nc.on('user/joined', function(user) { // FIXME: use sendToAllUsersExcept instead
if(user.id != self.id) {
self.sendControlCommand("userJoined", user.id);
}
});
Nc.on('user/' + this.id + "/joinSuccess", function(options) {
self.sendControlCommand("joinSuccess", options);
});

View file

@ -208,10 +208,12 @@ function (Parent, Box2D, PhysicsEngine, ViewManager, PlayerController, Nc, reque
};
var sortedPlayers = playersArray.sort(function(a,b) {
if(a.score > b.score) return 1;
if(a.score < b.score) return -1;
if(a.deaths < b.deaths) return 1;
if(a.deaths > b.deaths) return -1;
if(a.stats.score > b.stats.score) return -1;
if(a.stats.score < b.stats.score) return 1;
if(a.stats.deaths < b.stats.deaths) return -1;
if(a.stats.deaths > b.stats.deaths) return 1;
if(a.stats.health > b.stats.health) return -1;
if(a.stats.health < b.stats.health) return 1;
return 0;
});
@ -236,7 +238,7 @@ function (Parent, Box2D, PhysicsEngine, ViewManager, PlayerController, Nc, reque
var lines = [];
sortedPlayers.forEach(function(player, i) {
var name = player == this.me ? "You" : "Player " + (Object.keys(this.players).indexOf(player.id) + 1);
var name = player.getNickname();
lines.push(
pad("" + (i + 1) + ".", 2, false) + " " +
pad(name, 12, true) +

View file

@ -13,7 +13,6 @@ function (ProtocolHelper, GameController, User, Nc, Settings, DomController) {
this.socketLink = socketLink;
this.gameController = null;
this.users = {};
this.userId = null;
this.socketLink.on('connect', this.onConnect.bind(this));
this.socketLink.on('disconnect', this.onDisconnect.bind(this));
@ -57,12 +56,11 @@ function (ProtocolHelper, GameController, User, Nc, Settings, DomController) {
Networker.prototype.onJoinSuccess = function (options) {
console.log("join success")
this.userId = options.userId;
this.gameController = new GameController();
this.gameController.loadLevel(options.levelUid);
this.onUserJoined(options.userId);
this.onUserJoined(options.user);
if (options.joinedUsers) {
for(var i = 0; i < options.joinedUsers.length; i++) {
@ -114,9 +112,10 @@ function (ProtocolHelper, GameController, User, Nc, Settings, DomController) {
// Commands from server
Networker.prototype.onUserJoined = function (userId) {
var user = new User(userId);
this.users[userId] = user;
Networker.prototype.onUserJoined = function (options) {
var user = new User(options.id, options);
console.log(options.nickname)
this.users[user.id] = user;
if (this.gameController
&& this.gameController.level

View file

@ -6,8 +6,8 @@ define([
function (Parent, Nc, Settings) {
function Player(id, physicsEngine) {
Parent.call(this, id, physicsEngine);
function Player(id, physicsEngine, user) {
Parent.call(this, id, physicsEngine, user);
this.playerInfoView = null;
this.playerInfoViewVisibleTimeout = null;
@ -81,6 +81,10 @@ function (Parent, Nc, Settings) {
}
};
Player.prototype.getNickname = function() {
return this.user.options.nickname;
};
Player.prototype.render = function() {
// dolls are self responsible

View file

@ -94,7 +94,7 @@ function (PhysicsEngine, TiledLevel, Player, Nc) {
}
GameController.prototype.createPlayer = function(user) {
var player = new Player(user.id, this.physicsEngine);
var player = new Player(user.id, this.physicsEngine, user);
this.players[user.id] = player;
return player;
};

View file

@ -10,13 +10,14 @@ define([
function (Doll, Settings, Nc, Exception, SpectatorDoll, RagDoll) {
function Player (id, physicsEngine) {
function Player (id, physicsEngine, user) {
this.stats = {
health: 100,
deaths: 0,
score: 0
}
this.user = user;
this.physicsEngine = physicsEngine;
this.playerController = null;
this.doll;

View file

@ -1,7 +1,13 @@
define(function () {
function User (id) {
function User (id, options) {
this.id = id;
this.options = options;
this.options.id = this.id;
if(!this.options.nickname) {
this.options.nickname = this.id;
}
}
return User;

View file

@ -7,7 +7,7 @@ define([
function (Parent, ProtocolHelper, Nc) {
function User (socketLink, coordinator) {
Parent.call(this, socketLink.id);
Parent.call(this, socketLink.id, {});
this.coordinator = coordinator;
this.socketLink = socketLink;
@ -58,7 +58,11 @@ function (Parent, ProtocolHelper, Nc) {
return;
}
this.channelPipe.send('channel', { addUser: this.id });
var userOptions = {
id: this.id,
nickname: options.nickname
}
this.channelPipe.send('channel', { addUser: userOptions });
};
User.prototype.onGameCommand = function(options) {

View file

@ -47,7 +47,7 @@
</div>
</form>
<form action="game.html" method="GET" id="customjoinform">
<form action="#" method="GET" id="customjoinform">
<p>
<label>
Link to share with your friends<br>
@ -60,7 +60,7 @@
</p>
</form>
<form action="game.html" method="GET" id="listform">
<form action="#" method="GET" id="listform">
<h2>Channel list</h2>
<table>
<thead>
@ -113,7 +113,7 @@
}
document.body.className = "";
} else {
console.error("Ajax error: " + xhr.status + " " + xhr.statusText)
console.error("Ajax error: " + xhr.status + " " + xhr.responseText)
$("#list").innerHTML = "";
document.body.className = "offline";
}
@ -172,6 +172,8 @@
}
$("form#createform").onsubmit = function(e) {
try {
var maps = [];
var checkboxes = document.querySelectorAll("form#createform input[name=maps]");
for (var i = 0; i < checkboxes.length; i++) {
@ -214,10 +216,15 @@
}
xhr.open("POST", "/api", true);
xhr.send(JSON.stringify({command:"createChannel", options: options}));
} catch(e) {
console.error(e)
}
return false;
}
$("form#customjoinform").onsubmit = function(e) {
try {
var nickname = $("#nick").value;
if(!nickname || nickname.length < 3) {
alert("nickname too short")
@ -225,12 +232,17 @@
}
localStorage["player"] = JSON.stringify({nickname: nickname});
var name = $("form#createform input[name=channel]").value;
var name = $("#customname").value;
localStorage["channel"] = JSON.stringify({
name: name
});
window.location.href = "/game.html";
} catch(e) {
console.error(e)
}
return false;
}