From c6dc51c7d3bf84ca9fe48f0fff5dbba069af610e Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 15:34:23 +0100 Subject: [PATCH 01/10] Simplify Damage::resolve a bit --- projects/mtg/src/Damage.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index aff70bd6b..d571aed0f 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -59,24 +59,12 @@ int Damage::resolve() //reserved for culmulitive absorb ability coding //prevent next damage----------------------------- - if ((target)->preventable >= 1) - { - 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. - } - } - } - - //set prevent next damage back to 0 if it is equal to less then 0 - if ((target)->preventable < 0) + if ((target)->preventable > 0) { + int preventing = MIN(target->preventable, damage); + damage -= preventing; + target->preventable -= preventing; + }else{ (target)->preventable = 0; } From 146872797bf83a118d6f70b02e5f33d1bb946507 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 16:08:29 +0100 Subject: [PATCH 02/10] ActionElement.h: Replace defines, remove superfluous ";" Defines do not follow scope rules, but enums do. Enum classes even utilize strong type checking (but i am not sure about compiler support for c++11 on all target platforms). --- projects/mtg/include/ActionElement.h | 25 +++++++++---------------- projects/mtg/src/ActionElement.cpp | 10 ++-------- projects/mtg/src/MTGGamePhase.cpp | 8 ++++---- 3 files changed, 15 insertions(+), 28 deletions(-) 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/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/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; } From 3ca2f1c1edefe1db78d4e16a31c812fadba3d943 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 17:12:58 +0100 Subject: [PATCH 03/10] Replace defines in Damage.h with enums. --- projects/mtg/include/AllAbilities.h | 10 +++--- projects/mtg/include/Damage.h | 38 +++++++++++++---------- projects/mtg/include/ReplacementEffects.h | 5 +-- projects/mtg/src/AIStats.cpp | 2 +- projects/mtg/src/ActionStack.cpp | 4 +-- projects/mtg/src/AllAbilities.cpp | 10 +++--- projects/mtg/src/Damage.cpp | 18 +++++------ projects/mtg/src/DamagerDamaged.cpp | 2 +- projects/mtg/src/GuiCombat.cpp | 2 +- projects/mtg/src/MTGAbility.cpp | 2 +- projects/mtg/src/MTGRules.cpp | 2 +- projects/mtg/src/ReplacementEffects.cpp | 4 +-- 12 files changed, 53 insertions(+), 46 deletions(-) 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/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/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/AIStats.cpp b/projects/mtg/src/AIStats.cpp index 3e9a59664..e0d281e69 100644 --- a/projects/mtg/src/AIStats.cpp +++ b/projects/mtg/src/AIStats.cpp @@ -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())) 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/Damage.cpp b/projects/mtg/src/Damage.cpp index d571aed0f..f868be9c2 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; @@ -69,7 +69,7 @@ int Damage::resolve() } //------------------------------------------------- - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) + if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE) { MTGCardInstance * _target = (MTGCardInstance *) target; if ((_target)->protectedAgainst(source)) @@ -122,7 +122,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 @@ -134,7 +134,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; @@ -151,7 +151,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 @@ -190,9 +190,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()) { @@ -248,7 +248,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/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/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/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/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) From 7a48c5e087488278a487df4a24029ecd649f50a8 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 19:36:24 +0100 Subject: [PATCH 04/10] Fix some cppcheck warnings (mostly style and postfix vs prefix iteration) --- projects/mtg/src/AIHints.cpp | 11 +++++----- projects/mtg/src/AIMomirPlayer.cpp | 7 ++----- projects/mtg/src/AIPlayer.cpp | 4 ++-- projects/mtg/src/AIPlayerBaka.cpp | 32 ++++++++++-------------------- projects/mtg/src/AIStats.cpp | 8 ++++---- projects/mtg/src/ActionLayer.cpp | 9 +++------ 6 files changed, 26 insertions(+), 45 deletions(-) diff --git a/projects/mtg/src/AIHints.cpp b/projects/mtg/src/AIHints.cpp index f61686598..c090c86be 100644 --- a/projects/mtg/src/AIHints.cpp +++ b/projects/mtg/src/AIHints.cpp @@ -307,14 +307,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..c67a11b55 100644 --- a/projects/mtg/src/AIMomirPlayer.cpp +++ b/projects/mtg/src/AIMomirPlayer.cpp @@ -90,13 +90,13 @@ 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; + MTGCardInstance * card = NULL; ManaCost * potentialMana = getPotentialMana(); int converted = potentialMana->getConvertedCost(); SAFE_DELETE(potentialMana); @@ -118,15 +118,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 e0d281e69..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; @@ -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/ActionLayer.cpp b/projects/mtg/src/ActionLayer.cpp index 4ea73402e..ccdc9b2a4 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) { /* @@ -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); } From 446ed2075808eb3f7f6332d360f581300a0ef7e3 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 19:38:14 +0100 Subject: [PATCH 05/10] Fix typo ActionLayer::receiveEventPlus(...) This method is rarely used, however it returned 0 after adding stuff. It now returns the sum. --- projects/mtg/src/ActionLayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/mtg/src/ActionLayer.cpp b/projects/mtg/src/ActionLayer.cpp index ccdc9b2a4..5d21cf6c2 100644 --- a/projects/mtg/src/ActionLayer.cpp +++ b/projects/mtg/src/ActionLayer.cpp @@ -264,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) From e1213d1c1fdc2cba292a9738eb4a21a157b9606b Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 19:50:17 +0100 Subject: [PATCH 06/10] Remove variables flagged for removal (via conditional TODO comment) x and y is provided by PlayGuiObject::Pos. --- projects/mtg/include/ActionStack.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/projects/mtg/include/ActionStack.h b/projects/mtg/include/ActionStack.h index 2f831245e..48715c3d3 100644 --- a/projects/mtg/include/ActionStack.h +++ b/projects/mtg/include/ActionStack.h @@ -48,9 +48,6 @@ class TargetChooser; 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() From 5419d87e4ed7ddfff1db32680a664fbd9dffe2d7 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 20:22:03 +0100 Subject: [PATCH 07/10] Get rid of two more define groups. --- projects/mtg/include/ActionStack.h | 11 ++++++----- projects/mtg/include/CardDescriptor.h | 10 ++++++---- projects/mtg/src/AIHints.cpp | 3 +-- projects/mtg/src/AIMomirPlayer.cpp | 3 +-- projects/mtg/src/TargetChooser.cpp | 12 ++++++------ 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/projects/mtg/include/ActionStack.h b/projects/mtg/include/ActionStack.h index 48715c3d3..06e7f2afe 100644 --- a/projects/mtg/include/ActionStack.h +++ b/projects/mtg/include/ActionStack.h @@ -41,10 +41,6 @@ class DamageStack; class ManaCost; class TargetChooser; - -#define ACTIONSTACK_STANDARD 0 -#define ACTIONSTACK_TARGET 1 - class Interruptible: public PlayGuiObject, public Targetable { public: @@ -183,6 +179,11 @@ public: class ActionStack :public GuiLayer { public: + enum ActionStackMode{ + ACTIONSTACK_STANDARD = 0, + ACTIONSTACK_TARGET = 1 + }; + typedef enum { NOT_DECIDED = 0, @@ -204,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/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/src/AIHints.cpp b/projects/mtg/src/AIHints.cpp index c090c86be..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); } diff --git a/projects/mtg/src/AIMomirPlayer.cpp b/projects/mtg/src/AIMomirPlayer.cpp index c67a11b55..5daaa55b3 100644 --- a/projects/mtg/src/AIMomirPlayer.cpp +++ b/projects/mtg/src/AIMomirPlayer.cpp @@ -96,7 +96,6 @@ int AIMomirPlayer::computeActions() case MTG_PHASE_FIRSTMAIN: { CardDescriptor cd; - MTGCardInstance * card = NULL; 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)) { 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) From 94c3ac9ad9c5d77fa612f2f51404d230d8122014 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 21:02:08 +0100 Subject: [PATCH 08/10] Fix FTBFS --- projects/mtg/src/CardGui.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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); } From f2314ca673c7781601e299567011363a08f0b041 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Sun, 17 Nov 2013 21:05:07 +0100 Subject: [PATCH 09/10] Use proposed coding style --- projects/mtg/src/Damage.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index d571aed0f..20f4b67fb 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -59,13 +59,15 @@ int Damage::resolve() //reserved for culmulitive absorb ability coding //prevent next damage----------------------------- - if ((target)->preventable > 0) + if (target->preventable > 0) { int preventing = MIN(target->preventable, damage); damage -= preventing; target->preventable -= preventing; - }else{ - (target)->preventable = 0; + } + else + { + target->preventable = 0; } //------------------------------------------------- From 35697a65b4d6f0052375e7c9c8e59b366d7875e0 Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Wed, 20 Nov 2013 11:13:35 +0100 Subject: [PATCH 10/10] Use style guide --- projects/mtg/src/ActionLayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/mtg/src/ActionLayer.cpp b/projects/mtg/src/ActionLayer.cpp index 5d21cf6c2..5efec2e67 100644 --- a/projects/mtg/src/ActionLayer.cpp +++ b/projects/mtg/src/ActionLayer.cpp @@ -440,7 +440,7 @@ void ActionLayer::setCustomMenuObject(Targetable * object, bool must,vectorisMultipleChoice = true; for(int w = 0; w < int(abilities.size());w++) { - ActionElement *currentAction = (ActionElement*)abilities[w]; + ActionElement* currentAction = (ActionElement*)abilities[w]; currentActionCard = (MTGCardInstance*)abilities[0]->target; abilitiesMenu->Add(mObjects.size()-1, currentAction->getMenuText(),"",false); }