Add mulligan options to NewTableDialog, passing mulligan information to games.

This commit is contained in:
John Hitchings 2019-03-19 06:00:22 -07:00
parent 7885a42168
commit 4a232b148c
51 changed files with 532 additions and 364 deletions

View file

@ -1,19 +1,18 @@
package mage.game;
import java.util.*;
import mage.constants.MultiplayerAttackOption;
import mage.constants.PhaseStep;
import mage.constants.RangeOfInfluence;
import mage.game.mulligan.CanadianHighlanderMulligan;
import mage.game.mulligan.Mulligan;
import mage.game.turn.TurnMod;
import mage.players.Player;
import java.util.UUID;
public abstract class GameCanadianHighlanderImpl extends GameImpl {
public GameCanadianHighlanderImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) {
super(attackOption, range, new CanadianHighlanderMulligan(freeMulligans), startLife);
public GameCanadianHighlanderImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, Mulligan mulligan, int startLife) {
super(attackOption, range, mulligan, startLife);
}
public GameCanadianHighlanderImpl(final GameCanadianHighlanderImpl game) {

View file

@ -1,7 +1,5 @@
package mage.game;
import java.util.Map;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.InfoEffect;
@ -12,11 +10,14 @@ import mage.constants.MultiplayerAttackOption;
import mage.constants.PhaseStep;
import mage.constants.RangeOfInfluence;
import mage.constants.Zone;
import mage.game.mulligan.VancouverMulligan;
import mage.game.mulligan.Mulligan;
import mage.game.turn.TurnMod;
import mage.players.Player;
import mage.watchers.common.CommanderInfoWatcher;
import java.util.Map;
import java.util.UUID;
public abstract class GameCommanderImpl extends GameImpl {
// private final Map<UUID, Cards> mulliganedCards = new HashMap<>();
@ -25,8 +26,8 @@ public abstract class GameCommanderImpl extends GameImpl {
protected boolean alsoLibrary; // replace commander going to library
protected boolean startingPlayerSkipsDraw = true;
public GameCommanderImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) {
super(attackOption, range, new VancouverMulligan(freeMulligans), startLife);
public GameCommanderImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, Mulligan mulligan, int startLife) {
super(attackOption, range, mulligan, startLife);
}
public GameCommanderImpl(final GameCommanderImpl game) {

View file

@ -16,7 +16,7 @@ import mage.cards.CardSetInfo;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.constants.*;
import mage.game.mulligan.VancouverMulligan;
import mage.game.mulligan.Mulligan;
import mage.game.turn.TurnMod;
import mage.players.Player;
import mage.watchers.common.CommanderInfoWatcher;
@ -31,8 +31,8 @@ public abstract class GameTinyLeadersImpl extends GameImpl {
protected boolean alsoLibrary; // replace also commander going to library
protected boolean startingPlayerSkipsDraw = true;
public GameTinyLeadersImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) {
super(attackOption, range, new VancouverMulligan(freeMulligans), startLife);
public GameTinyLeadersImpl(MultiplayerAttackOption attackOption, RangeOfInfluence range, Mulligan mulligan, int startLife) {
super(attackOption, range, mulligan, startLife);
}
public GameTinyLeadersImpl(final GameTinyLeadersImpl game) {

View file

@ -5,6 +5,7 @@ import mage.constants.MatchTimeLimit;
import mage.constants.MultiplayerAttackOption;
import mage.constants.RangeOfInfluence;
import mage.constants.SkillLevel;
import mage.game.mulligan.MulliganType;
import mage.game.result.ResultProtos;
import mage.players.PlayerType;
@ -47,6 +48,7 @@ public class MatchOptions implements Serializable {
* Time each player has during the game to play using his\her priority.
*/
protected MatchTimeLimit matchTimeLimit; // 0 = no priorityTime handling
protected MulliganType mulliganType;
/*public MatchOptions(String name, String gameType) {
this.name = name;
@ -257,4 +259,16 @@ public class MatchOptions implements Serializable {
return builder.build();
}
public void setMullgianType(MulliganType mulliganType) {
this.mulliganType = mulliganType;
}
public MulliganType getMulliganType() {
if (mulliganType == null) {
return MulliganType.GAME_DEFAULT;
}
return mulliganType;
}
}

View file

@ -0,0 +1,43 @@
package mage.game.mulligan;
public enum MulliganType {
GAME_DEFAULT("Game Default"),
VANCOUVER("Vancouver"),
PARIS("Paris"),
LONDON("London"),
CANADIAN_HIGHLANDER("Canadian Highlander");
private final String displayName;
MulliganType(String displayName) {
this.displayName = displayName;
}
public Mulligan getMulligan(int freeMulligans) {
switch(this) {
case PARIS:
return new ParisMulligan(freeMulligans);
case CANADIAN_HIGHLANDER:
return new CanadianHighlanderMulligan(freeMulligans);
case LONDON:
return new LondonMulligan(freeMulligans);
default:
case VANCOUVER:
return new VancouverMulligan(freeMulligans);
}
}
@Override
public String toString() {
return displayName;
}
public MulliganType orDefault(MulliganType defaultMulligan) {
if (this == GAME_DEFAULT) {
return defaultMulligan;
}
return this;
}
}