- moved all "loseLife/gainLife" duplicated code into 1 Player method
This commit is contained in:
wagic.the.homebrew@gmail.com
2011-01-23 06:59:00 +00:00
parent 14f2e9b0f2
commit f63aa379e7
9 changed files with 88 additions and 92 deletions
+3 -11
View File
@@ -719,11 +719,8 @@ public:
return 0; return 0;
if (!tc->canTarget(e->player)) return 0; if (!tc->canTarget(e->player)) return 0;
if (fromTc && !fromTc->canTarget(e->player)) return 0; if (fromTc && !fromTc->canTarget(e->player)) return 0;
if (type == 1 && (e->amount > 0 || e->Ltype == 0)) return 0; if (type == 1 && (e->amount > 0)) return 0;
if (type == 0 && (e->amount < 0 || e->Ltype == 1)) return 0; if (type == 0 && (e->amount < 0)) return 0;
if(type != 1)
e->player->thatmuch = e->amount;
else
e->player->thatmuch = abs(e->amount); e->player->thatmuch = abs(e->amount);
return 1; return 1;
} }
@@ -5742,12 +5739,7 @@ public:
MTGCardInstance * card = d->source; MTGCardInstance * card = d->source;
if (d->damage > 0 && card && (card == source || card == source->target)) if (d->damage > 0 && card && (card == source || card == source->target))
{ {
source->owner->life += d->damage; source->owner->gainLife(d->damage);
source->owner->thatmuch = d->damage;
WEvent * lifed = NULL;
lifed = NEW WEventLife(source->owner,d->damage);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
return 1; return 1;
} }
} }
+5
View File
@@ -62,6 +62,11 @@ public:
} }
int afterDamage(); int afterDamage();
int gainLife(int value);
int loseLife(int value);
int gainOrLoseLife(int value);
int poisoned(); int poisoned();
int damaged(); int damaged();
int prevented(); int prevented();
+1 -2
View File
@@ -54,8 +54,7 @@ struct WEventDamage : public WEvent {
struct WEventLife : public WEvent { struct WEventLife : public WEvent {
Player * player; Player * player;
int amount; int amount;
int Ltype; WEventLife(Player * player,int amount);
WEventLife(Player * player,int amount,int Ltype = 0);
virtual Targetable * getTarget(int target); virtual Targetable * getTarget(int target);
}; };
+24 -37
View File
@@ -1255,24 +1255,18 @@ ActivatedAbilityTP(_id, card, _target, _cost, _tap, who),life_s(life_s), life(li
int AALifer::resolve() int AALifer::resolve()
{ {
RefreshedLife = NEW WParsedInt(life_s, NULL, source);
Damageable * _target = (Damageable *) getTarget(); Damageable * _target = (Damageable *) getTarget();
if (_target) if (!_target)
return 0;
RefreshedLife = NEW WParsedInt(life_s, NULL, source);
if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE)
{ {
if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) _target = ((MTGCardInstance *) _target)->controller();
{
_target = ((MTGCardInstance *) _target)->controller();
}
Player *player = (Player*)_target;
player->thatmuch = abs(RefreshedLife->getValue());
WEvent * lifed = NULL;
lifed = NEW WEventLife(player,RefreshedLife->getValue());
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
_target->life += RefreshedLife->getValue();
if(life->getValue() < 0)
_target->lifeLostThisTurn += abs(RefreshedLife->getValue());
} }
Player *player = (Player*)_target;
player->gainOrLoseLife(RefreshedLife->getValue());
delete RefreshedLife; delete RefreshedLife;
return 1; return 1;
} }
@@ -1307,30 +1301,23 @@ AALifeSet::AALifeSet(int _id, MTGCardInstance * _source, Targetable * _target, W
int AALifeSet::resolve() int AALifeSet::resolve()
{ {
Damageable * _target = (Damageable *) getTarget(); Damageable * _target = (Damageable *) getTarget();
if (_target) if (!_target)
{ return 0;
if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE)
{
_target = ((MTGCardInstance *) _target)->controller();
}
int lifeDiff = life->getValue() - _target->life ; Player * p = NULL;
WEvent * lifed = NULL; if (_target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE)
if(lifeDiff < 0) {
{ p = ((MTGCardInstance *) _target)->controller();
_target->lifeLostThisTurn += abs(lifeDiff);
lifed = NEW WEventLife((Player*)_target,lifeDiff,1);
}
else
{
lifed = NEW WEventLife((Player*)_target,lifeDiff,0);
}
_target->thatmuch = abs(lifeDiff);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
_target->life = life->getValue();
} }
return 0; else
{
p = (Player*)_target;
}
int lifeDiff = life->getValue() - p->life ;
p->gainOrLoseLife(lifeDiff);
return 1;
} }
const char * AALifeSet::getMenuText() const char * AALifeSet::getMenuText()
+9 -15
View File
@@ -76,22 +76,16 @@ LifeCost::LifeCost(TargetChooser *_tc) :
int LifeCost::doPay() int LifeCost::doPay()
{ {
if (!target)
return 0;
MTGCardInstance * _target = (MTGCardInstance *) target; MTGCardInstance * _target = (MTGCardInstance *) target;
if (target)
{ _target->controller()->loseLife(1);
_target->controller()->thatmuch = 1; target = NULL;
WEvent * lifed = NULL; if (tc)
lifed = NEW WEventLife(_target->controller(),-1,1); tc->initTargets();
GameObserver * game = GameObserver::GetInstance(); return 1;
game->receiveEvent(lifed);
_target->controller()->life -= 1;
_target->controller()->lifeLostThisTurn += 1;
target = NULL;
if (tc)
tc->initTargets();
return 1;
}
return 0;
} }
//discard a card at random as a cost //discard a card at random as a cost
+3 -18
View File
@@ -3269,12 +3269,7 @@ void AbilityFactory::addAbilities(int _id, Spell * spell)
game->mLayers->stackLayer()->addDamage(card, target, x); game->mLayers->stackLayer()->addDamage(card, target, x);
if (target->life < x) if (target->life < x)
x = target->life; x = target->life;
game->currentlyActing()->life += x; game->currentlyActing()->gainLife(x);
game->currentlyActing()->thatmuch = x;
WEvent * lifed = NULL;
lifed = NEW WEventLife(game->currentlyActing(),x);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
break; break;
} }
case 1159: //Erg Raiders case 1159: //Erg Raiders
@@ -3485,12 +3480,7 @@ void AbilityFactory::addAbilities(int _id, Spell * spell)
if (current->hasType("Artifact")) if (current->hasType("Artifact"))
{ {
game->players[i]->game->putInGraveyard(current); game->players[i]->game->putInGraveyard(current);
current->controller()->life += current->getManaCost()->getConvertedCost(); current->controller()->gainLife(current->getManaCost()->getConvertedCost());
current->controller()->thatmuch = current->getManaCost()->getConvertedCost();
WEvent * lifed = NULL;
lifed = NEW WEventLife(current->controller(),current->getManaCost()->getConvertedCost());
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
} }
} }
} }
@@ -3603,12 +3593,7 @@ void AbilityFactory::addAbilities(int _id, Spell * spell)
if (library->nb_cards) if (library->nb_cards)
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard); player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard);
} }
game->currentlyActing()->life += x; game->currentlyActing()->gainLife(x);
game->currentlyActing()->thatmuch = x;
WEvent * lifed = NULL;
lifed = NEW WEventLife(game->currentlyActing(),x);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
break; break;
} }
+1 -6
View File
@@ -1868,12 +1868,7 @@ int MTGLifelinkRule::receiveEvent(WEvent * event)
MTGCardInstance * card = d->source; MTGCardInstance * card = d->source;
if (d->damage > 0 && card && card->basicAbilities[Constants::LIFELINK]) if (d->damage > 0 && card && card->basicAbilities[Constants::LIFELINK])
{ {
card->controller()->thatmuch = d->damage; card->controller()->gainLife(d->damage);
WEvent * lifed = NULL;
lifed = NEW WEventLife(card->controller(),d->damage);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
card->controller()->life += d->damage;
return 1; return 1;
} }
} }
+39
View File
@@ -116,6 +116,45 @@ ManaPool * Player::getManaPool()
return manaPool; return manaPool;
} }
int Player::gainOrLoseLife(int value)
{
if (!value)
return 0; //Don't do anything if there's no actual life change
thatmuch = abs(value); //What is thatmuch used for?
life+=value;
if (value<0)
lifeLostThisTurn -= value;
//Send life event to listeners
WEvent * lifed = NEW WEventLife(this,value);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(lifed);
return value;
};
int Player::gainLife(int value)
{
if (value <0)
{
DebugTrace("PLAYER.CPP: don't call gainLife on a negative value, use loseLife instead");
return 0;
}
return gainOrLoseLife(value);
};
int Player::loseLife(int value)
{
if (value <0)
{
DebugTrace("PLAYER.CPP: don't call loseLife on a negative value, use gainLife instead");
return 0;
}
return gainOrLoseLife(-value);
};
int Player::afterDamage() int Player::afterDamage()
{ {
return life; return life;
+2 -2
View File
@@ -21,8 +21,8 @@ WEventDamage::WEventDamage(Damage *damage) :
{ {
} }
WEventLife::WEventLife(Player * player,int amount,int Ltype) : WEventLife::WEventLife(Player * player,int amount) :
WEvent(), player(player),amount(amount), Ltype(Ltype) WEvent(), player(player),amount(amount)
{ {
} }