mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 18:47:35 +00:00
Repaired Collision detecteion by adding one detector for each user - fixes #15
This commit is contained in:
parent
a1e94e1ed0
commit
f07505bc20
9 changed files with 31 additions and 29 deletions
|
|
@ -5,20 +5,11 @@ define([
|
||||||
|
|
||||||
function (Box2D, Parent) {
|
function (Box2D, Parent) {
|
||||||
|
|
||||||
function Detector (me) {
|
function Detector (player) {
|
||||||
Parent.call(this);
|
Parent.call(this, player);
|
||||||
this.me = me;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Detector.prototype = Object.create(Parent.prototype);
|
Detector.prototype = Object.create(Parent.prototype);
|
||||||
|
|
||||||
Detector.prototype.handleStand = function (point, isColliding) {
|
|
||||||
if (point.GetFixtureA().GetUserData() == Detector.IDENTIFIER.PLAYER_FOOT_SENSOR
|
|
||||||
|| point.GetFixtureB().GetUserData() == Detector.IDENTIFIER.PLAYER_FOOT_SENSOR) {
|
|
||||||
|
|
||||||
this.me.onFootSensorDetection(isColliding);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Detector;
|
return Detector;
|
||||||
});
|
});
|
||||||
|
|
@ -65,6 +65,8 @@ function (Parent, PhysicsEngine, ViewController, KeyboardController, Notificatio
|
||||||
//this.onSpawnPlayer(options);
|
//this.onSpawnPlayer(options);
|
||||||
this.me = this.players[playerId];
|
this.me = this.players[playerId];
|
||||||
this.keyboardController = new KeyboardController(this.me, this);
|
this.keyboardController = new KeyboardController(this.me, this);
|
||||||
|
|
||||||
|
this.physicsEngine.setCollisionDetector(this.me);
|
||||||
}
|
}
|
||||||
|
|
||||||
GameController.prototype.onSpawnPlayer = function(options) {
|
GameController.prototype.onSpawnPlayer = function(options) {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ function (ProtocolHelper, GameController, User, NotificationCenter) {
|
||||||
NotificationCenter.on("sendGameCommand", this.sendGameCommand, this);
|
NotificationCenter.on("sendGameCommand", this.sendGameCommand, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Socket callbacks
|
// Socket callbacks
|
||||||
|
|
||||||
Networker.prototype.onConnect = function () {
|
Networker.prototype.onConnect = function () {
|
||||||
|
|
@ -64,6 +65,7 @@ function (ProtocolHelper, GameController, User, NotificationCenter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Sending commands
|
// Sending commands
|
||||||
|
|
||||||
Networker.prototype.sendCommand = function (command, options) {
|
Networker.prototype.sendCommand = function (command, options) {
|
||||||
|
|
@ -76,6 +78,7 @@ function (ProtocolHelper, GameController, User, NotificationCenter) {
|
||||||
this.sendCommand('gameCommand', message);
|
this.sendCommand('gameCommand', message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Commands from server
|
// Commands from server
|
||||||
|
|
||||||
Networker.prototype.onUserJoined = function (userId) {
|
Networker.prototype.onUserJoined = function (userId) {
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,14 @@ define([
|
||||||
|
|
||||||
function (Box2D, Parent) {
|
function (Box2D, Parent) {
|
||||||
|
|
||||||
function Detector () {
|
function Detector (player) { // FIXME evtl.bind(this) ?
|
||||||
this.listener = new Box2D.Dynamics.b2ContactListener();
|
this.listener = new Box2D.Dynamics.b2ContactListener();
|
||||||
this.listener.chuckDetector = this;
|
this.listener.chuckDetector = this;
|
||||||
this.listener.BeginContact = this.BeginContact;
|
this.listener.BeginContact = this.BeginContact;
|
||||||
this.listener.PostSolve = this.PostSolve;
|
this.listener.PostSolve = this.PostSolve;
|
||||||
this.listener.EndContact = this.EndContact;
|
this.listener.EndContact = this.EndContact;
|
||||||
|
|
||||||
|
this.player = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
Detector.IDENTIFIER = {
|
Detector.IDENTIFIER = {
|
||||||
|
|
@ -27,7 +29,12 @@ function (Box2D, Parent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Detector.prototype.handleStand = function (point, isColliding) {
|
Detector.prototype.handleStand = function (point, isColliding) {
|
||||||
throw "Overwrite this function";
|
|
||||||
|
if (point.GetFixtureA().GetUserData() == Detector.IDENTIFIER.PLAYER_FOOT_SENSOR + '-' + this.player.id
|
||||||
|
|| point.GetFixtureB().GetUserData() == Detector.IDENTIFIER.PLAYER_FOOT_SENSOR + '-' + this.player.id) {
|
||||||
|
|
||||||
|
this.player.onFootSensorDetection(isColliding);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Extension **/
|
/** Extension **/
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ function (Box2D, Settings, CollisionDetector) {
|
||||||
feetShape.SetLocalPosition(new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, 0 / Settings.RATIO));
|
feetShape.SetLocalPosition(new Box2D.Common.Math.b2Vec2(0 / Settings.RATIO, 0 / Settings.RATIO));
|
||||||
fixtureDef.shape = feetShape;
|
fixtureDef.shape = feetShape;
|
||||||
fixtureDef.isSensor = true;
|
fixtureDef.isSensor = true;
|
||||||
fixtureDef.userData = CollisionDetector.IDENTIFIER.FOOTSENSOR;
|
fixtureDef.userData = CollisionDetector.IDENTIFIER.PLAYER_FOOT_SENSOR + '-' + this.id;
|
||||||
this.body.CreateFixture(fixtureDef);
|
this.body.CreateFixture(fixtureDef);
|
||||||
|
|
||||||
this.body.SetActive(false);
|
this.body.SetActive(false);
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ function (Settings, Box2D, CollisionDetector) {
|
||||||
return this.world;
|
return this.world;
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine.prototype.setCollisionDetector = function (me) {
|
Engine.prototype.setCollisionDetector = function (player) {
|
||||||
|
|
||||||
var detector = new CollisionDetector(me); // FIXME: check if core collision detector works
|
var detector = new CollisionDetector(player);
|
||||||
this.world.SetContactListener(detector.getListener());
|
this.world.SetContactListener(detector.getListener());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ function (Doll, Settings) {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.doll.getBody().IsAwake()) {
|
if (!this.doll.getBody().IsAwake() && !this.isStanding()) {
|
||||||
this.setStanding(true);
|
this.setStanding(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,11 @@ define([
|
||||||
|
|
||||||
function (Box2D, Parent) {
|
function (Box2D, Parent) {
|
||||||
|
|
||||||
function Detector () {
|
function Detector (player) {
|
||||||
Parent.call(this);
|
Parent.call(this, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
Detector.prototype = Object.create(Parent.prototype);
|
Detector.prototype = Object.create(Parent.prototype);
|
||||||
|
|
||||||
Detector.prototype.handleStand = function (point, isColliding) {
|
|
||||||
throw "Implement this function";
|
|
||||||
}
|
|
||||||
|
|
||||||
return Detector;
|
return Detector;
|
||||||
});
|
});
|
||||||
|
|
@ -61,6 +61,9 @@ function (Parent, PhysicsEngine, Settings, InputController, requestAnimFrame, No
|
||||||
GameController.prototype.createPlayer = function(user) {
|
GameController.prototype.createPlayer = function(user) {
|
||||||
var player = new Player(user.id, this.physicsEngine);
|
var player = new Player(user.id, this.physicsEngine);
|
||||||
player.setInputController(new InputController(player))
|
player.setInputController(new InputController(player))
|
||||||
|
|
||||||
|
this.physicsEngine.setCollisionDetector(player);
|
||||||
|
|
||||||
return player;
|
return player;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue