mirror of
https://github.com/correl/mage.git
synced 2024-11-25 03:00:11 +00:00
* Draft improves:
* added additional and improved timing options for pick timeouts (x1.0, x1.5, x2.0, see #8033); * added pick timing info in tables list (info column); * fixed that booster draft starts with wrong pick timeout (#8036);
This commit is contained in:
parent
214b688fdb
commit
400acae0c1
9 changed files with 71 additions and 37 deletions
|
@ -545,7 +545,7 @@
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="jLabel6" min="-2" pref="49" max="-2" attributes="0"/>
|
<Component id="jLabel6" min="-2" pref="49" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="cbDraftTiming" min="-2" pref="107" max="-2" attributes="0"/>
|
<Component id="cbDraftTiming" min="-2" pref="140" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="19" max="32767" attributes="0"/>
|
<EmptySpace pref="19" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
|
@ -344,7 +344,7 @@ public class NewTournamentDialog extends MageDialog {
|
||||||
.addGroup(pnlDraftOptionsLayout.createSequentialGroup()
|
.addGroup(pnlDraftOptionsLayout.createSequentialGroup()
|
||||||
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(cbDraftTiming, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(cbDraftTiming, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap(19, Short.MAX_VALUE))
|
.addContainerGap(19, Short.MAX_VALUE))
|
||||||
);
|
);
|
||||||
pnlDraftOptionsLayout.setVerticalGroup(
|
pnlDraftOptionsLayout.setVerticalGroup(
|
||||||
|
@ -1224,7 +1224,6 @@ public class NewTournamentDialog extends MageDialog {
|
||||||
}
|
}
|
||||||
if (tournamentType.isDraft()) {
|
if (tournamentType.isDraft()) {
|
||||||
DraftOptions options = new DraftOptions();
|
DraftOptions options = new DraftOptions();
|
||||||
options.setDraftType("");
|
|
||||||
options.setTiming((TimingOption) this.cbDraftTiming.getSelectedItem());
|
options.setTiming((TimingOption) this.cbDraftTiming.getSelectedItem());
|
||||||
tOptions.setLimitedOptions(options);
|
tOptions.setLimitedOptions(options);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import mage.game.Game;
|
||||||
import mage.game.Seat;
|
import mage.game.Seat;
|
||||||
import mage.game.Table;
|
import mage.game.Table;
|
||||||
import mage.game.draft.Draft;
|
import mage.game.draft.Draft;
|
||||||
|
import mage.game.draft.DraftOptions;
|
||||||
import mage.game.match.MatchPlayer;
|
import mage.game.match.MatchPlayer;
|
||||||
import mage.game.tournament.TournamentPlayer;
|
import mage.game.tournament.TournamentPlayer;
|
||||||
|
|
||||||
|
@ -155,6 +156,10 @@ public class TableView implements Serializable {
|
||||||
if (table.getTournament().getTournamentType().isLimited()) {
|
if (table.getTournament().getTournamentType().isLimited()) {
|
||||||
infoText.append(" Constr.: ").append(table.getTournament().getOptions().getLimitedOptions().getConstructionTime() / 60).append(" Min.");
|
infoText.append(" Constr.: ").append(table.getTournament().getOptions().getLimitedOptions().getConstructionTime() / 60).append(" Min.");
|
||||||
}
|
}
|
||||||
|
if (table.getTournament().getOptions().getLimitedOptions() instanceof DraftOptions) {
|
||||||
|
DraftOptions draftOptions = (DraftOptions) table.getTournament().getOptions().getLimitedOptions();
|
||||||
|
infoText.append(" Pick time: ").append(draftOptions.getTiming().getShortName());
|
||||||
|
}
|
||||||
if (table.getTournament().getOptions().getMatchOptions().isRollbackTurnsAllowed()) {
|
if (table.getTournament().getOptions().getMatchOptions().isRollbackTurnsAllowed()) {
|
||||||
infoText.append(" RB");
|
infoText.append(" RB");
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,10 @@ public class BoosterDraft extends DraftImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
|
cardNum = 0;
|
||||||
while (!isAbort() && boosterNum < numberBoosters) {
|
while (!isAbort() && boosterNum < numberBoosters) {
|
||||||
openBooster();
|
openBooster();
|
||||||
|
cardNum = 0;
|
||||||
while (!isAbort() && pickCards()) {
|
while (!isAbort() && pickCards()) {
|
||||||
if (boosterNum % 2 == 1) {
|
if (boosterNum % 2 == 1) {
|
||||||
passLeft();
|
passLeft();
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.game.draft;
|
package mage.game.draft;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -24,9 +23,8 @@ public abstract class DraftImpl implements Draft {
|
||||||
protected List<ExpansionSet> sets;
|
protected List<ExpansionSet> sets;
|
||||||
protected List<String> setCodes;
|
protected List<String> setCodes;
|
||||||
protected int boosterNum = 0;
|
protected int boosterNum = 0;
|
||||||
protected int cardNum = 0;
|
protected int cardNum = 0; // increases +1 on first picking (so draft get 1 as first card number)
|
||||||
protected TimingOption timing;
|
protected TimingOption timing;
|
||||||
protected int[] times = {75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5};
|
|
||||||
|
|
||||||
protected boolean abort = false;
|
protected boolean abort = false;
|
||||||
protected boolean started = false;
|
protected boolean started = false;
|
||||||
|
@ -204,7 +202,6 @@ public abstract class DraftImpl implements Draft {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boosterNum++;
|
boosterNum++;
|
||||||
cardNum = 1;
|
|
||||||
fireUpdatePlayersEvent();
|
fireUpdatePlayersEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +267,7 @@ public abstract class DraftImpl implements Draft {
|
||||||
if (cardNum > 15) {
|
if (cardNum > 15) {
|
||||||
cardNum = 15;
|
cardNum = 15;
|
||||||
}
|
}
|
||||||
int time = times[cardNum - 1] * timing.getFactor();
|
int time = timing.getPickTimeout(cardNum);
|
||||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,41 +1,69 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.game.draft;
|
package mage.game.draft;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import mage.game.tournament.LimitedOptions;
|
import mage.game.tournament.LimitedOptions;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @author BetaSteward_at_googlemail.com, JayDi85
|
||||||
* @author BetaSteward_at_googlemail.com
|
|
||||||
*/
|
*/
|
||||||
public class DraftOptions extends LimitedOptions implements Serializable {
|
public class DraftOptions extends LimitedOptions implements Serializable {
|
||||||
|
|
||||||
protected String draftType;
|
|
||||||
protected TimingOption timing;
|
protected TimingOption timing;
|
||||||
|
|
||||||
public enum TimingOption {
|
public enum TimingOption {
|
||||||
REGULAR (1),
|
|
||||||
BEGINNER (2),
|
|
||||||
NONE (0);
|
|
||||||
|
|
||||||
private int factor;
|
// seconds per card's pick
|
||||||
|
BEGINNER("x2.0", "Beginner (x2.0)", 2.0,
|
||||||
|
Arrays.asList(150, 140, 130, 120, 110, 100, 90, 80, 45, 35, 30, 25, 20, 15, 10)
|
||||||
|
),
|
||||||
|
REGULAR("x1.5", "Regular (x1.5)", 1.5,
|
||||||
|
Arrays.asList(113, 105, 98, 90, 83, 75, 68, 60, 35, 30, 25, 20, 15, 10, 8)
|
||||||
|
),
|
||||||
|
PROFI("x1.0", "Profi (x1.0)", 1.0,
|
||||||
|
Arrays.asList(75, 70, 65, 60, 55, 50, 45, 40, 30, 25, 20, 15, 12, 10, 7)
|
||||||
|
),
|
||||||
|
NONE("ERROR", "", 0,
|
||||||
|
Arrays.asList(0)
|
||||||
|
);
|
||||||
|
|
||||||
TimingOption(int factor) {
|
private final String shortName;
|
||||||
this.factor = factor;
|
private final String name;
|
||||||
|
private final double customTimeoutFactor; // profi as x1.0, other modes increases by factor from x1.5 to x2.0
|
||||||
|
private final List<Integer> times;
|
||||||
|
|
||||||
|
TimingOption(String shortName, String name, double customTimeoutFactor, List<Integer> times) {
|
||||||
|
this.shortName = shortName;
|
||||||
|
this.name = name;
|
||||||
|
this.customTimeoutFactor = customTimeoutFactor;
|
||||||
|
this.times = times;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFactor() {
|
public String getShortName() {
|
||||||
return this.factor;
|
return shortName;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public String getDraftType() {
|
public String getName() {
|
||||||
return draftType;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDraftType(String draftType) {
|
public double getCustomTimeoutFactor() {
|
||||||
this.draftType = draftType;
|
return customTimeoutFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPickTimeout(int cardNum) {
|
||||||
|
if (cardNum > 15) {
|
||||||
|
cardNum = 15;
|
||||||
|
}
|
||||||
|
return times.get(cardNum - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimingOption getTiming() {
|
public TimingOption getTiming() {
|
||||||
|
|
|
@ -32,7 +32,6 @@ public class RandomBoosterDraft extends BoosterDraft {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boosterNum++;
|
boosterNum++;
|
||||||
cardNum = 1;
|
|
||||||
fireUpdatePlayersEvent();
|
fireUpdatePlayersEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ public class RichManBoosterDraft extends DraftImpl {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(RichManBoosterDraft.class);
|
private static final Logger logger = Logger.getLogger(RichManBoosterDraft.class);
|
||||||
|
|
||||||
//protected int[] richManTimes = {75, 70, 65, 60, 55, 50, 45, 40, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
|
// custom timeouts per pick on profi timing
|
||||||
protected int[] richManTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
protected int[] customProfiTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||||
|
|
||||||
public RichManBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
public RichManBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
||||||
super(options, sets);
|
super(options, sets);
|
||||||
|
@ -87,7 +87,9 @@ public class RichManBoosterDraft extends DraftImpl {
|
||||||
if (cardNum <= 0) {
|
if (cardNum <= 0) {
|
||||||
cardNum = 1;
|
cardNum = 1;
|
||||||
}
|
}
|
||||||
int time = richManTimes[cardNum - 1] * timing.getFactor();
|
|
||||||
|
// richman uses custom times
|
||||||
|
int time = (int) Math.ceil(customProfiTimes[cardNum - 1] * timing.getCustomTimeoutFactor());
|
||||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.game.draft;
|
package mage.game.draft;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -13,8 +12,9 @@ import mage.game.draft.DraftCube.CardIdentity;
|
||||||
*/
|
*/
|
||||||
public class RichManCubeBoosterDraft extends DraftImpl {
|
public class RichManCubeBoosterDraft extends DraftImpl {
|
||||||
|
|
||||||
//protected int[] richManTimes = {75, 70, 65, 60, 55, 50, 45, 40, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
|
// custom timeouts per pick on profi timing
|
||||||
protected int[] richManTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
protected int[] customProfiTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||||
|
|
||||||
protected final Map<String, CardIdentity> cardsInCube = new LinkedHashMap<>();
|
protected final Map<String, CardIdentity> cardsInCube = new LinkedHashMap<>();
|
||||||
|
|
||||||
public RichManCubeBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
public RichManCubeBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
||||||
|
@ -102,7 +102,9 @@ public class RichManCubeBoosterDraft extends DraftImpl {
|
||||||
if (cardNum <= 0) {
|
if (cardNum <= 0) {
|
||||||
cardNum = 1;
|
cardNum = 1;
|
||||||
}
|
}
|
||||||
int time = richManTimes[cardNum - 1] * timing.getFactor();
|
|
||||||
|
// richman uses custom times
|
||||||
|
int time = (int) Math.ceil(customProfiTimes[cardNum - 1] * timing.getCustomTimeoutFactor());
|
||||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue