define([ "Game/Core/Player", "Lib/Utilities/NotificationCenter" ], function (Parent, NotificationCenter) { function Player(id, physicsEngine) { Parent.call(this, id, physicsEngine); } Player.prototype = Object.create(Parent.prototype); Player.prototype.handActionRequest = function(x, y) { if(!this.doll) return false; var item = null; var isHolding = !!this.holdingItem; if (isHolding) { item = this.holdingItem; } else { item = this.doll.findCloseItem(x, y); } if(item) { this.handAction(x, y, isHolding, item); } } Player.prototype.handAction = function(x, y, isHolding, item) { var options = { playerId: this.id, itemUid: item.uid } if (isHolding) { // throw if(item.isReleasingAllowed()) { this.throw(x, y, item); options.action = "throw"; options.x = x; options.y = y; NotificationCenter.trigger("broadcastGameCommand", "handActionResponse", options); } } else { // grab if(item.isGrabbingAllowed()) { this.grab(item); options.action = "grab"; NotificationCenter.trigger("broadcastGameCommand", "handActionResponse", options); } } }; Player.prototype.addDamage = function(damage, enemy) { this.stats.health -= damage; if(this.stats.health < 0) this.stats.health = 0; if(this.stats.health <= 0) { enemy.score(); this.kill(enemy); } else { this.broadcastStats(); } }; Player.prototype.spawn = function(x, y) { Parent.prototype.spawn.call(this, x, y); this.stats.health = 100; this.broadcastStats(); }; Player.prototype.kill = function(killedByPlayer) { Parent.prototype.kill.call(this, killedByPlayer); this.stats.deaths++; this.broadcastStats(); NotificationCenter.trigger("broadcastGameCommand", "playerKill", { playerId: this.id, killedByPlayerId: killedByPlayer.id }); }; Player.prototype.score = function() { this.stats.score++; this.broadcastStats(); }; Player.prototype.broadcastStats = function() { NotificationCenter.trigger("broadcastGameCommand", "updateStats", { playerId: this.id, stats: this.stats }); }; return Player; });