Cascade Class

seperate cascade and fix cant life change :)
This commit is contained in:
Anthony Calosa
2016-06-03 10:40:38 +08:00
parent 0493c4063f
commit 62fa9acc9f
5 changed files with 97 additions and 61 deletions
+78 -53
View File
@@ -261,12 +261,50 @@ AADamager * AADamager::clone() const
//AADepleter
AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile, bool cascade) :
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile),cascade(cascade)
AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile) :
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile)
{
Cascade = "Cascade";
}
int AADepleter::resolve()
{
Player * player = getPlayerFromTarget(getTarget());
if (player)
{
WParsedInt numCards(nbcardsStr, NULL, source);
MTGLibrary * library = player->game->library;
int counter = 0;
for (int i = 0; i < numCards.getValue(); i++)
{
if (library->nb_cards)
{
if(toexile)
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile);
else
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard);
}
}
}
return 1;
}
const string AADepleter::getMenuText()
{
if(toexile)
return "Ingest";
return "Deplete";
}
AADepleter * AADepleter::clone() const
{
return NEW AADepleter(*this);
}
//AACascade
AACascade::AACascade(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who) :
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr)
{
}
int AACascade::resolve()
{
Player * player = getPlayerFromTarget(getTarget());
if (player)
@@ -280,85 +318,72 @@ AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card,
{
if (library->nb_cards)
{
if(cascade)
for(int z = library->nb_cards; z >= 0; z--)
{
for(int z = library->nb_cards; z >= 0; z--)
if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
{
if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
viable = library->cards[z];
player->game->putInZone(viable, library, exile);
{
viable = library->cards[z];
player->game->putInZone(viable, library, exile);
vector<MTGCardInstance*>selectedCards;
for(int j=0; j < library->nb_cards; j++)
{
vector<MTGCardInstance*>selectedCards;
for(int j=0; j < library->nb_cards; j++)
if(library->cards[j]->isCascaded)
{
library->cards[j]->isCascaded = false;
selectedCards.push_back(library->cards[j]);
}
}
if(selectedCards.size())
{
std::random_shuffle ( selectedCards.begin(), selectedCards.end() );
for(unsigned int i = 0; i < selectedCards.size();++i)
{
if(library->cards[j]->isCascaded)
{
library->cards[j]->isCascaded = false;
selectedCards.push_back(library->cards[j]);
}
}
if(selectedCards.size())
{
std::random_shuffle ( selectedCards.begin(), selectedCards.end() );
for(unsigned int i = 0; i < selectedCards.size();++i)
vector<MTGCardInstance *>oldOrder = library->cards;
vector<MTGCardInstance *>newOrder;
newOrder.push_back(selectedCards[i]);
for(unsigned int k = 0;k < oldOrder.size();++k)
{
vector<MTGCardInstance *>oldOrder = library->cards;
vector<MTGCardInstance *>newOrder;
newOrder.push_back(selectedCards[i]);
for(unsigned int k = 0;k < oldOrder.size();++k)
{
MTGCardInstance * rearranged = oldOrder[k];
if(rearranged != selectedCards[i])
newOrder.push_back(rearranged);
}
library->cards = newOrder;
MTGCardInstance * rearranged = oldOrder[k];
if(rearranged != selectedCards[i])
newOrder.push_back(rearranged);
}
library->cards = newOrder;
}
}
toCastCard(viable->next);
return 1;
}
else
{
library->cards[library->nb_cards - 1]->isCascaded=true;
counter++;
}
toCastCard(viable->next);
return 1;
}
else
{
library->cards[library->nb_cards - 1]->isCascaded=true;
counter++;
}
}
else if(toexile)
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile);
else
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard);
}
}
}
return 1;
}
void AADepleter::toCastCard(MTGCardInstance * thisCard)
void AACascade::toCastCard(MTGCardInstance * thisCard)
{
MTGAbility *ac = NEW AACastCard(game, game->mLayers->actionLayer()->getMaxId(), thisCard, thisCard,false,false,true,"","",false,false);
//ac->oneShot=true;
//ac->addToGame();
MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard,true);
MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard->clone(),true);
MTGAbility *ga1 = NEW GenericAddToGame(game, game->mLayers->actionLayer()->getMaxId(), thisCard,NULL,ma1);
ga1->resolve();
return;
}
const string AADepleter::getMenuText()
const string AACascade::getMenuText()
{
if(cascade)
return Cascade;
else if(toexile)
return "Ingest";
return "Deplete";
return "Cascade";
}
AADepleter * AADepleter::clone() const
AACascade * AACascade::clone() const
{
return NEW AADepleter(*this);
return NEW AACascade(*this);
}
//take extra turns or skip turns, values in the negitive will make you skip.