VampireNocturnus.java :  » Game » magicwars » mw » server » card » black » Java Open Source

Java Open Source » Game » magicwars 
magicwars » mw » server » card » black » VampireNocturnus.java
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;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.