package magic.model.phase; import magic.model.MagicGame; public class MagicDefaultGameplay implements MagicGameplay { private static final MagicGameplay INSTANCE=new MagicDefaultGameplay(); private MagicDefaultGameplay() {} @Override public MagicPhase getStartPhase(final MagicGame game) { return MagicMulliganPhase.getInstance(); } @Override public MagicPhase getNextPhase(final MagicGame game) { switch (game.getPhase().getType()) { case Mulligan: return MagicUntapPhase.getInstance(); case Untap: return MagicUpkeepPhase.getInstance(); case Upkeep: return MagicDrawPhase.getInstance(); case Draw: return MagicMainPhase.getFirstInstance(); case FirstMain: return game.canSkip() ? MagicDeclareAttackersPhase.getInstance() : MagicBeginOfCombatPhase.getInstance(); case BeginOfCombat: return MagicDeclareAttackersPhase.getInstance(); case DeclareAttackers: return game.getTurnPlayer().getNrOfAttackers() > 0 ? MagicDeclareBlockersPhase.getInstance() : MagicEndOfCombatPhase.getInstance(); case DeclareBlockers: return MagicCombatDamagePhase.getInstance(); case CombatDamage: return MagicEndOfCombatPhase.getInstance(); case EndOfCombat: return MagicMainPhase.getSecondInstance(); case SecondMain: return MagicEndOfTurnPhase.getInstance(); case EndOfTurn: return MagicCleanupPhase.getInstance(); case Cleanup: return MagicUntapPhase.getInstance(); default: throw new IllegalStateException("Illegal gameflow."); } } public static MagicGameplay getInstance() { return INSTANCE; } }