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

more improvements. now with gameplay

This commit is contained in:
exane 2015-06-17 21:18:14 +02:00
parent f0cbb9de5d
commit dbf1b07c1f
8 changed files with 127 additions and 49 deletions

View File

@ -7,12 +7,13 @@ module.exports = {
},
"morale_boost": {
onAfterPlace: function(card) {
onAfterPlace: function(card) {
var field = this.field[card.getType()];
var cards = field.get();
cards.forEach(function(_card) {
if(_card.getID() == card.getID()) return;
if(_card.getRawPower() === -1) return;
_card.boost(1);
})
}
@ -50,7 +51,8 @@ module.exports = {
}
},
"weather_fog": {
onEachTurn: function(card) {
onEachTurn: function(args) {
card = args[0]
var targetRow = card.constructor.TYPE.RANGED;
var forcedPower = 1;
var field1 = this.field[targetRow].get();
@ -64,6 +66,7 @@ module.exports = {
});
},
onEachCardPlace: function(card) {
card = args[0]
var targetRow = card.constructor.TYPE.RANGED;
var forcedPower = 1;
var field1 = this.field[targetRow].get();

View File

@ -181,7 +181,7 @@ module.exports = {
},
"foltest_king_of_temeria": {
name: "Foltest: King of Temeria",
power: 0,
power: -1,
ability: "foltest_leader1",
img: "foltest_king",
faction: "Northern Realm",
@ -189,7 +189,7 @@ module.exports = {
},
"decoy": {
name: "Decoy",
power: 0,
power: -1,
ability: "decoy",
img: "decoy",
faction: null,
@ -197,7 +197,7 @@ module.exports = {
},
"impenetrable_fog": {
name: "Impenetrable Fog",
power: 0,
power: -1,
ability: "weather_fog",
img: "fog",
faction: null,

View File

@ -4,7 +4,8 @@
"description": "",
"main": "gulpfile.js",
"dependencies": {
"socket.io": "^1.3.5"
"socketcluster": "2.2.x",
"socketcluster-client": "2.2.x"
},
"devDependencies": {
"babelify": "^6.1.2",
@ -15,14 +16,11 @@
"handlebars": "^3.0.3",
"jquery": "^2.1.4",
"promise": "^7.0.1",
"pubsub-js": "^1.5.2",
"shortid": "^2.2.2",
"connect": "3.0.1",
"express": "4.12.3",
"minimist": "1.1.0",
"serve-static": "1.8.0",
"socketcluster": "2.2.x",
"socketcluster-client": "2.2.x",
"vinyl-source-stream": "^1.1.0"
},
"scripts": {

View File

@ -432,6 +432,10 @@ var User = Backbone.Model.extend({
var waiting = data.waiting;
self.set("waiting", waiting);
})
app.receive("set:passing", function(data){
var passing = data.passing;
self.set("passing", passing);
})
app.on("createRoom", this.createRoom, this);

View File

@ -1,8 +1,6 @@
var Battleside = require("./Battleside");
//var PubSub = require("pubsub-js");
var Card = require("./Card");
/*var io = global.io;*/
var Battle = (function(){
var Battle = function(id, p1, p2, socket){
@ -72,31 +70,21 @@ var Battle = (function(){
/*PubSub.subscribe("nextTurn", this.switchTurn.bind(this));*/
this.on("NextTurn", this.switchTurn);
this.switchTurn();
this.switchTurn(Math.random() > .5 ? this.p1 : this.p2);
}
r.switchTurn = function(__flag){
/*this.playerManager.renderInfos();
if(this.playerManager.bothPassed() && !this._roundCheck) {
//start new round
this._roundCheck = true;
this.checkRound();
return;
}
if(this.playerManager.bothPassed()) {
return;
}
var entity = this.playerManager.getNextPlayer();
this.playerManager.renderInfos();*/
r.switchTurn = function(side, __flag){
__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(__flag instanceof Battleside) {
side = __flag;
}*/
if(side.isPassing()){
if(__flag){
return this.startNextRound();
}
return this.switchTurn(1);
return this.switchTurn(side.foe, 1);
}
/*PubSub.publish("onEachTurn");*/
@ -109,7 +97,19 @@ var Battle = (function(){
}
r.startNextRound = function(){
var loser = this.checkRubies();
if(this.checkIfIsOver()){
console.log("its over!");
return;
}
this.p1.resetNewRound();
this.p2.resetNewRound();
console.log("start new round!");
this.update();
this.switchTurn(loser);
}
r.update = function(){
@ -140,17 +140,18 @@ var Battle = (function(){
});
}
r.runEvent = function(eventid, target, args){
target = target || this;
r.runEvent = function(eventid, ctx, args){
ctx = ctx || this;
args = args || [];
var event = "on" + eventid;
if(!this.events["on" + eventid]){
if(!this.events[event]){
return;
}
this.events[event].forEach(function(e){
e.apply(target, args);
e.apply(ctx, args);
});
this.update();
}
r.on = function(eventid, cb, ctx, args){
@ -160,9 +161,9 @@ var Battle = (function(){
if(!(event in this.events)){
this.events[event] = [];
}
/*if(!this.events[event]) {
this.events[event] = [];
}*/
if(typeof cb !== "function"){
throw new Error("cb not a function");
}
if(args){
this.events[event].push(cb.bind(ctx, args));
}
@ -179,6 +180,30 @@ var Battle = (function(){
delete this.events[event];
}
r.checkIfIsOver = function(){
return !(this.p1.getRubies() && this.p2.getRubies());
}
r.checkRubies = function(){
var scoreP1 = this.p1.getScore();
var scoreP2 = this.p2.getScore();
if(scoreP1 > scoreP2){
this.p2.removeRuby();
return this.p2;
}
if(scoreP2 > scoreP1){
this.p1.removeRuby();
return this.p1;
}
//tie
this.p1.removeRuby();
this.p2.removeRuby();
return 0;
}
return Battle;
})();

View File

@ -30,6 +30,7 @@ Battleside = (function(){
this.battle = battle;
this.hand = Hand();
this.deck = Deck(DeckData["test"]);
this._discard = [];
this.runEvent = this.battle.runEvent.bind(this.battle);
this.on = this.battle.on.bind(this.battle);
@ -48,14 +49,13 @@ Battleside = (function(){
if(self._isWaiting) return;
var card = self.findCardOnFieldByID(data.cardID);
if(card === -1) throw new Error("decoy:replace | unknown card");
/*PubSub.publish("decoy:replaceWith", card);*/
self.runEvent("Decoy:replaceWith", self, [card]);
})
this.receive("set:passing", function() {
self.setPassing(true);
self.update();/*
PubSub.publish("nextTurn");*/
self.runEvent("NextTurn");
self.runEvent("NextTurn", null, [self.foe]);
})
/*PubSub.subscribe("turn/" + this.getID(), this.onTurnStart.bind(this));*/
@ -74,7 +74,7 @@ Battleside = (function(){
r._range = null;
r._siege = null;
r._field = null;*/
r._lives = 2;
r._rubies = 2;
r._score = 0;
r._isWaiting = null;
r._passing = null;
@ -108,6 +108,7 @@ Battleside = (function(){
r.setPassing = function(b) {
this._passing = b;
this.send("set:passing", {passing: this._passing}, true);
}
r.wait = function(){
@ -154,13 +155,25 @@ Battleside = (function(){
r.getInfo = function(){
return {
name: this.getName(),
lives: this._lives,
lives: this._rubies,
score: this.calcScore(),
hand: this.hand.length(),
passing: this._passing
}
}
r.getRubies = function() {
return this._rubies;
}
r.getScore = function() {
return +this.calcScore();
}
r.removeRuby = function() {
this._rubies--;
}
r.getName = function(){
return this._name;
}
@ -203,8 +216,8 @@ Battleside = (function(){
this.update();
//PubSub.publish("nextTurn");
this.runEvent("NextTurn");
this.runEvent("NextTurn", this, [this.foe]);
}
r.placeCard = function(card){
@ -221,6 +234,8 @@ Battleside = (function(){
this.checkAbilityOnAfterPlace(card);
this.update();
return 1;
}
@ -236,29 +251,26 @@ Battleside = (function(){
if(ability.replaceWith){
obj._canclePlacement = true;
//var decoy = PubSub.subscribe("decoy:replaceWith", function(event, replaceCard){
this.on("Decoy:replaceWith", function(replaceCard) {
if(replaceCard.getType() == Card.TYPE.LEADER ||
replaceCard.getType() == Card.TYPE.WEATHER ||
replaceCard.getType() == Card.TYPE.SPECIAL){
return;
}
/*PubSub.unsubscribe(decoy);*/
if(replaceCard.getName() === card.getName()) return;
self.off("Decoy:replaceWith");
var field = self.field[replaceCard.getType()];
field.replaceWith(replaceCard, card);
self.hand.add(replaceCard);
/*
self.update();*/
self.update();
/*PubSub.publish("nextTurn");*/
self.runEvent("NextTurn");
self.runEvent("NextTurn", null, [self.foe]);
})
}
if(ability.onEachTurn){
//PubSub.subscribe("onEachTurn", ability.onEachTurn.bind(this, card));
this.on("EachTurn", ability.onEachTurn, this, [card])
}
if(ability.onEachCardPlace){
@ -278,6 +290,26 @@ Battleside = (function(){
}
}
r.clearMainFields = function() {
var cards1 = this.field[Card.TYPE.CLOSE_COMBAT].removeAll();
var cards2 = this.field[Card.TYPE.RANGED].removeAll();
var cards3 = this.field[Card.TYPE.SIEGE].removeAll();
var cards = cards1.concat(cards2.concat(cards3));
this.addToDiscard(cards);
}
r.addToDiscard = function(cards) {
var self = this;
cards.forEach(function(card) {
self._discard.push(card);
});
}
r.resetNewRound = function() {
this.clearMainFields();
this.setPassing(false);
}
return Battleside;
})();

View File

@ -50,11 +50,22 @@ var Card = (function(){
return this._data.name;
}
r.getPower = function(){
if(this._data.power === -1) return 0;
if(this._forcedPower > -1){
return this._forcedPower + this._boost;
}
return this._data.power + this._boost;
}
r.getRawPower = function() {
return this._data.power;
}
r.calculateBoost = function() {
this._boost = 0;
for (var key in this._boosts) {
var boost = this._boosts[key];
this.boost(boost.getPower());
}
}
r.setForcedPower = function(nr){
this._forcedPower = nr;
}
@ -82,7 +93,7 @@ var Card = (function(){
}
r.boost = function(nr){
this.getPower(); //to recalculate this._power;
/*this.getPower(); //to recalculate this._power;*/
this._boost += nr;
}

View File

@ -62,6 +62,11 @@ var Field = (function(){
return -1;
}
r.removeAll = function() {
var tmp = this._cards.slice();
this._cards = [];
return tmp;
}
return Field;
})();