From 39bdac0d7ba00df4a4d129dab994b27173d73e33 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sun, 2 Mar 2014 01:15:33 +0100 Subject: [PATCH] fixed #57 --- app/Game/Channel/Channel.js | 26 ++++--- app/Game/Channel/GameController.js | 9 --- app/Game/Channel/Player.js | 4 +- app/Game/Channel/User.js | 11 +-- app/Game/Client/GameController.js | 12 +-- app/Game/Client/Networker.js | 11 ++- app/Game/Client/Player.js | 8 +- app/Game/Core/GameController.js | 2 +- app/Game/Core/Player.js | 3 +- app/Game/Core/User.js | 8 +- app/Server/User.js | 8 +- static/html/index.html | 116 ++++++++++++++++------------- 12 files changed, 118 insertions(+), 100 deletions(-) diff --git a/app/Game/Channel/Channel.js b/app/Game/Channel/Channel.js index 7344a25..d9628a9 100755 --- a/app/Game/Channel/Channel.js +++ b/app/Game/Channel/Channel.js @@ -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/joined', user); + //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) { diff --git a/app/Game/Channel/GameController.js b/app/Game/Channel/GameController.js index f7fdc6b..9131742 100755 --- a/app/Game/Channel/GameController.js +++ b/app/Game/Channel/GameController.js @@ -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); diff --git a/app/Game/Channel/Player.js b/app/Game/Channel/Player.js index 6cbdebb..188160c 100755 --- a/app/Game/Channel/Player.js +++ b/app/Game/Channel/Player.js @@ -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); diff --git a/app/Game/Channel/User.js b/app/Game/Channel/User.js index c573a7f..486b8de 100755 --- a/app/Game/Channel/User.js +++ b/app/Game/Channel/User.js @@ -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); }); diff --git a/app/Game/Client/GameController.js b/app/Game/Client/GameController.js index 2146858..f1e1c6e 100755 --- a/app/Game/Client/GameController.js +++ b/app/Game/Client/GameController.js @@ -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) + diff --git a/app/Game/Client/Networker.js b/app/Game/Client/Networker.js index 258a618..dbf7d8a 100755 --- a/app/Game/Client/Networker.js +++ b/app/Game/Client/Networker.js @@ -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 diff --git a/app/Game/Client/Player.js b/app/Game/Client/Player.js index aa84f28..b21171c 100755 --- a/app/Game/Client/Player.js +++ b/app/Game/Client/Player.js @@ -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 diff --git a/app/Game/Core/GameController.js b/app/Game/Core/GameController.js index 820c2e4..1579d68 100755 --- a/app/Game/Core/GameController.js +++ b/app/Game/Core/GameController.js @@ -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; }; diff --git a/app/Game/Core/Player.js b/app/Game/Core/Player.js index a47b06a..7209806 100755 --- a/app/Game/Core/Player.js +++ b/app/Game/Core/Player.js @@ -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; diff --git a/app/Game/Core/User.js b/app/Game/Core/User.js index 3934880..de3264f 100755 --- a/app/Game/Core/User.js +++ b/app/Game/Core/User.js @@ -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; diff --git a/app/Server/User.js b/app/Server/User.js index 95f7654..40b96a4 100644 --- a/app/Server/User.js +++ b/app/Server/User.js @@ -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) { diff --git a/static/html/index.html b/static/html/index.html index 88b6423..70127b6 100644 --- a/static/html/index.html +++ b/static/html/index.html @@ -47,7 +47,7 @@ -
+

-
+

Channel list

@@ -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,65 +172,77 @@ } $("form#createform").onsubmit = function(e) { - var maps = []; - var checkboxes = document.querySelectorAll("form#createform input[name=maps]"); - for (var i = 0; i < checkboxes.length; i++) { - var checkbox = checkboxes[i]; - if(checkbox.checked) { - maps.push(checkbox.value); + try { + + var maps = []; + var checkboxes = document.querySelectorAll("form#createform input[name=maps]"); + for (var i = 0; i < checkboxes.length; i++) { + var checkbox = checkboxes[i]; + if(checkbox.checked) { + maps.push(checkbox.value); + } + }; + + if(maps.length == 0) { + alert("Please choose at least one map.") + return false; } - }; - if(maps.length == 0) { - alert("Please choose at least one map.") - return false; + var name = $("#customname").value; + if(!name) { + alert("Please provide a channel name.") + return false; + } + + localStorage["customname"] = name; + + var options = { + channelName: name, + maps: maps, + maxUsers: 10, + minUsers: 2 + } + + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if(xhr.readyState == 4) { + if(xhr.status == 200) { + onCreateSuccess(JSON.parse(xhr.responseText).success); + } else { + console.log(xhr.responseText) + alert(JSON.parse(xhr.responseText).error) + } + } + } + xhr.open("POST", "/api", true); + xhr.send(JSON.stringify({command:"createChannel", options: options})); + } catch(e) { + console.error(e) } - var name = $("#customname").value; - if(!name) { - alert("Please provide a channel name.") - return false; - } - - localStorage["customname"] = name; - - var options = { - channelName: name, - maps: maps, - maxUsers: 10, - minUsers: 2 - } - - var xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function() { - if(xhr.readyState == 4) { - if(xhr.status == 200) { - onCreateSuccess(JSON.parse(xhr.responseText).success); - } else { - console.log(xhr.responseText) - alert(JSON.parse(xhr.responseText).error) - } - } - } - xhr.open("POST", "/api", true); - xhr.send(JSON.stringify({command:"createChannel", options: options})); return false; } $("form#customjoinform").onsubmit = function(e) { - var nickname = $("#nick").value; - if(!nickname || nickname.length < 3) { - alert("nickname too short") - return false; + try { + var nickname = $("#nick").value; + if(!nickname || nickname.length < 3) { + alert("nickname too short") + return false; + } + localStorage["player"] = JSON.stringify({nickname: nickname}); + + var name = $("#customname").value; + localStorage["channel"] = JSON.stringify({ + name: name + }); + + window.location.href = "/game.html"; + + } catch(e) { + console.error(e) } - localStorage["player"] = JSON.stringify({nickname: nickname}); - var name = $("form#createform input[name=channel]").value; - localStorage["channel"] = JSON.stringify({ - name: name - }); - - window.location.href = "/game.html"; return false; }