1
0
mirror of https://github.com/exane/not-gwent-online synced 2024-11-23 19:36:53 +00:00

much more stuff

This commit is contained in:
exane 2015-06-14 20:50:53 +02:00
parent f09a66f547
commit 246c27f990
8 changed files with 316 additions and 68 deletions

View File

@ -8,10 +8,11 @@ module.exports = {
}, },
"morale_boost": { "morale_boost": {
onAfterPlace: function(card) { onAfterPlace: function(card) {
var field = this.getYourside().getField(card.getType()); var field = this.field[card.getType()];
var cards = field.getCards(); var cards = field.get();
cards.forEach(function(_card) { cards.forEach(function(_card) {
if(_card.getID() == card.getID()) return;
_card.boost(1); _card.boost(1);
}) })
} }
@ -21,17 +22,17 @@ module.exports = {
var name = card.getName(); var name = card.getName();
var self = this; var self = this;
var cards = this.getDeck().find("name", name); var cards = this.deck.find("name", name);
cards.forEach(function(_card) { cards.forEach(function(_card) {
self.getDeck().removeFromDeck(_card.getID()); self.deck.removeFromDeck(_card);
this._placeCard(_card); this.placeCard(_card);
}) })
} }
}, },
"tight_bond": { "tight_bond": {
onAfterPlace: function(card){ onAfterPlace: function(card){
var field = this.getYourside().getField(card.getType()); var field = this.field[card.getType()];
var cards = field.getCards(); var cards = field.get();
var lastInsert = cards.length; var lastInsert = cards.length;
if(lastInsert < 2) return; if(lastInsert < 2) return;
@ -45,15 +46,15 @@ module.exports = {
"spy": { "spy": {
changeSide: true, changeSide: true,
onAfterPlace: function(card){ onAfterPlace: function(card){
this.drawCards(2); this.draw(2);
} }
}, },
"weather_fog": { "weather_fog": {
onEachTurn: function(card) { onEachTurn: function(card) {
var targetRow = card.constructor.TYPE.RANGED; var targetRow = card.constructor.TYPE.RANGED;
var forcedPower = 1; var forcedPower = 1;
var field1 = this.getYourside().getField(targetRow).getCards(); var field1 = this.field[targetRow].get();
var field2 = this.getOtherside().getField(targetRow).getCards(); var field2 = this.foe.field[targetRow].get();
var field = field1.concat(field2); var field = field1.concat(field2);
@ -61,15 +62,27 @@ module.exports = {
if(_card.getRawAbility() == "hero") return; if(_card.getRawAbility() == "hero") return;
_card.setForcedPower(forcedPower); _card.setForcedPower(forcedPower);
}); });
},
onEachCardPlace: function(card) {
var targetRow = card.constructor.TYPE.RANGED;
var forcedPower = 1;
var field1 = this.field[targetRow].get();
var field2 = this.foe.field[targetRow].get();
var field = field1.concat(field2);
field.forEach(function(_card) {
if(_card.getRawAbility() == "hero") return;
_card.setForcedPower(forcedPower);
});
} }
}, },
"weather_rain": { "weather_rain": {
onEachTurn: function(card) { onEachTurn: function(card) {
var targetRow = card.constructor.TYPE.SIEGE; var targetRow = card.constructor.TYPE.SIEGE;
var forcedPower = 1; var forcedPower = 1;
var field1 = this.getYourside().getField(targetRow).getCards(); var field1 = this.field[targetRow].get();
var field2 = this.getOtherside().getField(targetRow).getCards(); var field2 = this.foe.field[targetRow].get();
var field = field1.concat(field2); var field = field1.concat(field2);
@ -84,8 +97,8 @@ module.exports = {
onEachTurn: function(card) { onEachTurn: function(card) {
var targetRow = card.constructor.TYPE.CLOSE_COMBAT; var targetRow = card.constructor.TYPE.CLOSE_COMBAT;
var forcedPower = 1; var forcedPower = 1;
var field1 = this.getYourside().getField(targetRow).getCards(); var field1 = this.field[targetRow].get();
var field2 = this.getOtherside().getField(targetRow).getCards(); var field2 = this.foe.field[targetRow].get();
var field = field1.concat(field2); var field = field1.concat(field2);
@ -99,7 +112,7 @@ module.exports = {
"clear_weather": { "clear_weather": {
onAfterPlace: function(card) { onAfterPlace: function(card) {
var targetRow = card.constructor.TYPE.WEATHER; var targetRow = card.constructor.TYPE.WEATHER;
var field = this.getYourside().getField(targetRow).getCards(); var field = this.field[targetRow].get();
//todo: remove weather cards //todo: remove weather cards
} }

View File

@ -95,9 +95,12 @@ var App = Backbone.Router.extend({
var SideView = Backbone.View.extend({ var SideView = Backbone.View.extend({
el: ".container", el: ".container",
template: Handlebars.compile('<div class="card" data-key="{{_key}}"><img src="../assets/cards/{{_data.img}}.png"></div>'), template: Handlebars.compile('<div class="card" data-key="{{_key}}" data-id="{{_id}}">' +
'<img src="../assets/cards/{{_data.img}}.png">' +
'</div>'),
templateCards: Handlebars.compile('{{#each this}}' + templateCards: Handlebars.compile('{{#each this}}' +
'<div class="card" data-key="{{_key}}">' + '<div class="card" data-key="{{_key}}" data-id="{{_id}}">' +
'{{#if _boost}}<span>+{{_boost}}</span>{{/if}}' +
'<img src="../assets/cards/{{_data.img}}.png">' + '<img src="../assets/cards/{{_data.img}}.png">' +
'</div>' + '</div>' +
'{{/each}}'), '{{/each}}'),
@ -113,11 +116,11 @@ var SideView = Backbone.View.extend({
}, },
render: function(){ render: function(){
this.renderInfo(); this.renderInfo();
this.renderCloseField(); this.renderCloseField();
this.renderRangeField(); this.renderRangeField();
this.renderSiegeField(); this.renderSiegeField();
this.renderWeatherField();
return this; return this;
}, },
@ -138,6 +141,8 @@ var SideView = Backbone.View.extend({
this.$info.addClass("removeBackground"); this.$info.addClass("removeBackground");
} }
this.$info.find(".passing").html(d.passing?"Passed":"");
}, },
renderCloseField: function(){ renderCloseField: function(){
if(!this.field.close) return; if(!this.field.close) return;
@ -175,6 +180,14 @@ var SideView = Backbone.View.extend({
$field.find(".field-siege").html(html) $field.find(".field-siege").html(html)
$field.find(".large-field-counter").html(score) $field.find(".large-field-counter").html(score)
}, },
renderWeatherField: function(){
if(!this.field.weather) return;
var $weatherField = this.$el.find(".field-weather");
var cards = this.field.weather._cards;
$weatherField.html(this.templateCards(cards));
return this;
},
lives: function(lives){ lives: function(lives){
var out = ""; var out = "";
for(var i = 0; i < 2; i++) { for(var i = 0; i < 2; i++) {
@ -201,12 +214,12 @@ var BattleView = Backbone.View.extend({
this.listenTo(user, "change:showPreview", this.render); this.listenTo(user, "change:showPreview", this.render);
this.listenTo(user, "change:waiting", this.render); this.listenTo(user, "change:waiting", this.render);
this.listenTo(user, "change:passing", this.render);
this.$hand = this.$el.find(".field-hand"); this.$hand = this.$el.find(".field-hand");
this.$preview = this.$el.find(".card-preview"); this.$preview = this.$el.find(".card-preview");
app.receive("update:hand", function(data){ app.receive("update:hand", function(data){
console.log("update:hand", user.get("roomSide"), data._roomSide);
if(user.get("roomSide") == data._roomSide){ if(user.get("roomSide") == data._roomSide){
self.handCards = JSON.parse(data.cards); self.handCards = JSON.parse(data.cards);
self.render(); self.render();
@ -223,7 +236,6 @@ var BattleView = Backbone.View.extend({
if(user.get("roomSide") != _side){ if(user.get("roomSide") != _side){
side = otherSide; side = otherSide;
} }
console.log(side);
side.infoData = infoData; side.infoData = infoData;
side.leader = leader; side.leader = leader;
side.render(); side.render();
@ -242,6 +254,7 @@ var BattleView = Backbone.View.extend({
side.field.close = data.close; side.field.close = data.close;
side.field.ranged = data.ranged; side.field.ranged = data.ranged;
side.field.siege = data.siege; side.field.siege = data.siege;
side.field.weather = data.weather;
side.render(); side.render();
}) })
@ -263,16 +276,53 @@ var BattleView = Backbone.View.extend({
events: { events: {
"mouseover .card": "onMouseover", "mouseover .card": "onMouseover",
"mouseleave .card": "onMouseleave", "mouseleave .card": "onMouseleave",
"click .field-hand": "onClick" "click .field-hand": "onClick",
"click .battleside.player": "onClickDecoy",
"click .button-pass": "onPassing"
},
onPassing: function(){
if(this.user.get("passing")) return;
if(this.user.get("waiting")) return;
this.user.set("passing", true);
this.user.get("app").send("set:passing");
}, },
onClick: function(e){ onClick: function(e){
if(!!this.user.get("waiting")) return; if(!!this.user.get("waiting")) return;
if(!!this.user.get("passing")) return;
var self = this;
var $card = $(e.target).closest(".card"); var $card = $(e.target).closest(".card");
var id = $card.data("id"); var id = $card.data("id");
console.log("clicked id ", id); var key = $card.data("key");
this.app.send("play:cardFromHand", { this.app.send("play:cardFromHand", {
id: id id: id
}); });
if(key === "decoy"){
console.log("its decoy!!!");
this.user.set("waitForDecoy", id);
/*
this.$el.find(".battleside.player").on("click", ".card", function(e) {
console.log("replacement card found: ");
var $card = $(e.target).closest(".card");
var _id = $card.data("id");
self.app.send("decoy:replaceWith", {
oldCard: id,
newCard: _id
})
self.$el.find(".battleside.player").off("click");
});*/
}
},
onClickDecoy: function(e){
if(!this.user.get("waitForDecoy")) return;
console.log("replacement card found: ");
var $card = $(e.target).closest(".card");
var _id = $card.data("id");
this.app.send("decoy:replaceWith", {
cardID: _id
})
this.user.set("waitForDecoy", false);
}, },
onMouseover: function(e){ onMouseover: function(e){
var target = $(e.target).closest(".card"); var target = $(e.target).closest(".card");
@ -307,7 +357,6 @@ var User = Backbone.Model.extend({
var self = this; var self = this;
var app = this.get("app"); var app = this.get("app");
app.receive("response:name", function(data){ app.receive("response:name", function(data){
self.set("name", data.name); self.set("name", data.name);
}); });
@ -330,7 +379,6 @@ var User = Backbone.Model.extend({
app.receive("set:waiting", function(data){ app.receive("set:waiting", function(data){
var waiting = data.waiting; var waiting = data.waiting;
console.log("is waiting: ", waiting);
self.set("waiting", waiting); self.set("waiting", waiting);
}) })

View File

@ -34,8 +34,8 @@ $game-height: 800px;
} }
} }
.passing { .passing {/*
display: none; display: none;*/
} }
.field-single { .field-single {
@ -81,6 +81,16 @@ $game-height: 800px;
img { img {
height: 120px; height: 120px;
} }
span {
color: #00b000;
font-weight: bold;
font-size: 24px;
position: absolute;
text-shadow: 1px 1px #101010;
margin-top: 55px;
margin-left: 30px;
cursor: default;
}
} }
.card-preview { .card-preview {

View File

@ -1,5 +1,6 @@
var Battleside = require("./Battleside"); var Battleside = require("./Battleside");
var PubSub = require("pubsub-js"); var PubSub = require("pubsub-js");
var Card = require("./Card");
var io = global.io; var io = global.io;
@ -28,14 +29,17 @@ var Battle = (function(){
r._user2 = null; r._user2 = null;
r.turn = 0; r.turn = 0;
r._id = null; r._id = null;
r.init = function(){ r.init = function(){
PubSub.subscribe("update", this.update.bind(this));
this.p1 = Battleside(this._user1.getName(), 0, this, this._user1); this.p1 = Battleside(this._user1.getName(), 0, this, this._user1);
this.p2 = Battleside(this._user2.getName(), 1, this, this._user2); this.p2 = Battleside(this._user2.getName(), 1, this, this._user2);
this.p1.foe = this.p2; this.p1.foe = this.p2;
this.p2.foe = this.p1; this.p2.foe = this.p1;
this.p1.setUpWeatherFieldWith(this.p2);
this.start(); this.start();
} }
@ -46,12 +50,20 @@ var Battle = (function(){
this.p1.draw(10); this.p1.draw(10);
this.p2.draw(10); this.p2.draw(10);
this.p1.hand.add(Card("decoy"));
this.p1.hand.add(Card("impenetrable_fog"));
this.p2.hand.add(Card("decoy"));
this.p2.hand.add(Card("impenetrable_fog"));
this.update();
PubSub.subscribe("nextTurn", this.switchTurn.bind(this)); PubSub.subscribe("nextTurn", this.switchTurn.bind(this));
this.switchTurn(); this.switchTurn();
} }
r.switchTurn = function(){ r.switchTurn = function(__flag){
/*this.playerManager.renderInfos(); /*this.playerManager.renderInfos();
if(this.playerManager.bothPassed() && !this._roundCheck) { if(this.playerManager.bothPassed() && !this._roundCheck) {
//start new round //start new round
@ -65,8 +77,15 @@ var Battle = (function(){
var entity = this.playerManager.getNextPlayer(); var entity = this.playerManager.getNextPlayer();
this.playerManager.renderInfos();*/ this.playerManager.renderInfos();*/
__flag = typeof __flag == "undefined" ? 0 : 1;
var side = this.turn++ % 2 ? this.p1 : this.p2; var side = this.turn++ % 2 ? this.p1 : this.p2;
if(side.isPassing()){
if(__flag) {
return this.startNextRound();
}
return this.switchTurn(1);
}
PubSub.publish("onEachTurn"); PubSub.publish("onEachTurn");
PubSub.publish("turn/" + side.getID()); PubSub.publish("turn/" + side.getID());
@ -74,6 +93,30 @@ var Battle = (function(){
} }
r.startNextRound = function() {
}
r.update = function(){
this._update(this.p1);
this._update(this.p2);
}
r._update = function(p){
p.send("update:info", {
info: p.getInfo(),
leader: p.field[Card.TYPE.LEADER].get()[0]
})
p.send("update:hand", {
cards: JSON.stringify(p.hand.getCards())
});
p.send("update:fields", {
close: p.field[Card.TYPE.CLOSE_COMBAT],
ranged: p.field[Card.TYPE.RANGED],
siege: p.field[Card.TYPE.SIEGE],
weather: p.field[Card.TYPE.WEATHER]
})
}
r.send = function(event, data){ r.send = function(event, data){
io.to(this._id).emit(event, data); io.to(this._id).emit(event, data);

View File

@ -7,7 +7,8 @@ var Field = require("./Field");
var PubSub = require("pubsub-js"); var PubSub = require("pubsub-js");
var Battleside = (function(){ var Battleside;
Battleside = (function(){
var Battleside = function(name, n, battle, user){ var Battleside = function(name, n, battle, user){
if(!(this instanceof Battleside)){ if(!(this instanceof Battleside)){
return (new Battleside(name, n, battle, user)); return (new Battleside(name, n, battle, user));
@ -16,6 +17,7 @@ var Battleside = (function(){
* constructor here * constructor here
*/ */
var self = this;
this._isWaiting = true; this._isWaiting = true;
this.socket = user.socket; this.socket = user.socket;
this.field = {}; this.field = {};
@ -30,6 +32,26 @@ var Battleside = (function(){
this.deck = Deck(DeckData["test"]); this.deck = Deck(DeckData["test"]);
this.receive("play:cardFromHand", function(data){
if(self._isWaiting) return;
if(self.isPassing()) return;
var cardID = data.id;
var card = self.hand.getCard(cardID);
self.playCard(card);
})
this.receive("decoy:replaceWith", function(data){
if(self._isWaiting) return;
var card = self.findCardOnFieldByID(data.cardID);
if(card === -1) throw "decoy:replace | unknown card";
PubSub.publish("decoy:replaceWith", card);
})
this.receive("set:passing", function() {
self.setPassing(true);
self.update();
PubSub.publish("nextTurn");
})
PubSub.subscribe("turn/" + this.getID(), this.onTurnStart.bind(this)); PubSub.subscribe("turn/" + this.getID(), this.onTurnStart.bind(this));
}; };
var r = Battleside.prototype; var r = Battleside.prototype;
@ -48,6 +70,7 @@ var Battleside = (function(){
r._lives = 2; r._lives = 2;
r._score = 0; r._score = 0;
r._isWaiting = null; r._isWaiting = null;
r._passing = null;
r.field = null; r.field = null;
@ -59,12 +82,33 @@ var Battleside = (function(){
r.battle = null; r.battle = null;
r.deck = null; r.deck = null;
r.isPassing = function() {
return this._passing;
}
r.setUpWeatherFieldWith = function(p2){
this.field[Card.TYPE.WEATHER] = p2.field[Card.TYPE.WEATHER] = Field(Card.TYPE.WEATHER);
}
r.findCardOnFieldByID = function(id) {
for(var key in this.field) {
var field = this.field[key];
var card = field.getCard(id);
if(card !== -1) return card;
}
return -1;
}
r.setPassing = function(b) {
this._passing = b;
}
r.wait = function(){ r.wait = function(){
this._isWaiting = true; this._isWaiting = true;
this.send("set:waiting", {waiting: this._isWaiting}, true); this.send("set:waiting", {waiting: this._isWaiting}, true);
} }
r.turn = function() { r.turn = function(){
this._isWaiting = false; this._isWaiting = false;
this.send("set:waiting", {waiting: this._isWaiting}, true); this.send("set:waiting", {waiting: this._isWaiting}, true);
} }
@ -77,7 +121,7 @@ var Battleside = (function(){
this.field[Card.TYPE.LEADER].add(leaderCard[0]); this.field[Card.TYPE.LEADER].add(leaderCard[0]);
} }
r.getID = function() { r.getID = function(){
return this.n; return this.n;
} }
@ -92,7 +136,7 @@ var Battleside = (function(){
this.update(); this.update();
} }
r.calcScore = function() { r.calcScore = function(){
var score = 0; var score = 0;
for(var key in this.field) { for(var key in this.field) {
score += +this.field[key].getScore(); score += +this.field[key].getScore();
@ -101,12 +145,12 @@ var Battleside = (function(){
} }
r.getInfo = function(){ r.getInfo = function(){
console.log(this.getName(), this._isWaiting);
return { return {
name: this.getName(), name: this.getName(),
lives: this._lives, lives: this._lives,
score: this.calcScore(), score: this.calcScore(),
hand: this.hand.length() hand: this.hand.length(),
passing: this._passing
} }
} }
@ -119,17 +163,18 @@ var Battleside = (function(){
isPrivate = typeof isPrivate === "undefined" ? false : isPrivate; isPrivate = typeof isPrivate === "undefined" ? false : isPrivate;
msg._roomSide = this.n; msg._roomSide = this.n;
if(isPrivate) { if(isPrivate){
return this.socket.emit(event, msg); return this.socket.emit(event, msg);
} }
this.battle.send(event, msg); this.battle.send(event, msg);
} }
r.receive = function(event, cb) { r.receive = function(event, cb){
this.socket.on(event, cb); this.socket.on(event, cb);
} }
r.update = function(){ r.update = function(){
/*
this.send("update:info", { this.send("update:info", {
info: this.getInfo(), info: this.getInfo(),
leader: this.field[Card.TYPE.LEADER].get()[0] leader: this.field[Card.TYPE.LEADER].get()[0]
@ -141,34 +186,96 @@ var Battleside = (function(){
close: this.field[Card.TYPE.CLOSE_COMBAT], close: this.field[Card.TYPE.CLOSE_COMBAT],
ranged: this.field[Card.TYPE.RANGED], ranged: this.field[Card.TYPE.RANGED],
siege: this.field[Card.TYPE.SIEGE] siege: this.field[Card.TYPE.SIEGE]
}) })*/
PubSub.publish("update");
} }
r.onTurnStart = function() { r.onTurnStart = function(){
this.foe.wait(); this.foe.wait();
this.turn(); this.turn();
var self = this;
this.receive("play:cardFromHand", function(data) { //wait for cardplay event
var cardID = data.id;
var card = self.hand.getCard(cardID);
self.hand.remove(cardID);
self.playCard(card);
})
}; };
r.playCard = function(card) { r.playCard = function(card){
if(card === -1) return; if(card === null || card === -1) return;
var field = this.field[card.getType()];
field.add(card); this.hand.remove(card);
if(!this.placeCard(card)) return;
this.update(); this.update();
PubSub.publish("nextTurn"); PubSub.publish("nextTurn");
} }
r.placeCard = function(card){
var obj = {};
this.checkAbilities(card, obj);
if(obj._canclePlacement) return 0;
var field = obj.targetSide.field[card.getType()];
field.add(card);
PubSub.publish("onEachCardPlace");
this.checkAbilityOnAfterPlace(card);
return 1;
}
r.checkAbilities = function(card, obj){
var self = this;
obj.targetSide = this;
if(card.getAbility()){
var ability = card.getAbility();
if(ability.changeSide){
obj.targetSide = this.foe;
}
if(ability.replaceWith){
obj._canclePlacement = true;
var decoy = PubSub.subscribe("decoy:replaceWith", function(event, replaceCard){
if(replaceCard.getType() == Card.TYPE.LEADER ||
replaceCard.getType() == Card.TYPE.WEATHER ||
replaceCard.getType() == Card.TYPE.SPECIAL){
return;
}
PubSub.unsubscribe(decoy);
var field = self.field[replaceCard.getType()];
field.replaceWith(replaceCard, card);
self.hand.add(replaceCard);
self.update();
PubSub.publish("nextTurn");
})
}
if(ability.onEachTurn){
PubSub.subscribe("onEachTurn", ability.onEachTurn.bind(this, card));
}
if(ability.onEachCardPlace){
PubSub.subscribe("onEachCardPlace", ability.onEachCardPlace.bind(this, card));
}
}
}
r.checkAbilityOnAfterPlace = function(card){
var ability = card.getAbility();
if(ability){
if(ability.onAfterPlace){
ability.onAfterPlace.call(this, card)
}
}
}
return Battleside; return Battleside;
})(); })();

View File

@ -38,6 +38,7 @@ var Card = (function(){
WEATHER: 5 WEATHER: 5
}; };
r._init = function(){ r._init = function(){
this._id = ++Card.__id; this._id = ++Card.__id;
} }
@ -46,15 +47,15 @@ var Card = (function(){
return this._data.name; return this._data.name;
} }
r.getPower = function(){ r.getPower = function(){
if(this._forcedPower > -1) { if(this._forcedPower > -1){
return this._forcedPower + this._boost; return this._forcedPower + this._boost;
} }
return this._data.power + this._boost; return this._data.power + this._boost;
} }
r.setForcedPower = function(nr) { r.setForcedPower = function(nr){
this._forcedPower = nr; this._forcedPower = nr;
} }
r.getRawAbility = function() { r.getRawAbility = function(){
return this._data.ability; return this._data.ability;
} }
r.getAbility = function(){ r.getAbility = function(){
@ -77,7 +78,8 @@ var Card = (function(){
return this._id; return this._id;
} }
r.boost = function(nr) { r.boost = function(nr){
this.getPower(); //to recalculate this._power;
this._boost += nr; this._boost += nr;
} }

View File

@ -19,27 +19,49 @@ var Field = (function(){
r._cards = null; r._cards = null;
r._score = 0; r._score = 0;
r.add = function(card) { r.add = function(card){
this._cards.push(card); this._cards.push(card);
this.updateScore(); this.updateScore();
} }
r.get = function() { r.get = function(){
return this._cards; return this._cards;
} }
r.getScore = function() { r.getScore = function(){
this.updateScore();
return this._score; return this._score;
} }
r.updateScore = function() { r.updateScore = function(){
this._score = 0; this._score = 0;
for(var i=0; i<this._cards.length; i++) { for(var i = 0; i < this._cards.length; i++) {
var card = this._cards[i]; var card = this._cards[i];
this._score += card.getPower(); this._score += card.getPower();
} }
} }
r.getPosition = function(card){
for(var i = 0; i < this._cards.length; i++) {
if(this._cards[i].getID() === card.getID()) return i;
}
return -1;
}
r.replaceWith = function(oldCard, newCard){
var index = this.getPosition(oldCard);
this._cards[index] = newCard;
return oldCard;
}
r.getCard = function(id){
for(var i = 0; i < this._cards.length; i++) {
var card = this._cards[i];
if(card.getID() == id) return card;
}
return -1;
}
return Field; return Field;
})(); })();

View File

@ -1,6 +1,7 @@
/*var $ = require("jquery");*//* /*var $ = require("jquery");*//*
var CardManager = require("./CardManager");*//* var CardManager = require("./CardManager");*//*
var PubSub = require("./pubsub");*/ var PubSub = require("./pubsub");*/
var Card = require("./Card");
var Hand = (function(){ var Hand = (function(){
@ -41,6 +42,8 @@ var Hand = (function(){
r.remove = function(id){ r.remove = function(id){
var n = this.length(); var n = this.length();
id = id instanceof Card ? id.getID() : id;
for(var i = 0; i < n; i++) { for(var i = 0; i < n; i++) {
if(this._hand[i].getID() != id) continue; if(this._hand[i].getID() != id) continue;
return this._hand.splice(i, 1); return this._hand.splice(i, 1);