gameCommand implementation

This commit is contained in:
Logsol 2013-01-04 03:02:05 +01:00
parent 6219a82fbd
commit c4c48ab821
10 changed files with 62 additions and 39 deletions

View file

@ -1,4 +1,10 @@
define(["Game/Core/Control/InputController", "Game/Client/Control/KeyboardInput"], function (InputController, KeyboardInput) { define([
"Game/Core/Control/InputController",
"Game/Client/Control/KeyboardInput",
"Game/Core/NotificationCenter"
],
function (InputController, KeyboardInput, NotificationCenter) {
function KeyboardController (me, gameController) { function KeyboardController (me, gameController) {
@ -42,22 +48,22 @@ define(["Game/Core/Control/InputController", "Game/Client/Control/KeyboardInput"
KeyboardController.prototype.moveLeft = function () { KeyboardController.prototype.moveLeft = function () {
this.inputController.moveLeft(); this.inputController.moveLeft();
this.gameController.sendGameCommand('moveLeft'); NotificationCenter.trigger('sendGameCommand', 'moveLeft');
} }
KeyboardController.prototype.moveRight = function () { KeyboardController.prototype.moveRight = function () {
this.inputController.moveRight(); this.inputController.moveRight();
this.gameController.sendGameCommand('moveRight'); NotificationCenter.trigger('sendGameCommand', 'moveRight');
} }
KeyboardController.prototype.stop = function () { KeyboardController.prototype.stop = function () {
this.inputController.stop(); this.inputController.stop();
this.gameController.sendGameCommand('stop'); NotificationCenter.trigger('sendGameCommand', 'stop');
} }
KeyboardController.prototype.jump = function () { KeyboardController.prototype.jump = function () {
this.inputController.jump(); this.inputController.jump();
this.gameController.sendGameCommand('jump'); NotificationCenter.trigger('sendGameCommand', 'jump');
} }
KeyboardController.prototype.jumped = function () { KeyboardController.prototype.jumped = function () {
@ -70,7 +76,7 @@ define(["Game/Core/Control/InputController", "Game/Client/Control/KeyboardInput"
KeyboardController.prototype.duck = function () { KeyboardController.prototype.duck = function () {
this.inputController.duck(); this.inputController.duck();
this.gameController.sendGameCommand('duck'); NotificationCenter.trigger('sendGameCommand', 'duck');
} }
KeyboardController.prototype.standUp = function () { KeyboardController.prototype.standUp = function () {
@ -79,7 +85,7 @@ define(["Game/Core/Control/InputController", "Game/Client/Control/KeyboardInput"
KeyboardController.prototype.activateShift = function () { KeyboardController.prototype.activateShift = function () {
this.inputController.activateShift(); this.inputController.activateShift();
this.gameController.sendGameCommand('activateShift'); NotificationCenter.trigger('sendGameCommand', 'activateShift');
} }
KeyboardController.prototype.deactivateShift = function () { KeyboardController.prototype.deactivateShift = function () {

View file

@ -22,6 +22,9 @@ function (Parent, PhysicsEngine, ViewController, KeyboardController, Notificatio
GameController.prototype = Object.create(Parent.prototype); GameController.prototype = Object.create(Parent.prototype);
GameController.prototype.destruct = function() {
//destroy box2d world etc.
};
GameController.prototype.getMe = function () { GameController.prototype.getMe = function () {
return this.me; return this.me;

View file

@ -1,10 +1,11 @@
define([ define([
"Game/Core/Protocol/Helper", "Game/Core/Protocol/Helper",
"Game/Client/GameController", "Game/Client/GameController",
"Game/Core/User" "Game/Core/User",
"Game/Core/NotificationCenter"
], ],
function (ProtocolHelper, GameController, User) { function (ProtocolHelper, GameController, User, NotificationCenter) {
function Networker (socketLink) { function Networker (socketLink) {
this.socketLink = socketLink; this.socketLink = socketLink;
@ -29,6 +30,7 @@ function (ProtocolHelper, GameController, User) {
self.onDisconnect(); self.onDisconnect();
}); });
NotificationCenter.on("sendGameCommand", this.sendGameCommand, this);
} }
Networker.prototype.onConnect = function () { Networker.prototype.onConnect = function () {
@ -123,6 +125,11 @@ function (ProtocolHelper, GameController, User) {
} }
} }
Networker.prototype.sendGameCommand = function(command, options) {
var message = ProtocolHelper.encodeCommand(command, options);
this.sendCommand('gameCommand', message);
};
return Networker; return Networker;
}); });

View file

@ -20,37 +20,17 @@
this.gameController.loadLevel("default.json"); this.gameController.loadLevel("default.json");
/*
var self = this; var self = this;
NotificationCenter.on("processGameCommandFromUser", function (topic, args) { NotificationCenter.on("processGameCommandFromUser", function (topic, args) {
self.processGameCommandFromUser.apply(self, args); self.processGameCommandFromUser.apply(self, args);
}); });
*/
NotificationCenter.on('channel/message', function (message) { NotificationCenter.on('channel/message', function (message) {
switch(message.recipient) {
case 'user':
console.log(message);
var user = self.users[message.id];
ProtocolHelper.runCommands(message.data, function (command, options) {
user[command].call(user, options);
});
break;
case 'id': // Do nothing, it is needed by the user
break;
case 'channel':
ProtocolHelper.runCommands(message.data, function (command, options) { ProtocolHelper.runCommands(message.data, function (command, options) {
self[command].call(self, options); self[command].call(self, options);
}); });
break;
default:
throw 'unknown recipient';
break;
}
}); });
NotificationCenter.on('sendControlCommandToAllUsers', this.sendControlCommandToAllUsers, this); NotificationCenter.on('sendControlCommandToAllUsers', this.sendControlCommandToAllUsers, this);

View file

@ -41,8 +41,10 @@ function (Parent, PhysicsEngine, Settings, InputController, requestAnimFrame, No
var id = user.id; var id = user.id;
var player = this.players[id]; var player = this.players[id];
user.setPlayer(player);
player.spawn(50, 50); player.spawn(50, 50);
this.inputControllers[id] = new InputController(player); this.inputControllers[id] = new InputController(player);
player.inputController = this.inputControllers[id]; // FIXME move this to Server/Player
} }
GameController.prototype.userLeft = function (user) { GameController.prototype.userLeft = function (user) {

View file

@ -10,6 +10,7 @@ function(Parent, NotificationCenter, ProtocolHelper) {
Parent.call(this, id); Parent.call(this, id);
this.channel = channel; this.channel = channel;
this.player = null;
var self = this; var self = this;
NotificationCenter.on('user/joined', function(user) { NotificationCenter.on('user/joined', function(user) {
@ -21,6 +22,12 @@ function(Parent, NotificationCenter, ProtocolHelper) {
NotificationCenter.on('user/' + this.id + "/joinSuccess", function(options) { NotificationCenter.on('user/' + this.id + "/joinSuccess", function(options) {
self.sendControlCommand("joinSuccess", options); self.sendControlCommand("joinSuccess", options);
}); });
NotificationCenter.on('user/' + this.id + "/message", function(message) { // FIXME: right now only game commands?
ProtocolHelper.runCommands(message.data, function (command, options) {
self.gameCommand(command, options);
});
});
} }
User.prototype = Object.create(Parent.prototype); User.prototype = Object.create(Parent.prototype);
@ -37,6 +44,14 @@ function(Parent, NotificationCenter, ProtocolHelper) {
this.sendControlCommand("gameCommand", data); this.sendControlCommand("gameCommand", data);
}; };
User.prototype.gameCommand = function(command, options) {
this.player.inputController[command].call(this.player.inputController);
};
User.prototype.setPlayer = function(player) {
this.player = player;
};
return User; return User;
}); });

View file

@ -85,6 +85,10 @@ function (User, Channel, PipeToChannel, NotificationCenter) {
channelPipe.send('channel', { releaseUser: user.id }); channelPipe.send('channel', { releaseUser: user.id });
}, this); }, this);
NotificationCenter.on('user/gameCommand', function (userId, data) {
channelPipe.sendToUser(userId, data);
}, this);
return channelPipe; return channelPipe;
}; };

View file

@ -35,6 +35,15 @@ function (NotificationCenter, childProcess) {
this.channelPipe.send(message); this.channelPipe.send(message);
} }
PipeToChannel.prototype.sendToUser = function (id, data) {
var message = {
recipient: "user/" + id,
data: data
}
this.channelPipe.send(message);
}
PipeToChannel.prototype.onMessage = function (message) { PipeToChannel.prototype.onMessage = function (message) {
NotificationCenter.trigger(message.recipient + '/message', message.data); NotificationCenter.trigger(message.recipient + '/message', message.data);
} }

View file

@ -54,10 +54,7 @@ function (Parent, ProtocolHelper, NotificationCenter) {
break; break;
case 'gameCommand': case 'gameCommand':
for(var gameCommand in options) { NotificationCenter.trigger("user/gameCommand", this.id, options);
//NotificationCenter.trigger("processGameCommandFromUser", [gameCommand, options[gameCommand], this]);
//this.channel.processGameCommandFromUser(gameCommand, options[gameCommand], this);
}
break; break;
default: default: