package mw.server.card.black;
import java.util.Observable;
import java.util.Observer;
import mw.mtgforge.Command;
import mw.mtgforge.Constant;
import mw.server.GameManager;
import mw.server.list.CardList;
import mw.server.model.AbilityTriggered;
import mw.server.model.Card;
import mw.server.model.MagicWarsModel;
import mw.server.model.effect.GlobalEffect;
@SuppressWarnings("serial")
public class VampireNocturnus {
public Card getCard(final GameManager game, final Card card) {
final GlobalEffect vampireAnthemEffect = new GlobalEffect() {
public void applyEffect() {
CardList creatures = game.getBattlefield()
.getPermanentList(card.getControllerID());
creatures = creatures.getType("Creature");
/**
* Apply for each vampire creature
*/
for (int j = 0; j < creatures.size(); j++) {
applyForNewPermanent(creatures.get(j));
}
}
public void applyForNewPermanent(Card c) {
if (c.isCreature() && c.getControllerID() == card.getControllerID() && c.getType().contains("Vampire")) {
c.addAttack(2);
c.addDefense(1);
c.addKeyword(MagicWarsModel.KEYWORD_FLYING_SA);
c.addAspect(MagicWarsModel.ASPECT_AFFECTED_BY_VAMPIRE_NOCTURNUS+card.getTableID());
}
}
public void discardFromPermanent(Card c) {
if (c.hasAspect(MagicWarsModel.ASPECT_AFFECTED_BY_VAMPIRE_NOCTURNUS+card.getTableID())) {
c.subAttack(2);
c.subDefense(1);
c.removeKeyword(MagicWarsModel.KEYWORD_FLYING_SA);
}
}
public void discardEffect() {
CardList creatures = game.getBattlefield().getPermanentList(card.getControllerID());
creatures = creatures.getType("Creature");
/**
* Discard from each creature
*/
for (int j = 0; j < creatures.size(); j++) {
discardFromPermanent(creatures.get(j));
}
}
public Card getEffectOwnerCard() {
return card;
}
/**
* Default UID
*/
private static final long serialVersionUID = 1L;
};
final AbilityTriggered pumpAbility = new AbilityTriggered(card) {
public void resolve() {
Card topCard = getTargetCard();
if (topCard != null) {
if (topCard.getColor().contains(Constant.Color.Black)) {
if (!game.getManager().getGlobalEffects().contains(vampireAnthemEffect)) {
game.getManager().addGlobalEffect(vampireAnthemEffect);
game.getManager().requestTableUpdate();
}
} else {
if (game.getManager().getGlobalEffects().contains(vampireAnthemEffect)) {
game.getManager().removeGlobalEffect(vampireAnthemEffect);
game.getManager().requestTableUpdate();
}
}
}
}
};
final Command playWithTopRevealedCommand = new Command() {
public void execute() {
if (game.getBattlefield().isCardInPlay(card)) {
int cid = card.getControllerID();
CardList library = game.getPlayerById(cid).getLibrary().getCardList();
if (library.size() > 0) {
Card topCard = library.get(0);
game.getManager().revealCard(topCard);
if (topCard != null) {
String colormsg = "";
if (topCard.getColor().contains(Constant.Color.Black)) {
colormsg = " - is black! Vampire Nocturnus and other Vampire creatures you control get +2/+1 and have flying.";
} else {
colormsg = " - isn't black.";
}
game.getManager().addSystemMessage(card + ", card on top: {" + topCard + "} " + colormsg);
pumpAbility.setTargetCard(topCard);
pumpAbility.resolve();
} else {
game.getManager().addSystemMessage(card + ", card on top: no cards in library.");
if (game.getManager().getGlobalEffects().contains(vampireAnthemEffect)) {
game.getManager().removeGlobalEffect(vampireAnthemEffect);
game.getManager().requestTableUpdate();
}
}
}
}
};
};
final Observer drawObserver = new Observer() {
@Override
public void update(Observable o, Object arg) {
playWithTopRevealedCommand.execute();
}
};
final Command entersTheBattlefieldCommand = new Command() {
public void execute() {
int cid = card.getControllerID();
game.getPlayerById(cid).addDrawCardObserver(drawObserver);
playWithTopRevealedCommand.execute();
};
};
card.setEntersTheBattlefieldCommand(entersTheBattlefieldCommand);
final Command leavesTheBattlefieldCommand = new Command() {
public void execute() {
if (game.getManager().getGlobalEffects().contains(vampireAnthemEffect)) {
game.getManager().removeGlobalEffect(vampireAnthemEffect);
}
};
};
card.setLeavesTheBattlefieldCommand(leavesTheBattlefieldCommand);
return card;
}
}
|