forked from External/mage
78 lines
2.8 KiB
Java
78 lines
2.8 KiB
Java
|
||
|
||
package mage.game.turn;
|
||
|
||
import mage.constants.PhaseStep;
|
||
import mage.game.Game;
|
||
import mage.game.events.GameEvent.EventType;
|
||
import mage.players.Player;
|
||
import mage.watchers.common.CastSpellLastTurnWatcher;
|
||
|
||
import java.util.UUID;
|
||
|
||
/**
|
||
* @author BetaSteward_at_googlemail.com
|
||
*/
|
||
public class UntapStep extends Step {
|
||
|
||
public UntapStep() {
|
||
super(PhaseStep.UNTAP, false);
|
||
this.stepEvent = EventType.UNTAP_STEP;
|
||
this.preStepEvent = EventType.UNTAP_STEP_PRE;
|
||
this.postStepEvent = EventType.UNTAP_STEP_POST;
|
||
}
|
||
|
||
protected UntapStep(final UntapStep step) {
|
||
super(step);
|
||
}
|
||
|
||
@Override
|
||
public void beginStep(Game game, UUID activePlayerId) {
|
||
super.beginStep(game, activePlayerId);
|
||
|
||
// 726.2.
|
||
// As the second part of the untap step, the game checks the previous turn to see
|
||
// if the game’s day/night designation should change. See rule 502, “Untap Step.”
|
||
//
|
||
// Before a player untaps their permanents during the untap step, the game checks to see
|
||
// if the day/night designation should change. (2021-09-24)
|
||
handleDayNight(game);
|
||
|
||
Player activePlayer = game.getPlayer(activePlayerId);
|
||
//20091005 - 502.1/703.4a
|
||
activePlayer.phasing(game);
|
||
//20091005 - 502.2/703.4b
|
||
activePlayer.untap(game);
|
||
game.applyEffects();
|
||
}
|
||
|
||
@Override
|
||
public UntapStep copy() {
|
||
return new UntapStep(this);
|
||
}
|
||
|
||
private void handleDayNight(Game game) {
|
||
if (!game.hasDayNight() || game.getTurnNum() <= 1) {
|
||
return;
|
||
}
|
||
int previousSpells = game
|
||
.getState()
|
||
.getWatcher(CastSpellLastTurnWatcher.class)
|
||
.getActivePlayerPrevTurnCount();
|
||
if (game.checkDayNight(true) && previousSpells == 0) {
|
||
// 726.2a
|
||
// If it’s day and the previous turn’s active player didn’t cast any spells during that turn,
|
||
// it becomes night. Multiplayer games using the shared team turns option (see rule 805)
|
||
// use a modified rule: if it’s day and no player from the previous turn’s active team cast a
|
||
// spell during that turn, it becomes night.
|
||
game.setDaytime(false);
|
||
} else if (game.checkDayNight(false) && previousSpells >= 2) {
|
||
// 726.2b
|
||
// If it’s night, and previous turn’s active player cast two or more spells during the previous turn,
|
||
// it becomes day. Multiplayer games using the shared team turns option (see rule 805) use a modified
|
||
// rule: if it’s night and any player from the previous turn’s active team cast two or more spells
|
||
// during that turn, it becomes day.
|
||
game.setDaytime(true);
|
||
}
|
||
}
|
||
}
|