magarena/src/magic/model/phase/MagicPhase.java

56 lines
1.7 KiB
Java

package magic.model.phase;
import magic.model.MagicGame;
import magic.model.action.StackResolveAction;
import magic.model.event.MagicPriorityEvent;
import magic.ui.MagicSound;
public abstract class MagicPhase {
private final MagicPhaseType type;
protected abstract void executeBeginStep(final MagicGame game);
MagicPhase(final MagicPhaseType type) {
this.type=type;
}
public final MagicPhaseType getType() {
return type;
}
void executeEndOfPhase(final MagicGame game) {}
public void executePhase(final MagicGame game) {
switch (game.getStep()) {
case Begin:
executeBeginStep(game);
game.update();
break;
case ActivePlayer:
game.update();
game.checkStatePutTriggers();
game.addEvent(new MagicPriorityEvent(game.getTurnPlayer()));
break;
case OtherPlayer:
game.update();
game.checkStatePutTriggers();
game.addEvent(new MagicPriorityEvent(game.getTurnPlayer().getOpponent()));
break;
case Resolve:
// Stack can be empty at this point, for instance by a counter unless event.
if (!game.getStack().isEmpty()) {
game.doAction(new StackResolveAction());
game.playSound(MagicSound.RESOLVE);
}
game.setStep(MagicStep.ActivePlayer);
break;
case NextPhase:
executeEndOfPhase(game);
game.update();
game.nextPhase();
break;
}
}
}