diff --git a/app.js b/app.js index d2186ab31d42f0d50e25111a3314fc4bf320ea50..6387536917ab4ecae937adeba90440a4e8215374 100644 --- a/app.js +++ b/app.js @@ -3,7 +3,7 @@ var argv = require('yargs') .usage('Usage: $0 [options]') .alias('H', 'host').default('H','0.0.0.0') .alias('p', 'port').default('p','3000') - .boolean('lonpoll') + .boolean('longpoll') .help('h').alias('h', 'help') .argv; var console = require("./colourConsole"); diff --git a/client/Grid.js b/client/Grid.js index 8d8b70b15bcb0e08106ad2e6f701d9c12914a276..46b08e2f81b9f1fdc2ea992553486c71e8274782 100644 --- a/client/Grid.js +++ b/client/Grid.js @@ -94,12 +94,13 @@ Grid.prototype.ondrop = function(x,y,event){ var effect = triggeredCard.effect, prom; if(effect == "replace" && action.type != "replace"){ - effect = undefined; + prom = Promise.resolve([]); + } else { + prom = this.doEffect(triggeredCard,action).then(function(params){ + params.unshift(triggeredCard.id); + return params; + }) } - this.doEffect(effect,action).then(function(params){ - if(effect !== undefined){ - params.unshift(card.id); - } prom.then(function(params){ ws.send({ type:"playCards", @@ -109,8 +110,9 @@ Grid.prototype.ondrop = function(x,y,event){ }); }; -Grid.prototype.doEffect = function(effect,action){ +Grid.prototype.doEffect = function(card,action){ var that = this, + effect = card.effect; switch(effect){ case "draw": return getUserSelection("Select a card to draw",[ @@ -124,7 +126,7 @@ Grid.prototype.doEffect = function(effect,action){ "Select card to copy", function(n){return n.effect && n.effect != "replace" && n.effect != "copy";} ).then(function(card){ - return that.doEffect(card.effect).then(function(n){ + return that.doEffect(card).then(function(n){ n.unshift(card.id); return n; }); diff --git a/client/demo/index.html b/client/demo/index.html index 80cf0675abd5d027cd760c67792277e722cfa2f1..26a93b350f0372ddcbd528b6be1879260e404e7c 100644 --- a/client/demo/index.html +++ b/client/demo/index.html @@ -65,10 +65,10 @@ - + - + diff --git a/server/Game.js b/server/Game.js index 21395a9737fdb2a0e0285708964cc50268262a3f..41f852d43165daea958f0df6056445d716084689 100644 --- a/server/Game.js +++ b/server/Game.js @@ -39,34 +39,29 @@ Game.prototype.loadCards = function(file){ * @param {Client} Client The client who made the play * @return {Array} List of Card id's and positions that should be reported back to the client to update their grid */ -Game.prototype.onPlay = function(cards,params,client){ - var effect; - if(params.length > 0){ - effect = this.cardList[params.shift()].effect; - } - if(effect == "replace"){ - this.grid.replaceCard(params[0],cards[0].id); - return [{id:params[0],position:null},cards[0]]; +Game.prototype.onPlay = function(cards,params,client){; + if(params.length > 0 && this.cardList[params[0]].effect == "replace"){ + this.grid.replaceCard(params[1],params.shift()); + return [{id:params.shift(),position:null},cards[0]]; } else { cards.forEach(c => this.grid.addCard(c.position,c.id)); - return cards.concat(this.resolveEffect(params)); + return cards.concat(this.resolveEffect(params)) } }; Game.prototype.resolveEffect = function(params){ - if(params.length === 0){ - console.warn("Empty effect paramaters - this is only normal if no effect triggered"); + if(params.length == 0){ + console.warn("Empty effect paramaters - this is only normal if no effect triggered") return []; } - var effect = this.cardList[params.shift()].effect; + var effect = this.cardList[params.shift()].effect if(effect in this.effects){ return this.effects[effect].call(this,params); } else { console.warn("No handler for effect",effect); return []; } -}; - +} Game.prototype.effects = { swap:function(params){ var swappedCards = this.grid.swapCards([params[0],params[1]]); @@ -76,7 +71,7 @@ Game.prototype.effects = { ); }, copy:Game.prototype.resolveEffect -}; +} /*Game Packets*/ Game.prototype.packets={}; diff --git a/server/room.js b/server/room.js index 455083b1cbf7232c3d713f92fe3b77dcc01684b3..6e17a186c9c79da597e16b0f0fd22a39b7411a8b 100644 --- a/server/room.js +++ b/server/room.js @@ -47,7 +47,7 @@ Room.prototype.hooks = { this.broadcast(data); }, playCards:function(data,client){ //XXX should be in Game.js - data.cards = this.game.onPlay(data.cards,data.effect,data.params,client); + data.cards = this.game.onPlay(data.cards,data.params,client); data.client = client; data.type = "playCards"; this.broadcast(data);