diff --git a/projects/mtg/include/ExtraCost.h b/projects/mtg/include/ExtraCost.h index 01c54619a..95859ab16 100644 --- a/projects/mtg/include/ExtraCost.h +++ b/projects/mtg/include/ExtraCost.h @@ -95,6 +95,7 @@ class LifeorManaCost : public ExtraCost { private: string manaType; + ManaCost manaCost; public: LifeorManaCost(TargetChooser *_tc = NULL, string manaType = ""); diff --git a/projects/mtg/src/ExtraCost.cpp b/projects/mtg/src/ExtraCost.cpp index 148067eb3..9abe359a1 100644 --- a/projects/mtg/src/ExtraCost.cpp +++ b/projects/mtg/src/ExtraCost.cpp @@ -162,22 +162,23 @@ LifeorManaCost * LifeorManaCost::clone() const ManaCost * LifeorManaCost::getManaCost() { - string buildType ="{"; - buildType.append(manaType); - buildType.append("}"); - return ManaCost::parseManaCost(buildType); + return &manaCost; } LifeorManaCost::LifeorManaCost(TargetChooser *_tc, string manaType) : ExtraCost("Phyrexian Mana", _tc), manaType(manaType) { + string buildType ="{"; + buildType.append(manaType); + buildType.append("}"); + boost::scoped_ptr cost(ManaCost::parseManaCost(buildType)); + manaCost.copy(cost.get()); } int LifeorManaCost::canPay() { MTGCardInstance * _target = (MTGCardInstance *) target; - boost::scoped_ptr manaCost(getManaCost()); - if (_target->controller()->getManaPool()->canAfford(manaCost.get()) || _target->controller()->life > 1) + if (_target->controller()->getManaPool()->canAfford(getManaCost()) || _target->controller()->life > 1) { return 1; } @@ -190,16 +191,14 @@ int LifeorManaCost::doPay() return 0; MTGCardInstance * _target = (MTGCardInstance *) target; - ManaCost * manaCost = getManaCost(); - if (_target->controller()->getManaPool()->canAfford(manaCost)) + if (_target->controller()->getManaPool()->canAfford(&manaCost)) { - _target->controller()->getManaPool()->pay(manaCost); + _target->controller()->getManaPool()->pay(&manaCost); } else { _target->controller()->loseLife(2); } - SAFE_DELETE(manaCost); target = NULL; if (tc) tc->initTargets(); diff --git a/projects/mtg/src/ManaCost.cpp b/projects/mtg/src/ManaCost.cpp index d3e2e3b69..609be332e 100644 --- a/projects/mtg/src/ManaCost.cpp +++ b/projects/mtg/src/ManaCost.cpp @@ -8,7 +8,6 @@ #include "WEvent.h" #include "MTGAbility.h" #include "iterator" -#include SUPPORT_OBJECT_ANALYTICS(ManaCost) @@ -594,8 +593,7 @@ int ManaCost::getManaSymbols(int color) LifeorManaCost * phyrexianMana = dynamic_cast(extraCosts->costs[i]); if (phyrexianMana) { - boost::scoped_ptr manaCost(phyrexianMana->getManaCost()); - result += manaCost->getManaSymbols(color); + result += phyrexianMana->getManaCost()->getManaSymbols(color); } } }