Updates obsolete/broken way of clearing fingerprints

When a user leaves the channel, some items need to be cleared of
their fingerprints (lastTouchedBy). This feature was broken
because it used the this.gameObjects pool which was no longer in
use.

The channel GameController now triggers an event to which all
items are subscribed to and if it is triggered, all items with that
users fingerprints clear themselves off those.

Fixes #170
This commit is contained in:
logsol 2016-10-09 12:46:07 +02:00
parent 3a5af058ef
commit dba743cd7b
5 changed files with 29 additions and 30 deletions

View file

@ -36,7 +36,6 @@ function (Parent, PhysicsEngine, Settings, requestAnimFrame, Nc, Box2D, Player,
console.checkpoint('starting game controller for channel (' + options.channelName + ')'); console.checkpoint('starting game controller for channel (' + options.channelName + ')');
} }
GameController.prototype = Object.create(Parent.prototype); GameController.prototype = Object.create(Parent.prototype);
GameController.prototype.update = function () { GameController.prototype.update = function () {
@ -59,6 +58,16 @@ function (Parent, PhysicsEngine, Settings, requestAnimFrame, Nc, Box2D, Player,
this.createPlayer(user); this.createPlayer(user);
} }
GameController.prototype.onUserLeft = function (userId) {
var player = this.players[userId];
this.clearItemsOfPlayerFingerPrints(player);
Parent.prototype.onUserLeft.call(this, userId);
};
GameController.prototype.clearItemsOfPlayerFingerPrints = function(player) {
Nc.trigger(Nc.ns.channel.events.game.player.clearFingerPrints, player);
};
GameController.prototype.createPlayer = function(user) { GameController.prototype.createPlayer = function(user) {
var revealedGameController = { var revealedGameController = {

View file

@ -1,8 +1,9 @@
define([ define([
"Game/Core/GameObjects/Item" "Game/Core/GameObjects/Item",
"Lib/Utilities/NotificationCenter",
], ],
function (Parent) { function (Parent, Nc) {
"use strict"; "use strict";
@ -10,6 +11,10 @@ function (Parent) {
Parent.call(this, physicsEngine, uid, options); Parent.call(this, physicsEngine, uid, options);
this.heldByPlayers = []; this.heldByPlayers = [];
this.lastMoved = null; this.lastMoved = null;
this.ncTokens = (this.ncTokens || []).concat([
Nc.on(Nc.ns.channel.events.game.player.clearFingerPrints, this.clearOfPlayerFingerPrints, this)
]);
} }
Item.prototype = Object.create(Parent.prototype); Item.prototype = Object.create(Parent.prototype);
@ -59,6 +64,13 @@ function (Parent) {
} }
}; };
Item.prototype.clearOfPlayerFingerPrints = function(player) {
if (this.getLastMovedBy() && this.getLastMovedBy().player === player) {
console.checkpoint('Removing fingerprints from ' + this.options.image);
this.setLastMovedBy(null);
}
};
Item.prototype.onCollisionChange = function(isColliding, fixture) { Item.prototype.onCollisionChange = function(isColliding, fixture) {
if(isColliding) { if(isColliding) {

View file

@ -55,10 +55,6 @@ function (Parent, Box2D, PhysicsEngine, ViewManager, PlayerController, Nc, reque
this.mePositionStateOverride(); this.mePositionStateOverride();
} }
//for (var uid in this.gameObjects.animated) {
// this.gameObjects.animated[uid].render();
//}
Nc.trigger(Nc.ns.client.game.events.render); Nc.trigger(Nc.ns.client.game.events.render);
this.view.render(); this.view.render();

View file

@ -92,20 +92,12 @@ function (PhysicsEngine, TiledLevel, Player, Nc, Doll, GameObject, Item, Assert)
this.loadLevel(this.level.uid); this.loadLevel(this.level.uid);
}; };
/*
GameController.prototype.userJoined = function (user) {
this.players[user.id] = this.createPlayer(user);
}
*/
GameController.prototype.onUserLeft = function (userId) { GameController.prototype.onUserLeft = function (userId) {
var player = this.players[userId]; var player = this.players[userId];
if(!player) { if(!player) {
console.warn("User (", userId ,") left who has not joined"); console.warn("User (", userId ,") left who has not joined");
return; return;
} }
this.clearItemsOfPlayerFingerPrints(player);
player.destroy(); player.destroy();
delete this.players[userId]; delete this.players[userId];
@ -117,25 +109,13 @@ function (PhysicsEngine, TiledLevel, Player, Nc, Doll, GameObject, Item, Assert)
return player; return player;
}; };
GameController.prototype.clearItemsOfPlayerFingerPrints = function(player) {
for (var key in this.gameObjects) {
for (var i = 0; i < this.gameObjects[key].length; i++) { // to go through animated and fixed.
var gameObject = this.gameObjects[key][i];
if (gameObject instanceof Item) {
if (gameObject.getLastMovedBy() && gameObject.getLastMovedBy().player === player) {
gameObject.setLastMovedBy(null);
}
}
}
}
};
GameController.prototype.destroy = function () { GameController.prototype.destroy = function () {
for(var player in this.players) { for(var player in this.players) {
this.players[player].destroy(); this.players[player].destroy();
} }
// FIXME ns.client in core?
Nc.trigger(Nc.ns.client.game.events.destroy); Nc.trigger(Nc.ns.client.game.events.destroy);
// Testing after destroy if worldUpdateObjects is empty // Testing after destroy if worldUpdateObjects is empty

View file

@ -138,8 +138,10 @@ function (Exception) {
}, },
game: { game: {
player: { player: {
killed: null killed: null,
} clearFingerPrints: null
},
} }
}, },
engine: { engine: {