diff --git a/JGE/include/DebugRoutines.h b/JGE/include/DebugRoutines.h index 861f24277..119dc7bfa 100644 --- a/JGE/include/DebugRoutines.h +++ b/JGE/include/DebugRoutines.h @@ -4,6 +4,8 @@ // dirty, but I get OS header includes this way #include "JGE.h" +#include "OutputCapturer.h" + #include #include #include @@ -29,12 +31,23 @@ std::string ToHex(T* pointer) #if defined (WIN32) || defined (LINUX) #ifdef QT_CONFIG + +#ifdef CAPTURE_STDERR #define DebugTrace(inString) \ { \ std::ostringstream stream; \ - stream << inString << std::endl; \ - qDebug("%s", stream.str().c_str()); \ + stream << inString; \ + OutputCapturer::add(stream.str()); \ } +#else // CAPTURE_STDERR +#define DebugTrace(inString) \ +{ \ + std::ostringstream stream; \ + stream << inString; \ + qDebug("%s", stream.str().c_str()); \ +} +#endif // CAPTURE_STDERR + #elif defined (ANDROID) #include #define DebugTrace(inString) \ diff --git a/JGE/include/OutputCapturer.h b/JGE/include/OutputCapturer.h new file mode 100644 index 000000000..4b32e301a --- /dev/null +++ b/JGE/include/OutputCapturer.h @@ -0,0 +1,23 @@ +#ifndef OUTPUTCAPTURER_H +#define OUTPUTCAPTURER_H + +#if defined(QT_CONFIG) +#include +#include +#include +#include "Threading.h" + +class OutputCapturer +{ +private: + static std::ostringstream stream; + static boost::mutex mMutex; + +public: + static void add(const std::string& s); + static void debugAndClear(); + static void clear(); +}; +#endif + +#endif // OUTPUTCAPTURER_H diff --git a/JGE/include/Threading.h b/JGE/include/Threading.h index 916f228d0..8df78d59b 100644 --- a/JGE/include/Threading.h +++ b/JGE/include/Threading.h @@ -315,7 +315,6 @@ namespace boost #include #include -#include "../include/DebugRoutines.h" #include "../include/JLogger.h" namespace boost diff --git a/JGE/src/OutputCapturer.cpp b/JGE/src/OutputCapturer.cpp new file mode 100644 index 000000000..902dc10e8 --- /dev/null +++ b/JGE/src/OutputCapturer.cpp @@ -0,0 +1,22 @@ +#include "../include/OutputCapturer.h" + +std::ostringstream OutputCapturer::stream; +boost::mutex OutputCapturer::mMutex; + +void OutputCapturer::add(const std::string& s) +{ + boost::mutex::scoped_lock lock(mMutex); + stream << s << "\n"; +} + +void OutputCapturer::debugAndClear() +{ + stream.flush(); + qDebug("%s", stream.str().c_str()); + stream.str(""); +} + +void OutputCapturer::clear() +{ + stream.str(""); +} diff --git a/JGE/src/Qtconsole.cpp b/JGE/src/Qtconsole.cpp index 96b0c9efb..a09f5ba25 100644 --- a/JGE/src/Qtconsole.cpp +++ b/JGE/src/Qtconsole.cpp @@ -96,7 +96,11 @@ int main(int argc, char* argv[]) options.reloadProfile(); TestSuite testSuite("test/_tests.txt"); result = testSuite.run(); + int totalTests = testSuite.nbTests + testSuite.nbAITests; delete wagicCore; - DebugTrace("TestSuite done: failed test: " << result); + DebugTrace("TestSuite done: failed test: " << result << " out of " << totalTests << " total"); +#ifdef CAPTURE_STDERR + OutputCapturer::debugAndClear(); +#endif return result; } diff --git a/projects/mtg/Makefile b/projects/mtg/Makefile index 9485d7d1b..dc4f2b7fe 100644 --- a/projects/mtg/Makefile +++ b/projects/mtg/Makefile @@ -1,7 +1,7 @@ OBJS = objs/InteractiveButton.o objs/AbilityParser.o objs/ActionElement.o\ objs/ActionLayer.o objs/ActionStack.o objs/AIHints.o objs/AIMomirPlayer.o\ objs/AIPlayer.o objs/AIPlayerBaka.o objs/AIStats.o objs/AllAbilities.o\ - objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o\ + objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o\ objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o\ objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o\ objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o\ diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 6d356044e..038e29d22 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -23286,7 +23286,7 @@ type=Sorcery [/card] [card] name=Dragon Hatchling -auto={1}{R}:1/0 +auto={R}:1/0 abilities=flying text=Flying -- {R}: Dragon Hatchling gets +1/+0 until end of turn. mana={1}{R} diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 32841bb5a..7a5448816 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -226,6 +226,7 @@ colossus_of_sardia1.txt colossus_of_sardia2.txt composite_golem.txt conservator.txt +consign_to_dream.txt Contagion_Clasp.txt control_magic.txt control_magic2.txt diff --git a/projects/mtg/bin/Res/test/consign_to_dream.txt b/projects/mtg/bin/Res/test/consign_to_dream.txt new file mode 100644 index 000000000..599770868 --- /dev/null +++ b/projects/mtg/bin/Res/test/consign_to_dream.txt @@ -0,0 +1,25 @@ +# Test TargetChooser based on negation of two colors +# Grizzly bear should be put on top of library + +# name=Consign to Dream +# Return target permanent to its owner's hand. +# If that permanent is red or green, put it on top of its owner's library + +[INIT] +FIRSTMAIN +[PLAYER1] +hand:Consign to Dream +manapool:{2}{U} +inplay:grizzly bears +[PLAYER2] +[DO] +Consign to Dream +grizzly bears +endinterruption +[ASSERT] +FIRSTMAIN +[PLAYER1] +graveyard:Consign to Dream +library:grizzly bears +[PLAYER2] +[END] \ No newline at end of file diff --git a/projects/mtg/include/ActionElement.h b/projects/mtg/include/ActionElement.h index 7be2a33b8..bdd7007fe 100644 --- a/projects/mtg/include/ActionElement.h +++ b/projects/mtg/include/ActionElement.h @@ -9,10 +9,6 @@ #include #include "MTGDefinitions.h" -#define INACTIVE 0 -#define ACTION_REQUESTED 1 -#define ACTIVE 2 - class MTGCardInstance; class ManaCost; class Targetable; @@ -22,31 +18,33 @@ class WEvent; class ActionElement: public JGuiObject { protected: - int activeState; + enum Activity{ + Inactive, + ActionRequested, + Active + }; + + Activity activity; TargetChooser * tc; public: GamePhase currentPhase; GamePhase newPhase; int modal; int waitingForAnswer; - int getActivity(); - virtual void Update(float){}; - virtual void Render(){}; + virtual void Update(float){} + virtual void Render(){} virtual int testDestroy() { return 0; } - ; virtual int destroy() { return 0; } - ; virtual bool CheckUserInput(JButton) { return false; } - ; ActionElement(int id); ActionElement(const ActionElement& copyFromMe); TargetChooser * getActionTc(){return tc;} @@ -62,27 +60,22 @@ public: { return 0; } - ; virtual int stillInUse(MTGCardInstance *) { return 0; } - ; virtual int receiveEvent(WEvent *) { return 0; } - ; virtual int reactToClick(MTGCardInstance *) { return 0; } - ; virtual const char * getMenuText() { return "Ability"; } - ; virtual ActionElement * clone() const = 0; }; diff --git a/projects/mtg/include/ActionStack.h b/projects/mtg/include/ActionStack.h index 2f831245e..06e7f2afe 100644 --- a/projects/mtg/include/ActionStack.h +++ b/projects/mtg/include/ActionStack.h @@ -41,16 +41,9 @@ class DamageStack; class ManaCost; class TargetChooser; - -#define ACTIONSTACK_STANDARD 0 -#define ACTIONSTACK_TARGET 1 - class Interruptible: public PlayGuiObject, public Targetable { public: - //TODO : remove these when they are back in PlayGuiObject - float x, y; - int state, display; MTGCardInstance * source; virtual void Entering() @@ -186,6 +179,11 @@ public: class ActionStack :public GuiLayer { public: + enum ActionStackMode{ + ACTIONSTACK_STANDARD = 0, + ACTIONSTACK_TARGET = 1 + }; + typedef enum { NOT_DECIDED = 0, @@ -207,7 +205,7 @@ protected: InterruptDecision interruptDecision[2]; float timer; int currentState; - int mode; + ActionStackMode mode; int checked; ATutorialMessage* currentTutorial; int interruptBtnXOffset, noBtnXOffset, noToAllBtnXOffset, interruptDialogWidth; diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 64e14ee8f..6ff6c7521 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -873,8 +873,8 @@ public: return 0; if (!tc->canTarget(e->damage->target)) return 0; if (fromTc && !fromTc->canTarget(e->damage->source)) return 0; - if (type == 1 && e->damage->typeOfDamage != DAMAGE_COMBAT) return 0; - if (type == 2 && e->damage->typeOfDamage == DAMAGE_COMBAT) return 0; + if (type == 1 && e->damage->typeOfDamage != Damage::DAMAGE_COMBAT) return 0; + if (type == 2 && e->damage->typeOfDamage == Damage::DAMAGE_COMBAT) return 0; e->damage->target->thatmuch = e->damage->damage; e->damage->source->thatmuch = e->damage->damage; this->source->thatmuch = e->damage->damage; @@ -2577,7 +2577,7 @@ public: } else { - if (d->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (d->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { a->source = (MTGCardInstance *) d; } @@ -2725,7 +2725,7 @@ public: } else { - if (d->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (d->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { a->source = (MTGCardInstance *) d; } @@ -5549,7 +5549,7 @@ public: { WEventDamage * e = (WEventDamage *) event; Damage * d = e->damage; - if (combatonly && e->damage->typeOfDamage != DAMAGE_COMBAT) + if (combatonly && e->damage->typeOfDamage != Damage::DAMAGE_COMBAT) return 0; MTGCardInstance * card = d->source; if (d->damage > 0 && card && (card == source || card == source->target)) diff --git a/projects/mtg/include/CardDescriptor.h b/projects/mtg/include/CardDescriptor.h index 32cbbb11c..704e3d55f 100644 --- a/projects/mtg/include/CardDescriptor.h +++ b/projects/mtg/include/CardDescriptor.h @@ -9,9 +9,6 @@ #include "MTGGameZones.h" #include "Counters.h" -#define CD_OR 1 -#define CD_AND 2 - enum ENUM_COMPARISON_MODES { COMPARISON_NONE = 0, // Needs to remain 0 for quick if(comparison_mode) checks @@ -31,7 +28,12 @@ class CardDescriptor: public MTGCardInstance MTGCardInstance * match_not(MTGCardInstance * card); bool valueInRange(int comparisonMode, int value, int criterion); public: - int mode; + enum Operator{ + CD_OR = 1, + CD_AND = 2 + }; + + Operator mode; int powerComparisonMode; int toughnessComparisonMode; int manacostComparisonMode; diff --git a/projects/mtg/include/CardEffect.h b/projects/mtg/include/CardEffect.h deleted file mode 100644 index ef2ea3b09..000000000 --- a/projects/mtg/include/CardEffect.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _CARDEFFECT_H_ -#define _CARDEFFECT_H_ - -#include -#include "Effects.h" - -struct CardGui; - -class CardEffect: public Effect -{ -public: - CardEffect(CardGui* target); - ~CardEffect(); -private: - CardGui* target; - -public: - virtual void Render(); -}; - -#endif // _CARDEFFECT_H_ diff --git a/projects/mtg/include/Damage.h b/projects/mtg/include/Damage.h index 0074fa002..8789dd4d0 100644 --- a/projects/mtg/include/Damage.h +++ b/projects/mtg/include/Damage.h @@ -11,17 +11,15 @@ class JGuiObject; class MTGCardInstance; class GameObserver; -#define DAMAGEABLE_MTGCARDINSTANCE 0 -#define DAMAGEABLE_PLAYER 1 - -#define DAMAGE_ALL_TYPES 0 -#define DAMAGE_COMBAT 1 -#define DAMAGE_OTHER 2 - class Damageable:public Targetable { protected: public: + enum DamageableType{ + DAMAGEABLE_MTGCARDINSTANCE = 0, + DAMAGEABLE_PLAYER + }; + int life; int handsize; int poisonCount; @@ -29,12 +27,14 @@ public: int preventable; int thatmuch; int lifeLostThisTurn; - int type_as_damageable; + DamageableType type_as_damageable; Damageable(GameObserver* observer, int _life) - : Targetable(observer) - {life=_life;lifeLostThisTurn = 0;}; - int getLife(){return life;}; - virtual int dealDamage(int damage){life-=damage;return life;}; + : Targetable(observer), life(_life), handsize(0), + poisonCount(0), damageCount(0), preventable(0), thatmuch(0), + lifeLostThisTurn(0), type_as_damageable(DAMAGEABLE_MTGCARDINSTANCE) + {} + int getLife(){return life;} + virtual int dealDamage(int damage){life-=damage;return life;} virtual int afterDamage(){return 0;} virtual int poisoned(){return 0;} virtual int prevented(){return 0;} @@ -47,17 +47,23 @@ public: class Damage: public Interruptible { - protected: - void init(MTGCardInstance * source, Damageable * target, int damage, int typeOfDamage); public: + enum DamageType{ + DAMAGE_ALL_TYPES = 0, + DAMAGE_COMBAT, + DAMAGE_OTHER + }; + Damageable * target; - int typeOfDamage; + DamageType typeOfDamage; int damage; void Render(); Damage(GameObserver* observer, MTGCardInstance* source, Damageable * target); - Damage(GameObserver* observer, MTGCardInstance* source, Damageable * target, int damage, int typeOfDamage = DAMAGE_OTHER); + Damage(GameObserver* observer, MTGCardInstance* source, Damageable * target, int damage, DamageType typeOfDamage = DAMAGE_OTHER); int resolve(); virtual ostream& toString(ostream& out) const; + protected: + void init(MTGCardInstance * source, Damageable * target, int damage, DamageType typeOfDamage); }; class DamageStack : public GuiLayer, public Interruptible diff --git a/projects/mtg/include/GameApp.h b/projects/mtg/include/GameApp.h index 7c0c996d7..eeb1c8141 100644 --- a/projects/mtg/include/GameApp.h +++ b/projects/mtg/include/GameApp.h @@ -20,7 +20,6 @@ #include "MTGCard.h" #include "MTGGameZones.h" -#include "CardEffect.h" #ifdef NETWORK_SUPPORT #include "JNetwork.h" #endif //NETWORK_SUPPORT @@ -49,7 +48,6 @@ public: GameType gameType; Rules * rules; - CardEffect *effect; #ifdef NETWORK_SUPPORT string mServerAddress; JNetwork* mpNetwork; diff --git a/projects/mtg/include/OSD.h b/projects/mtg/include/OSD.h deleted file mode 100644 index f6733ebd3..000000000 --- a/projects/mtg/include/OSD.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _OSD_H_ -#define _OSD_H_ - -class OSDLayer: public PlayGuiObjectController -{ - virtual void Update(float dt); - virtual bool CheckUserInput(JButton key); - virtual void Render(); -}; - -#endif diff --git a/projects/mtg/include/ReplacementEffects.h b/projects/mtg/include/ReplacementEffects.h index 58219923c..1c2550fdc 100644 --- a/projects/mtg/include/ReplacementEffects.h +++ b/projects/mtg/include/ReplacementEffects.h @@ -29,9 +29,10 @@ protected: TargetChooser * tcTarget; int damage; bool oneShot; - int typeOfDamage; + Damage::DamageType typeOfDamage; public: - REDamagePrevention(MTGAbility * _source, TargetChooser *_tcSource = NULL, TargetChooser *_tcTarget = NULL, int _damage = -1, bool _oneShot = true, int typeOfDamage = DAMAGE_ALL_TYPES); + REDamagePrevention(MTGAbility * _source, TargetChooser *_tcSource = NULL, TargetChooser *_tcTarget = NULL, + int _damage = -1, bool _oneShot = true, Damage::DamageType typeOfDamage = Damage::DAMAGE_ALL_TYPES); WEvent * replace(WEvent *e); ~REDamagePrevention(); }; diff --git a/projects/mtg/src/AIHints.cpp b/projects/mtg/src/AIHints.cpp index f61686598..c8dae463f 100644 --- a/projects/mtg/src/AIHints.cpp +++ b/projects/mtg/src/AIHints.cpp @@ -74,8 +74,7 @@ AIHint::AIHint(string _line) if(action.find( "combo ") != string::npos) { - string Combo = ""; - Combo = action.c_str() + 6; + string Combo = action.c_str() + 6; combos.push_back(Combo); } @@ -307,14 +306,13 @@ bool AIHints::canWeCombo(GameObserver* observer,MTGCardInstance * card,AIPlayerB TargetChooserFactory tfc(observer); TargetChooser * hintTc = NULL; bool gotCombo = false; - int comboPartsHold = 0; - int comboPartsUntil = 0; - int comboPartsRestriction = 0; + for(unsigned int i = 0; i < hints.size();i++) { - comboPartsHold = 0; - comboPartsUntil = 0; - comboPartsRestriction = 0; + int comboPartsHold = 0; + int comboPartsUntil = 0; + int comboPartsRestriction = 0; + if(gotCombo) return gotCombo;//because more then one might be possible at any time. if (hints[i]->hold.size()) diff --git a/projects/mtg/src/AIMomirPlayer.cpp b/projects/mtg/src/AIMomirPlayer.cpp index 0d7e741a5..5daaa55b3 100644 --- a/projects/mtg/src/AIMomirPlayer.cpp +++ b/projects/mtg/src/AIMomirPlayer.cpp @@ -90,13 +90,12 @@ int AIMomirPlayer::computeActions() } else if (p == this && observer->mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0) { //standard actions - CardDescriptor cd; - MTGCardInstance * card = NULL; switch (currentGamePhase) { case MTG_PHASE_FIRSTMAIN: { + CardDescriptor cd; ManaCost * potentialMana = getPotentialMana(); int converted = potentialMana->getConvertedCost(); SAFE_DELETE(potentialMana); @@ -106,7 +105,7 @@ int AIMomirPlayer::computeActions() //Attempt to put land into play cd.init(); cd.setColor(Constants::MTG_COLOR_LAND); - card = cd.match(game->hand); + MTGCardInstance *card = cd.match(game->hand); int canPutLandsIntoPlay = game->playRestrictions->canPutIntoZone(card, game->inPlay); if (card && (canPutLandsIntoPlay == PlayRestriction::CAN_PLAY)) { @@ -118,15 +117,12 @@ int AIMomirPlayer::computeActions() } momir(); return 1; - break; } case MTG_PHASE_SECONDMAIN: selectAbility(); return 1; - break; default: return AIPlayerBaka::computeActions(); - break; } } return AIPlayerBaka::computeActions(); diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index 1c911af9d..fdb1e23bf 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -97,7 +97,7 @@ int AIAction::clickMultiAct(vector& actionTargets) ite = actionTargets.erase(ite); continue; } - ite++; + ++ite; } //shuffle to make it less predictable, otherwise ai will always seem to target from right to left. making it very obvious. @@ -167,7 +167,7 @@ int AIPlayer::clickMultiTarget(TargetChooser * tc, vector& potentia ite = potentialTargets.erase(ite); continue; } - ite++; + ++ite; } randomGenerator.random_shuffle(potentialTargets.begin(), potentialTargets.end()); diff --git a/projects/mtg/src/AIPlayerBaka.cpp b/projects/mtg/src/AIPlayerBaka.cpp index 2c1039562..3368812d0 100644 --- a/projects/mtg/src/AIPlayerBaka.cpp +++ b/projects/mtg/src/AIPlayerBaka.cpp @@ -134,10 +134,9 @@ int OrderedAIAction::getEfficiency() if (!target) break; - bool NeedPreventing; - NeedPreventing = false; if (currentPhase == MTG_PHASE_COMBATBLOCKERS) { + bool NeedPreventing = false; MTGCardInstance * nextOpponent = target->getNextOpponent(); if(!nextOpponent) break; @@ -152,12 +151,10 @@ int OrderedAIAction::getEfficiency() //small bonus added for the poor 1/1s, if we can save them, we will unless something else took precidence. //note is the target is being blocked or blocking a creature with wither or deathtouch, it is not even considered for preventing as it is a waste. //if its combat blockers, it is being blocked or blocking, and has less prevents the the amount of damage it will be taking, the effeincy is increased slightly and totalled by the danger rank multiplier for final result. - int calculateAfterDamage = 0; - int damages = 0; if((target->defenser || target->blockers.size()) && target->controller() == p) { - damages = nextOpponent->power; - calculateAfterDamage = int(target->toughness - damages); + int damages = nextOpponent->power; + int calculateAfterDamage = target->toughness - damages; if((calculateAfterDamage + target->preventable) > 0) { efficiency = 0; @@ -588,8 +585,7 @@ int OrderedAIAction::getEfficiency() efficiency = 80; if(atc->name.length() && atc->sabilities.length() && atc->types.size() && p->game->inPlay->findByName(atc->name)) { - list::iterator it; - for (it = atc->types.begin(); it != atc->types.end(); it++) + for (list::const_iterator it = atc->types.begin(); it != atc->types.end(); ++it) { if(*it == Subtypes::TYPE_LEGENDARY)//ai please stop killing voja!!! :P efficiency = 0; @@ -978,11 +974,10 @@ vector AIPlayerBaka::canPayMana(MTGCardInstance * target,ManaCost * } } ManaCostHybrid * hybridCost; - int hyb; - hyb = 0; hybridCost = cost->getHybridCost(0); if(hybridCost) { + int hyb = 0; while ((hybridCost = cost->getHybridCost(hyb)) != NULL) { //here we try to find one of the colors in the hybrid cost, it is done 1 at a time unfortunately @@ -1046,7 +1041,6 @@ vector AIPlayerBaka::canPayMana(MTGCardInstance * target,ManaCost * { ManaCost * withKickerCost= NEW ManaCost(cost->getKicker()); - int canKick = 0; vectorkickerPayment; bool keepLooking = true; while(keepLooking) @@ -1061,7 +1055,6 @@ vector AIPlayerBaka::canPayMana(MTGCardInstance * target,ManaCost * payments.push_back(kickerPayment[w]); } } - canKick += 1; keepLooking = cost->getKicker()->isMulti; } else @@ -1297,12 +1290,10 @@ int AIPlayerBaka::createAbilityTargets(MTGAbility * a, MTGCardInstance * c, Rank TargetChooser * AIPlayerBaka::GetComboTc( GameObserver * observer,TargetChooser * tc) { - TargetChooser * gathertc = NULL; TargetChooserFactory tcf(observer); - map::iterator it = comboHint->cardTargets.begin(); - for(map::iterator it = comboHint->cardTargets.begin();it != comboHint->cardTargets.end();it++) + for(map::iterator it = comboHint->cardTargets.begin();it != comboHint->cardTargets.end();++it) { - gathertc = tcf.createTargetChooser(it->first.c_str(),tc->source); + TargetChooser *gathertc = tcf.createTargetChooser(it->first.c_str(),tc->source); gathertc->setAllZones(); if(gathertc->canTarget(tc->source)) { @@ -1402,7 +1393,6 @@ int AIPlayerBaka::selectAbility() MTGCardInstance * card = game->inPlay->cards[j]; if(a->getCost() && !a->isReactingToClick(card, totalPotentialMana))//for performance reason only look for specific mana if the payment couldnt be made with potential. { - abilityPayment = vector(); abilityPayment = canPayMana(card,a->getCost()); } if (a->isReactingToClick(card, totalPotentialMana) || abilityPayment.size()) @@ -1410,10 +1400,9 @@ int AIPlayerBaka::selectAbility() if(a->getCost() && a->getCost()->hasX() && totalPotentialMana->getConvertedCost() < a->getCost()->getConvertedCost()+1) continue; //don't even bother to play an ability with {x} if you can't even afford x=1. - ManaCost * fullPayment = NULL; if (abilityPayment.size()) { - fullPayment = NEW ManaCost(); + ManaCost *fullPayment = NEW ManaCost(); for(int ch = 0; ch < int(abilityPayment.size());ch++) { AManaProducer * ampp = dynamic_cast (abilityPayment[ch]); @@ -1525,7 +1514,7 @@ int AIPlayerBaka::chooseTarget(TargetChooser * _tc, Player * forceTarget,MTGCard } //Make sure we own the decision to choose the targets assert(tc->Owner == observer->currentlyActing()); - if (tc && tc->Owner != observer->currentlyActing()) + if (tc->Owner != observer->currentlyActing()) { observer->currentActionPlayer = tc->Owner; //this is a hack, but if we hit this condition we are locked in a infinate loop @@ -1905,12 +1894,11 @@ MTGCardInstance * AIPlayerBaka::activateCombo() { if(!comboHint) return NULL; - TargetChooser * hintTc = NULL; TargetChooserFactory tfc(observer); ManaCost * totalCost = ManaCost::parseManaCost(comboHint->manaNeeded); for(unsigned int k = 0;k < comboHint->casting.size(); k++) { - hintTc = tfc.createTargetChooser(comboHint->casting[k],nextCardToPlay); + TargetChooser *hintTc = tfc.createTargetChooser(comboHint->casting[k],nextCardToPlay); int combohand = game->hand->cards.size(); for(int j = 0; j < combohand;j++) { diff --git a/projects/mtg/src/AIStats.cpp b/projects/mtg/src/AIStats.cpp index 3e9a59664..b181e238b 100644 --- a/projects/mtg/src/AIStats.cpp +++ b/projects/mtg/src/AIStats.cpp @@ -24,7 +24,7 @@ AIStats::AIStats(Player * _player, char * _filename) AIStats::~AIStats() { list::iterator it; - for (it = stats.begin(); it != stats.end(); it++) + for (it = stats.begin(); it != stats.end(); ++it) { AIStat * stat = *it; delete stat; @@ -47,7 +47,7 @@ void AIStats::updateStatsCard(MTGCardInstance * cardInstance, Damage * damage, f { stat->value += static_cast(multiplier * STATS_PLAYER_MULTIPLIER * damage->damage); } - else if (damage->target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + else if (damage->target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { MTGCardInstance * target = (MTGCardInstance *) damage->target; if (target->controller() == player && !target->isInPlay(player->getObserver())) @@ -115,7 +115,7 @@ bool AIStats::isInTop(MTGCardInstance * card, unsigned int max, bool tooSmallCou MTGCard * source = card->model; int id = source->getMTGId(); list::iterator it; - for (it = stats.begin(); it != stats.end(); it++) + for (it = stats.begin(); it != stats.end(); ++it) { if (n >= max) return false; @@ -135,7 +135,7 @@ AIStat * AIStats::find(MTGCard * source) { int id = source->getMTGId(); list::iterator it; - for (it = stats.begin(); it != stats.end(); it++) + for (it = stats.begin(); it != stats.end(); ++it) { AIStat * stat = *it; if (stat->source == id) @@ -174,7 +174,7 @@ void AIStats::save() { char writer[128]; list::iterator it; - for (it = stats.begin(); it != stats.end(); it++) + for (it = stats.begin(); it != stats.end(); ++it) { AIStat * stat = *it; if (stat->value > 0) diff --git a/projects/mtg/src/ActionElement.cpp b/projects/mtg/src/ActionElement.cpp index abf685513..f5956fe2e 100644 --- a/projects/mtg/src/ActionElement.cpp +++ b/projects/mtg/src/ActionElement.cpp @@ -8,7 +8,7 @@ ActionElement::ActionElement(int id) : JGuiObject(id) { - activeState = INACTIVE; + activity = Inactive; modal = 0; waitingForAnswer = 0; currentPhase = MTG_PHASE_INVALID; @@ -18,7 +18,7 @@ ActionElement::ActionElement(int id) : ActionElement::ActionElement(const ActionElement& a): JGuiObject(a) { - activeState = a.activeState; + activity = a.activity; tc = a.tc ? a.tc->clone() : NULL; currentPhase = a.currentPhase; newPhase = a.newPhase; @@ -31,12 +31,6 @@ ActionElement::~ActionElement() SAFE_DELETE(tc); } -int ActionElement::getActivity() -{ - - return activeState; -} - int ActionElement::isReactingToTargetClick(Targetable * object) { if (MTGCardInstance * cObject = dynamic_cast(object)) diff --git a/projects/mtg/src/ActionLayer.cpp b/projects/mtg/src/ActionLayer.cpp index 4ea73402e..5efec2e67 100644 --- a/projects/mtg/src/ActionLayer.cpp +++ b/projects/mtg/src/ActionLayer.cpp @@ -165,8 +165,6 @@ void ActionLayer::Update(float dt) if (cantCancel) { ActionElement * ae = isWaitingForAnswer(); - int countTargets = 0; - int maxTargets = 0; if(ae && ae->getActionTc()) { if (!ae->getActionTc()->validTargetsExist()) @@ -175,8 +173,8 @@ void ActionLayer::Update(float dt) cancelCurrentAction(); return; } - countTargets = ae->getActionTc()->countValidTargets(); - maxTargets = ae->getActionTc()->maxtargets; + int countTargets = ae->getActionTc()->countValidTargets(); + int maxTargets = ae->getActionTc()->maxtargets; if (countTargets < maxTargets) { /* @@ -266,7 +264,7 @@ int ActionLayer::receiveEventPlus(WEvent * event) ActionElement * currentAction = (ActionElement *) mObjects[i]; result += currentAction->receiveEvent(event); } - return 0; + return result; } int ActionLayer::isReactingToTargetClick(Targetable * card) @@ -440,10 +438,9 @@ void ActionLayer::setCustomMenuObject(Targetable * object, bool must,vectorisMultipleChoice = true; - ActionElement * currentAction = NULL; for(int w = 0; w < int(abilities.size());w++) { - currentAction = (ActionElement*)abilities[w]; + ActionElement* currentAction = (ActionElement*)abilities[w]; currentActionCard = (MTGCardInstance*)abilities[0]->target; abilitiesMenu->Add(mObjects.size()-1, currentAction->getMenuText(),"",false); } diff --git a/projects/mtg/src/ActionStack.cpp b/projects/mtg/src/ActionStack.cpp index 69a32202e..6509bc217 100644 --- a/projects/mtg/src/ActionStack.cpp +++ b/projects/mtg/src/ActionStack.cpp @@ -161,7 +161,7 @@ void StackAbility::Render() if (target) { quad = target->getIcon(); - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { alt2 = ((MTGCardInstance *) target)->name; } @@ -400,7 +400,7 @@ void Spell::Render() if (target) { quad = target->getIcon(); - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { alt2 = ((MTGCardInstance *) target)->name; } diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 8cbe9742d..d0f2cad43 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -2351,7 +2351,7 @@ int AALifer::resolve() return 0; WParsedInt life(life_s, NULL, source); - if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (_target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { _target = ((MTGCardInstance *) _target)->controller(); } @@ -4380,7 +4380,7 @@ int AAExchangeLife::resolve() int oldlife = player->getLife(); int targetOldLife = _target->getLife(); int modifier = oldlife > targetOldLife? oldlife - targetOldLife:targetOldLife - oldlife; - if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (_target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { int increaser = 0; MTGCardInstance * card = ((MTGCardInstance*)_target); @@ -4597,15 +4597,15 @@ int APreventDamageTypes::addToGame() fromTc->targetter = NULL; if (type != 1 && type != 2) {//not adding this creates a memory leak. - re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, DAMAGE_COMBAT); + re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, Damage::DAMAGE_COMBAT); } else if (type == 1) { - re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, DAMAGE_ALL_TYPES); + re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, Damage::DAMAGE_ALL_TYPES); } else if (type == 2) { - re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, DAMAGE_OTHER); + re = NEW REDamagePrevention(this, fromTc, toTc, -1, false, Damage::DAMAGE_OTHER); } game->replacementEffects->add(re); return MTGAbility::addToGame(); diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index 995ff79b4..f304e356d 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -160,7 +160,8 @@ MTGCardInstance * CardDescriptor::match_and(MTGCardInstance * card) if (mColorExclusions) { - if ((mColorExclusions & card->colors) == mColorExclusions) + // if any of forbidden colors intersect with card colors + if ((mColorExclusions & card->colors) != 0) match = NULL; } diff --git a/projects/mtg/src/CardEffect.cpp b/projects/mtg/src/CardEffect.cpp deleted file mode 100644 index 12afd8bb2..000000000 --- a/projects/mtg/src/CardEffect.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "../include/GameApp.h" -#include "../include/MTGCard.h" -#include "../include/GameOptions.h" -#include "../include/CardEffect.h" - -CardEffect::CardEffect(CardGui* target) : - target(target) -{ - -} - -CardEffect::~CardEffect() -{ - -} - -void CardEffect::Render() -{ - // std::cout << "Rendering effect" << std::endl; -} diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 0874f8291..0c414ae94 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1013,7 +1013,7 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) CardDescriptor cd; MTGCardInstance * card = (MTGCardInstance*) _card->data; cd.init(); - cd.mode = CD_OR; + cd.mode = CardDescriptor::CD_OR; while (filter.size()) { @@ -1033,13 +1033,13 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) string attribute; if (found2 != string::npos) { - cd.mode = CD_OR; + cd.mode = CardDescriptor::CD_OR; attribute = attributes.substr(0, found2); attributes = attributes.substr(found2 + 1); } else if (foundAnd != string::npos) { - cd.mode = CD_AND; + cd.mode = CardDescriptor::CD_AND; attribute = attributes.substr(0, foundAnd); attributes = attributes.substr(foundAnd + 1); } @@ -1302,7 +1302,7 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) } } if (nbminuses) - cd.mode = CD_AND; + cd.mode = CardDescriptor::CD_AND; filter = filter.substr(0, found); } else @@ -1312,7 +1312,7 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) if (found != string::npos) { - cd.mode = CD_OR; + cd.mode = CardDescriptor::CD_OR; typeName = filter.substr(0, found); filter = filter.substr(found + 1); } diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index aff70bd6b..394294ad9 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -14,13 +14,13 @@ Damage::Damage(GameObserver* observer, MTGCardInstance * source, Damageable * ta init(source, target, source->getPower(), DAMAGE_OTHER); } -Damage::Damage(GameObserver* observer, MTGCardInstance * source, Damageable * target, int damage, int _typeOfDamage) +Damage::Damage(GameObserver* observer, MTGCardInstance * source, Damageable * target, int damage, DamageType _typeOfDamage) : Interruptible(observer) { init(source, target, damage, _typeOfDamage); } -void Damage::init(MTGCardInstance * _source, Damageable * _target, int _damage, int _typeOfDamage) +void Damage::init(MTGCardInstance * _source, Damageable * _target, int _damage, DamageType _typeOfDamage) { typeOfDamage = _typeOfDamage; target = _target; @@ -59,29 +59,19 @@ int Damage::resolve() //reserved for culmulitive absorb ability coding //prevent next damage----------------------------- - if ((target)->preventable >= 1) + if (target->preventable > 0) { - int preventing = (target)->preventable; - for (int k = preventing; k > 0; k--) - { - //the following keeps preventable from ADDING toughness/life if damage was less then preventable amount. - for (int i = damage; i >= 1; i--) - { - (target)->preventable -= 1; - damage -= 1; - break;//does the redux of damage 1 time, breaks the loop to deincrement preventing and start the loop over. - } - } + int preventing = MIN(target->preventable, damage); + damage -= preventing; + target->preventable -= preventing; } - - //set prevent next damage back to 0 if it is equal to less then 0 - if ((target)->preventable < 0) + else { - (target)->preventable = 0; + target->preventable = 0; } //------------------------------------------------- - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { MTGCardInstance * _target = (MTGCardInstance *) target; if ((_target)->protectedAgainst(source)) @@ -134,7 +124,7 @@ int Damage::resolve() int a = damage; - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE && (source->has(Constants::WITHER) || source->has( + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (source->has(Constants::WITHER) || source->has( Constants::INFECT))) { // Damage for WITHER or poison on creatures. This should probably go in replacement effects @@ -146,7 +136,7 @@ int Damage::resolve() if(_target->toughness <= 0 && _target->has(Constants::INDESTRUCTIBLE)) _target->controller()->game->putInGraveyard(_target); } - else if (target->type_as_damageable == DAMAGEABLE_PLAYER && (source->has(Constants::INFECT)||source->has(Constants::POISONDAMAGER))) + else if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && (source->has(Constants::INFECT)||source->has(Constants::POISONDAMAGER))) { // Poison on player Player * _target = (Player *) target; @@ -163,7 +153,7 @@ int Damage::resolve() } } } - else if (target->type_as_damageable == DAMAGEABLE_PLAYER && (source->has(Constants::POISONTOXIC) || + else if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && (source->has(Constants::POISONTOXIC) || source->has(Constants::POISONTWOTOXIC) || source->has(Constants::POISONTHREETOXIC))) { //Damage + 1, 2, or 3 poison counters on player @@ -202,9 +192,9 @@ int Damage::resolve() //return the left over amount after effects have been applied to them. a = target->dealDamage(damage); target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) ((MTGCardInstance*)target)->wasDealtDamage = true; - if (target->type_as_damageable == DAMAGEABLE_PLAYER) + if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER) { if(target == source->controller()) { @@ -260,7 +250,7 @@ void Damage::Render() } else { - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) mFont->DrawString(_(((MTGCardInstance *) target)->getName()).c_str(), x + 120, y); } diff --git a/projects/mtg/src/DamagerDamaged.cpp b/projects/mtg/src/DamagerDamaged.cpp index 158a8d3dd..5f2be1383 100644 --- a/projects/mtg/src/DamagerDamaged.cpp +++ b/projects/mtg/src/DamagerDamaged.cpp @@ -43,7 +43,7 @@ void DamagerDamaged::addDamage(int damage, DamagerDamaged* source) return; } if (0 < damage) - damages.push_back(Damage(card->getObserver(), source->card, card, damage, DAMAGE_COMBAT)); + damages.push_back(Damage(card->getObserver(), source->card, card, damage, Damage::DAMAGE_COMBAT)); return; } diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index 18e395760..b82265623 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -1188,10 +1188,11 @@ bool GameOptionKeyBindings::read(string input) iss.get(*(s.rdbuf()), ','); iss.get(); - LocalKeySym local; - char sep; - u32 button; + LocalKeySym local = 0; + char sep = 0; + u32 button = 0; s >> local >> sep >> button; + if (':' != sep) return false; assoc.push_back(make_pair(local, u32_to_button(button))); diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 41a8a2f37..24e51f910 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -23,22 +23,6 @@ #include "AIPlayer.h" - -//!! helper function; this is probably handled somewhere in the code already. -// If not, should be placed in general library -void StringExplode(string str, string separator, vector* results) -{ - size_t found; - found = str.find_first_of(separator); - while (found != string::npos) - { - if (found > 0) results->push_back(str.substr(0, found)); - str = str.substr(found + 1); - found = str.find_first_of(separator); - } - if (str.length() > 0) results->push_back(str); -} - GameStateDeckViewer::GameStateDeckViewer(GameApp* parent) : GameState(parent, "deckeditor") { diff --git a/projects/mtg/src/GameStateMenu.cpp b/projects/mtg/src/GameStateMenu.cpp index 11327ce83..b6df5f2f8 100644 --- a/projects/mtg/src/GameStateMenu.cpp +++ b/projects/mtg/src/GameStateMenu.cpp @@ -65,6 +65,7 @@ GameStateMenu::GameStateMenu(GameApp* parent) : scroller = NULL; langChoices = false; primitivesLoadCounter = -1; + bgTexture = NULL; } GameStateMenu::~GameStateMenu() diff --git a/projects/mtg/src/GuiCombat.cpp b/projects/mtg/src/GuiCombat.cpp index 46265e209..29888cac1 100644 --- a/projects/mtg/src/GuiCombat.cpp +++ b/projects/mtg/src/GuiCombat.cpp @@ -526,7 +526,7 @@ int GuiCombat::resolve() // Returns the number of damage objects dealt this turn } if (dmg > 0 && ((!attacker->isBlocked()) || attacker->has(Constants::TRAMPLE))) - stack->Add(NEW Damage(observer, (*it)->card, (Damageable*)attacker->isAttacking?(Damageable*)attacker->isAttacking:observer->opponent(), dmg, DAMAGE_COMBAT)); + stack->Add(NEW Damage(observer, (*it)->card, (Damageable*)attacker->isAttacking?(Damageable*)attacker->isAttacking:observer->opponent(), dmg, Damage::DAMAGE_COMBAT)); for (vector::iterator d = (*it)->damages.begin(); d != (*it)->damages.end(); ++d) stack->Add(NEW Damage(*d)); diff --git a/projects/mtg/src/GuiMessageBox.cpp b/projects/mtg/src/GuiMessageBox.cpp deleted file mode 100644 index 94b22ac0c..000000000 --- a/projects/mtg/src/GuiMessageBox.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "GuiMessageBox.h" - -bool GuiMessageBox::CheckUserInput(JButton key) -{ - if (mActionButton == key) - { - if (mObjects[mCurr] != NULL && mObjects[mCurr]->ButtonPressed()) - { - if (mListener != NULL) - { - mListener->ButtonPressed(mId, mObjects[mCurr]->GetId()); - return true; - } - } - } - - if ((PSP_CTRL_LEFT == key) || (PSP_CTRL_UP == key)) // || mEngine->GetAnalogY()<64) - { - int n = mCurr; - n--; - if (n < 0) - { - if ((mStyle & JGUI_STYLE_WRAPPING)) - n = mCount - 1; - else - n = 0; - } - - if (n != mCurr && mObjects[mCurr] != NULL && mObjects[mCurr]->Leaving(PSP_CTRL_UP)) - { - mCurr = n; - mObjects[mCurr]->Entering(); - } - return true; - } - else if ((PSP_CTRL_RIGHT == key) || (PSP_CTRL_DOWN == key)) // || mEngine->GetAnalogY()>192) - { - int n = mCurr; - n++; - if (n > mCount - 1) - { - if ((mStyle & JGUI_STYLE_WRAPPING)) - n = 0; - else - n = mCount - 1; - } - - if (n != mCurr && mObjects[mCurr] != NULL && mObjects[mCurr]->Leaving(PSP_CTRL_DOWN)) - { - mCurr = n; - mObjects[mCurr]->Entering(); - } - return true; - } - return false; -} diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index ff52b934a..cebf7e5ac 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -4477,7 +4477,7 @@ Player * MTGAbility::getPlayerFromDamageable(Damageable * target) if (!target) return NULL; - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) return ((MTGCardInstance *) target)->controller(); return (Player *) target; diff --git a/projects/mtg/src/MTGGamePhase.cpp b/projects/mtg/src/MTGGamePhase.cpp index 4c93439e3..e88ae621d 100644 --- a/projects/mtg/src/MTGGamePhase.cpp +++ b/projects/mtg/src/MTGGamePhase.cpp @@ -17,7 +17,7 @@ void MTGGamePhase::Update(float) int newState = observer->getCurrentGamePhase(); if (newState != currentState) { - activeState = ACTIVE; + activity = Active; animation = 4; currentState = newState; } @@ -28,18 +28,18 @@ void MTGGamePhase::Update(float) } else { - activeState = INACTIVE; + activity = Inactive; animation = 0; } } bool MTGGamePhase::NextGamePhase() { - if (activeState == INACTIVE) + if (activity == Inactive) { if (observer->currentActionPlayer == observer->currentlyActing()) { - activeState = ACTIVE; + activity = Active; observer->userRequestNextGamePhase(); return true; } diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index b8da4451c..03101b281 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -2700,7 +2700,7 @@ int MTGDeathtouchRule::receiveEvent(WEvent * event) if (!card) return 0; - if (d->target->type_as_damageable != DAMAGEABLE_MTGCARDINSTANCE) + if (d->target->type_as_damageable != Damageable::DAMAGEABLE_MTGCARDINSTANCE) return 0; MTGCardInstance * _target = (MTGCardInstance *) (d->target); diff --git a/projects/mtg/src/MTGSpellStack.cpp b/projects/mtg/src/MTGSpellStack.cpp deleted file mode 100644 index 0b8fac351..000000000 --- a/projects/mtg/src/MTGSpellStack.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "MTGSpellStack.h" - -MTGSpellStack::MTGSpellStack() -{ - cursor = -1; -} - -void MTGSpellStack::addSpell(Ability * ability) -{ - cursor++; - spellStack[cursor] ability; -} - -int MTGSpellStack::resolve() -{ - if (cursor < 0) - return 0; - int result = cursor; - cursor--; - (spellStack[cursor + 1])->resolve(); - return (result + 1); -} diff --git a/projects/mtg/src/ReplacementEffects.cpp b/projects/mtg/src/ReplacementEffects.cpp index e330eee5f..b155043d0 100644 --- a/projects/mtg/src/ReplacementEffects.cpp +++ b/projects/mtg/src/ReplacementEffects.cpp @@ -6,7 +6,7 @@ #include "AllAbilities.h" REDamagePrevention::REDamagePrevention(MTGAbility * source, TargetChooser *tcSource, TargetChooser *tcTarget, int damage, - bool oneShot, int typeOfDamage) : + bool oneShot, Damage::DamageType typeOfDamage) : source(source), tcSource(tcSource), tcTarget(tcTarget), damage(damage), oneShot(oneShot), typeOfDamage(typeOfDamage) { } @@ -18,7 +18,7 @@ WEvent * REDamagePrevention::replace(WEvent *event) WEventDamage * e = dynamic_cast (event); if (!e) return event; Damage *d = e->damage; - if (d->typeOfDamage != typeOfDamage && typeOfDamage != DAMAGE_ALL_TYPES) return event; + if (d->typeOfDamage != typeOfDamage && typeOfDamage != Damage::DAMAGE_ALL_TYPES) return event; if ((!tcSource || tcSource->canTarget(d->source)) && (!tcTarget || tcTarget->canTarget(d->target))) { if (damage == -1) diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 4db161dc0..2e73f23e4 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -294,13 +294,13 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta string attribute; if (found2 != string::npos) { - cd->mode = CD_OR; + cd->mode = CardDescriptor::CD_OR; attribute = attributes.substr(0, found2); attributes = attributes.substr(found2 + 1); } else if (foundAnd != string::npos) { - cd->mode = CD_AND; + cd->mode = CardDescriptor::CD_AND; attribute = attributes.substr(0, foundAnd); attributes = attributes.substr(foundAnd + 1); } @@ -550,7 +550,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta else cd->colors = card->colors; - cd->mode = CD_OR; + cd->mode = CardDescriptor::CD_OR; } else if( CDtype.find("types") != string::npos ) { @@ -572,7 +572,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta cd->removeType("creature"); cd->removeType("planeswalker"); cd->removeType("tribal"); - cd->mode = CD_OR; + cd->mode = CardDescriptor::CD_OR; } } else if (attribute.find("counter") != string::npos) @@ -629,7 +629,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta { cd->SetExclusionColor(cid); } - cd->mode = CD_OR; + cd->mode = CardDescriptor::CD_OR; } if (attribute.find("chosencolor") != string::npos) @@ -685,7 +685,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta } } if (nbminuses) - cd->mode = CD_AND; + cd->mode = CardDescriptor::CD_AND; typeName = typeName.substr(0, found); } if (cd) diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index 80c930ef8..eeb279fd2 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -433,6 +433,15 @@ void TestSuiteGame::assertGame() Log("==Test Succesful !=="); else Log("==Test Failed !=="); +#ifdef CAPTURE_STDERR + if (error) + { + OutputCapturer::debugAndClear(); + } else + { + OutputCapturer::clear(); + } +#endif mMutex.unlock(); } @@ -585,6 +594,9 @@ void TestSuite::ThreadProc(void* inParam) { LOG("Entering TestSuite::ThreadProc"); TestSuite* instance = reinterpret_cast(inParam); +#ifdef CAPTURE_STDERR + OutputCapturer::debugAndClear(); +#endif if (instance) { string filename; diff --git a/projects/mtg/template.vcxproj b/projects/mtg/template.vcxproj index 7109ebd09..96f355a51 100644 --- a/projects/mtg/template.vcxproj +++ b/projects/mtg/template.vcxproj @@ -455,7 +455,6 @@ - @@ -517,7 +516,6 @@ - diff --git a/projects/mtg/template.vcxproj.filters b/projects/mtg/template.vcxproj.filters index 32cd0ca8b..0d874bf5b 100644 --- a/projects/mtg/template.vcxproj.filters +++ b/projects/mtg/template.vcxproj.filters @@ -363,9 +363,6 @@ inc - - inc - inc @@ -528,9 +525,6 @@ inc - - inc - inc diff --git a/projects/mtg/wagic-qt.pro b/projects/mtg/wagic-qt.pro index f5dc46a98..3b8542b48 100644 --- a/projects/mtg/wagic-qt.pro +++ b/projects/mtg/wagic-qt.pro @@ -89,7 +89,6 @@ SOURCES += \ src/AllAbilities.cpp\ src/CardDescriptor.cpp\ src/CardDisplay.cpp\ - src/CardEffect.cpp\ src/CardGui.cpp\ src/CardPrimitive.cpp\ src/CardSelector.cpp\ @@ -243,7 +242,6 @@ HEADERS += \ include/GameStateShop.h\ include/MTGPack.h\ include/TextScroller.h\ - include/CardEffect.h\ include/GameStateStory.h\ include/MTGRules.h\ include/ThisDescriptor.h\ @@ -254,7 +252,6 @@ HEADERS += \ include/Token.h\ include/CardPrimitive.h\ include/GuiAvatars.h\ - include/OSD.h\ include/Translate.h\ include/CardSelector.h\ include/GuiBackground.h\ @@ -327,6 +324,7 @@ SOURCES += \ ../../JGE/src/pc/JSocket.cpp\ ../../JGE/src/JNetwork.cpp\ ../../JGE/src/JSprite.cpp\ + ../../JGE/src/OutputCapturer.cpp\ ../../JGE/src/Vector2D.cpp\ ../../JGE/src/tinyxml/tinystr.cpp\ ../../JGE/src/tinyxml/tinyxml.cpp\ @@ -395,6 +393,7 @@ HEADERS += \ ../../JGE/include/JSpline.h\ ../../JGE/include/JSprite.h\ ../../JGE/include/JTypes.h\ + ../../JGE/include/OutputCapturer.h\ ../../JGE/include/Vector2D.h\ ../../JGE/include/Vector3D.h\ ../../JGE/include/vram.h\ diff --git a/travis-script.sh b/travis-script.sh index f01edd15b..b9461e8a9 100755 --- a/travis-script.sh +++ b/travis-script.sh @@ -10,7 +10,7 @@ make -j 8 # let's try an Intel linux binary cd ../.. -qmake projects/mtg/wagic-qt.pro CONFIG+=console CONFIG+=debug +qmake projects/mtg/wagic-qt.pro CONFIG+=console CONFIG+=debug DEFINES+=CAPTURE_STDERR make -j 8 # and finish by running the testsuite