mirror of
https://github.com/exane/not-gwent-online
synced 2024-10-31 10:36:53 +00:00
much more stuff
This commit is contained in:
parent
f09a66f547
commit
246c27f990
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
})();
|
})();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
})();
|
})();
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user