mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
added deck construction to draft
This commit is contained in:
parent
d62b512a72
commit
c79758f0e5
19 changed files with 154 additions and 25 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
jScrollPane1.getViewport().setOpaque(false);
|
jScrollPane1.getViewport().setOpaque(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadCards(List<Card> cards, BigCard bigCard) {
|
||||||
|
this.bigCard = bigCard;
|
||||||
|
this.btnBooster.setVisible(false);
|
||||||
|
this.btnClear.setVisible(false);
|
||||||
|
this.cbExpansionSet.setVisible(false);
|
||||||
|
cards.clear();
|
||||||
|
for (Card card: cards) {
|
||||||
|
cards.add(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void loadCards(BigCard bigCard) {
|
public void loadCards(BigCard bigCard) {
|
||||||
this.bigCard = bigCard;
|
this.bigCard = bigCard;
|
||||||
|
this.btnBooster.setVisible(true);
|
||||||
|
this.btnClear.setVisible(true);
|
||||||
|
this.cbExpansionSet.setVisible(true);
|
||||||
Object[] l = Sets.getInstance().values().toArray();
|
Object[] l = Sets.getInstance().values().toArray();
|
||||||
Arrays.sort(l, new Comparator<Object>() {
|
Arrays.sort(l, new Comparator<Object>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -106,13 +120,21 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
|
|
||||||
private void filterCards() {
|
private void filterCards() {
|
||||||
try {
|
try {
|
||||||
|
List<Card> filteredCards = new ArrayList<Card>();
|
||||||
setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
||||||
cards.clear();
|
if (!cards.isEmpty()) {
|
||||||
for (Card card: CardsStorage.getAllCards()) {
|
for (Card card: cards) {
|
||||||
if (filter.match(card))
|
if (filter.match(card))
|
||||||
cards.add(card);
|
filteredCards.add(card);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.cardGrid.loadCards(new CardsView(cards), bigCard, null);
|
else {
|
||||||
|
for (Card card: CardsStorage.getAllCards()) {
|
||||||
|
if (filter.match(card))
|
||||||
|
filteredCards.add(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.cardGrid.loadCards(new CardsView(filteredCards), bigCard, null);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
||||||
|
|
@ -466,7 +488,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
|
|
||||||
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed
|
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed
|
||||||
cards.clear();
|
cards.clear();
|
||||||
this.cardGrid.loadCards(new CardsView(cards), bigCard, null);
|
filterCards();
|
||||||
|
// this.cardGrid.loadCards(new CardsView(cards), bigCard, null);
|
||||||
}//GEN-LAST:event_btnClearActionPerformed
|
}//GEN-LAST:event_btnClearActionPerformed
|
||||||
|
|
||||||
private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed
|
private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed
|
||||||
|
|
@ -474,7 +497,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
for (Card card: booster) {
|
for (Card card: booster) {
|
||||||
cards.add(card);
|
cards.add(card);
|
||||||
}
|
}
|
||||||
this.cardGrid.loadCards(new CardsView(cards), bigCard, null);
|
filterCards();
|
||||||
|
// this.cardGrid.loadCards(new CardsView(cards), bigCard, null);
|
||||||
}//GEN-LAST:event_btnBoosterActionPerformed
|
}//GEN-LAST:event_btnBoosterActionPerformed
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
@ -70,6 +71,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
private boolean isShowCardInfo = false;
|
private boolean isShowCardInfo = false;
|
||||||
private UUID tableId;
|
private UUID tableId;
|
||||||
|
|
||||||
|
|
||||||
/** Creates new form DeckEditorPanel */
|
/** Creates new form DeckEditorPanel */
|
||||||
public DeckEditorPanel() {
|
public DeckEditorPanel() {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
@ -86,17 +88,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showDeckEditor(DeckEditorMode mode, Deck deck, UUID tableId) {
|
public void showDeckEditor(DeckEditorMode mode, Deck deck, UUID tableId) {
|
||||||
if (deck != null)
|
if (deck != null) {
|
||||||
this.deck = deck;
|
this.deck = deck;
|
||||||
this.tableId = tableId;
|
this.tableId = tableId;
|
||||||
showDeckEditor(mode);
|
this.btnSubmit.setVisible(mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited);
|
||||||
|
this.cardSelector.loadCards(new ArrayList<Card>(deck.getSideboard()), this.bigCard);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.cardSelector.loadCards(this.bigCard);
|
||||||
|
}
|
||||||
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showDeckEditor(DeckEditorMode mode) {
|
private void init() {
|
||||||
this.cardSelector.loadCards(this.bigCard);
|
|
||||||
this.cardSelector.setVisible(true);
|
this.cardSelector.setVisible(true);
|
||||||
this.jPanel1.setVisible(true);
|
this.jPanel1.setVisible(true);
|
||||||
this.btnSubmit.setVisible(mode == DeckEditorMode.Sideboard);
|
|
||||||
this.cardSelector.getCardsList().clearCardEventListeners();
|
this.cardSelector.getCardsList().clearCardEventListeners();
|
||||||
this.cardSelector.getCardsList().addCardEventListener(
|
this.cardSelector.getCardsList().addCardEventListener(
|
||||||
new Listener<Event> () {
|
new Listener<Event> () {
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public class BoosterDraft extends DraftImpl<BoosterDraft> {
|
||||||
fireUpdatePlayersEvent();
|
fireUpdatePlayersEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
startTournament();
|
this.fireEndDraftEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -774,6 +774,19 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
|
||||||
table.fireSubmitDeckEvent(playerId, deck);
|
table.fireSubmitDeckEvent(playerId, deck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void construct(Table table, Deck deck) {
|
||||||
|
//TODO: improve this
|
||||||
|
if (deck.getCards().size() < 40) {
|
||||||
|
while (deck.getCards().size() < 40) {
|
||||||
|
Card card = deck.getSideboard().iterator().next();
|
||||||
|
deck.getCards().add(card);
|
||||||
|
deck.getSideboard().remove(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
table.fireSubmitDeckEvent(playerId, deck);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pickCard(List<Card> cards, Deck deck, Draft draft) {
|
public void pickCard(List<Card> cards, Deck deck, Draft draft) {
|
||||||
//TODO: improve this
|
//TODO: improve this
|
||||||
|
|
|
||||||
|
|
@ -479,6 +479,11 @@ public class HumanPlayer extends PlayerImpl<HumanPlayer> {
|
||||||
table.fireSideboardEvent(playerId, deck);
|
table.fireSideboardEvent(playerId, deck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void construct(Table table, Deck deck) {
|
||||||
|
table.fireConstructEvent(playerId, deck);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pickCard(List<Card> cards, Deck deck, Draft draft) {
|
public void pickCard(List<Card> cards, Deck deck, Draft draft) {
|
||||||
draft.firePickCardEvent(playerId);
|
draft.firePickCardEvent(playerId);
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -53,12 +53,10 @@ import mage.view.DraftView;
|
||||||
*/
|
*/
|
||||||
public class DraftController {
|
public class DraftController {
|
||||||
|
|
||||||
// private static ExecutorService gameExecutor = ThreadExecutor.getInstance().getGameExecutor();
|
|
||||||
private final static Logger logger = Logging.getLogger(GameController.class.getName());
|
private final static Logger logger = Logging.getLogger(GameController.class.getName());
|
||||||
public static final String INIT_FILE_PATH = "config" + File.separator + "init.txt";
|
public static final String INIT_FILE_PATH = "config" + File.separator + "init.txt";
|
||||||
|
|
||||||
private ConcurrentHashMap<UUID, DraftSession> draftSessions = new ConcurrentHashMap<UUID, DraftSession>();
|
private ConcurrentHashMap<UUID, DraftSession> draftSessions = new ConcurrentHashMap<UUID, DraftSession>();
|
||||||
// private ConcurrentHashMap<UUID, GameWatcher> watchers = new ConcurrentHashMap<UUID, GameWatcher>();
|
|
||||||
private ConcurrentHashMap<UUID, UUID> sessionPlayerMap;
|
private ConcurrentHashMap<UUID, UUID> sessionPlayerMap;
|
||||||
private UUID draftSessionId;
|
private UUID draftSessionId;
|
||||||
private Draft draft;
|
private Draft draft;
|
||||||
|
|
@ -83,6 +81,9 @@ public class DraftController {
|
||||||
case UPDATE:
|
case UPDATE:
|
||||||
updateDraft();
|
updateDraft();
|
||||||
break;
|
break;
|
||||||
|
case END:
|
||||||
|
endDraft();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -146,6 +147,10 @@ public class DraftController {
|
||||||
draft.leave(getPlayerId(sessionId));
|
draft.leave(getPlayerId(sessionId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void endDraft() {
|
||||||
|
TableManager.getInstance().endDraft(tableId);
|
||||||
|
}
|
||||||
|
|
||||||
public void kill(UUID sessionId) {
|
public void kill(UUID sessionId) {
|
||||||
if (sessionPlayerMap.containsKey(sessionId)) {
|
if (sessionPlayerMap.containsKey(sessionId)) {
|
||||||
draftSessions.get(sessionPlayerMap.get(sessionId)).setKilled();
|
draftSessions.get(sessionPlayerMap.get(sessionId)).setKilled();
|
||||||
|
|
@ -166,7 +171,7 @@ public class DraftController {
|
||||||
for (final DraftSession draftSession: draftSessions.values()) {
|
for (final DraftSession draftSession: draftSessions.values()) {
|
||||||
draftSession.gameOver(message);
|
draftSession.gameOver(message);
|
||||||
}
|
}
|
||||||
TableManager.getInstance().endGame(tableId);
|
TableManager.getInstance().endDraft(tableId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getSessionId() {
|
public UUID getSessionId() {
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ import mage.game.match.Match;
|
||||||
import mage.game.Seat;
|
import mage.game.Seat;
|
||||||
import mage.game.draft.Draft;
|
import mage.game.draft.Draft;
|
||||||
import mage.game.draft.DraftOptions;
|
import mage.game.draft.DraftOptions;
|
||||||
|
import mage.game.draft.DraftPlayer;
|
||||||
import mage.game.events.Listener;
|
import mage.game.events.Listener;
|
||||||
import mage.game.events.TableEvent;
|
import mage.game.events.TableEvent;
|
||||||
import mage.game.match.MatchOptions;
|
import mage.game.match.MatchOptions;
|
||||||
|
|
@ -112,6 +113,9 @@ public class TableController {
|
||||||
case SIDEBOARD:
|
case SIDEBOARD:
|
||||||
sideboard(event.getPlayerId(), event.getDeck());
|
sideboard(event.getPlayerId(), event.getDeck());
|
||||||
break;
|
break;
|
||||||
|
case CONSTRUCT:
|
||||||
|
construct(event.getPlayerId(), event.getDeck());
|
||||||
|
break;
|
||||||
case SUBMIT_DECK:
|
case SUBMIT_DECK:
|
||||||
submitDeck(event.getPlayerId(), event.getDeck());
|
submitDeck(event.getPlayerId(), event.getDeck());
|
||||||
break;
|
break;
|
||||||
|
|
@ -167,21 +171,35 @@ public class TableController {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean submitDeck(UUID sessionId, DeckCardLists deckList) throws GameException {
|
public synchronized boolean submitDeck(UUID sessionId, DeckCardLists deckList) throws GameException {
|
||||||
if (table.getState() != TableState.SIDEBOARDING) {
|
if (table.getState() != TableState.SIDEBOARDING && table.getState() != TableState.CONSTRUCTING) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
MatchPlayer player = match.getPlayer(sessionPlayerMap.get(sessionId));
|
String playerName;
|
||||||
|
if (table.getState() == TableState.SIDEBOARDING) {
|
||||||
|
MatchPlayer player = match.getPlayer(sessionPlayerMap.get(sessionId));
|
||||||
|
playerName = player.getPlayer().getName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DraftPlayer player = draft.getPlayer(sessionPlayerMap.get(sessionId));
|
||||||
|
playerName = player.getPlayer().getName();
|
||||||
|
}
|
||||||
Deck deck = Deck.load(deckList);
|
Deck deck = Deck.load(deckList);
|
||||||
if (!Main.server.isTestMode() && !validDeck(deck)) {
|
if (!Main.server.isTestMode() && !validDeck(deck)) {
|
||||||
throw new GameException(player.getPlayer().getName() + " has an invalid deck for this format");
|
throw new GameException(playerName + " has an invalid deck for this format");
|
||||||
}
|
}
|
||||||
submitDeck(sessionPlayerMap.get(sessionId), deck);
|
submitDeck(sessionPlayerMap.get(sessionId), deck);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void submitDeck(UUID playerId, Deck deck) {
|
private void submitDeck(UUID playerId, Deck deck) {
|
||||||
MatchPlayer player = match.getPlayer(playerId);
|
if (table.getState() == TableState.SIDEBOARDING) {
|
||||||
player.submitDeck(deck);
|
MatchPlayer player = match.getPlayer(playerId);
|
||||||
|
player.submitDeck(deck);
|
||||||
|
}
|
||||||
|
else if (table.getState() == TableState.CONSTRUCTING) {
|
||||||
|
DraftPlayer player = draft.getPlayer(playerId);
|
||||||
|
player.submitDeck(deck);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean watchTable(UUID sessionId) {
|
public boolean watchTable(UUID sessionId) {
|
||||||
|
|
@ -199,7 +217,6 @@ public class TableController {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean replayTable(UUID sessionId) {
|
public boolean replayTable(UUID sessionId) {
|
||||||
if (table.getState() != TableState.FINISHED) {
|
if (table.getState() != TableState.FINISHED) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -280,6 +297,15 @@ public class TableController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void construct() {
|
||||||
|
table.construct();
|
||||||
|
for (DraftPlayer player: draft.getPlayers()) {
|
||||||
|
player.setConstructing();
|
||||||
|
player.getPlayer().construct(table, player.getDeck());
|
||||||
|
}
|
||||||
|
while (!draft.isDoneConstructing()){}
|
||||||
|
}
|
||||||
|
|
||||||
private void construct(UUID playerId, Deck deck) {
|
private void construct(UUID playerId, Deck deck) {
|
||||||
SessionManager sessionManager = SessionManager.getInstance();
|
SessionManager sessionManager = SessionManager.getInstance();
|
||||||
for (Entry<UUID, UUID> entry: sessionPlayerMap.entrySet()) {
|
for (Entry<UUID, UUID> entry: sessionPlayerMap.entrySet()) {
|
||||||
|
|
@ -306,6 +332,11 @@ public class TableController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void endDraft() {
|
||||||
|
construct();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void swapSeats(int seatNum1, int seatNum2) {
|
public void swapSeats(int seatNum1, int seatNum2) {
|
||||||
if (table.getState() == TableState.STARTING) {
|
if (table.getState() == TableState.STARTING) {
|
||||||
if (seatNum1 >= 0 && seatNum2 >= 0 && seatNum1 < table.getSeats().length && seatNum2 < table.getSeats().length) {
|
if (seatNum1 >= 0 && seatNum2 >= 0 && seatNum1 < table.getSeats().length && seatNum2 < table.getSeats().length) {
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,10 @@ public class TableManager {
|
||||||
controllers.get(tableId).endGame();
|
controllers.get(tableId).endGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void endDraft(UUID tableId) {
|
||||||
|
controllers.get(tableId).endDraft();
|
||||||
|
}
|
||||||
|
|
||||||
public GameReplay createReplay(UUID tableId) {
|
public GameReplay createReplay(UUID tableId) {
|
||||||
return controllers.get(tableId).createReplay();
|
return controllers.get(tableId).createReplay();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,7 @@ public final class Constants {
|
||||||
DRAFTING ("Drafting"),
|
DRAFTING ("Drafting"),
|
||||||
DUELING ("Dueling"),
|
DUELING ("Dueling"),
|
||||||
SIDEBOARDING ("Sideboarding"),
|
SIDEBOARDING ("Sideboarding"),
|
||||||
|
CONSTRUCTING ("Constructing"),
|
||||||
FINISHED ("Finished");
|
FINISHED ("Finished");
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,10 @@ public class Table implements Serializable {
|
||||||
state = TableState.SIDEBOARDING;
|
state = TableState.SIDEBOARDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void construct() {
|
||||||
|
state = TableState.CONSTRUCTING;
|
||||||
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
@ -155,6 +159,10 @@ public class Table implements Serializable {
|
||||||
tableEventSource.fireTableEvent(EventType.SIDEBOARD, playerId, deck);
|
tableEventSource.fireTableEvent(EventType.SIDEBOARD, playerId, deck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void fireConstructEvent(UUID playerId, Deck deck) {
|
||||||
|
tableEventSource.fireTableEvent(EventType.CONSTRUCT, playerId, deck);
|
||||||
|
}
|
||||||
|
|
||||||
public void fireSubmitDeckEvent(UUID playerId, Deck deck) {
|
public void fireSubmitDeckEvent(UUID playerId, Deck deck) {
|
||||||
tableEventSource.fireTableEvent(EventType.SUBMIT_DECK, playerId, deck);
|
tableEventSource.fireTableEvent(EventType.SUBMIT_DECK, playerId, deck);
|
||||||
}
|
}
|
||||||
|
|
@ -162,4 +170,5 @@ public class Table implements Serializable {
|
||||||
public void addTableEventListener(Listener<TableEvent> listener) {
|
public void addTableEventListener(Listener<TableEvent> listener) {
|
||||||
tableEventSource.addListener(listener);
|
tableEventSource.addListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,9 +50,11 @@ public interface Draft extends MageItem, Serializable {
|
||||||
public void start();
|
public void start();
|
||||||
public void leave(UUID playerId);
|
public void leave(UUID playerId);
|
||||||
public void autoPick(UUID playerId);
|
public void autoPick(UUID playerId);
|
||||||
|
public boolean isDoneConstructing();
|
||||||
|
|
||||||
public void addTableEventListener(Listener<TableEvent> listener);
|
public void addTableEventListener(Listener<TableEvent> listener);
|
||||||
public void fireUpdatePlayersEvent();
|
public void fireUpdatePlayersEvent();
|
||||||
|
public void fireEndDraftEvent();
|
||||||
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener);
|
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener);
|
||||||
public void firePickCardEvent(UUID playerId);
|
public void firePickCardEvent(UUID playerId);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,11 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
|
||||||
tableEventSource.fireTableEvent(EventType.UPDATE, null, this);
|
tableEventSource.fireTableEvent(EventType.UPDATE, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fireEndDraftEvent() {
|
||||||
|
tableEventSource.fireTableEvent(EventType.END, null, this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener) {
|
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener) {
|
||||||
playerQueryEventSource.addListener(listener);
|
playerQueryEventSource.addListener(listener);
|
||||||
|
|
@ -209,4 +214,13 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
|
||||||
//TODO: implement this
|
//TODO: implement this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDoneConstructing() {
|
||||||
|
for (DraftPlayer player: this.players.values()) {
|
||||||
|
if (!player.isDoneConstructing())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ public class DraftPlayer {
|
||||||
protected Deck deck;
|
protected Deck deck;
|
||||||
protected List<Card> booster;
|
protected List<Card> booster;
|
||||||
protected boolean picking;
|
protected boolean picking;
|
||||||
|
protected boolean doneConstructing;
|
||||||
|
|
||||||
public DraftPlayer(Player player) {
|
public DraftPlayer(Player player) {
|
||||||
id = UUID.randomUUID();
|
id = UUID.randomUUID();
|
||||||
|
|
@ -91,4 +92,17 @@ public class DraftPlayer {
|
||||||
return picking;
|
return picking;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setConstructing() {
|
||||||
|
this.doneConstructing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void submitDeck(Deck deck) {
|
||||||
|
this.deck = deck;
|
||||||
|
this.doneConstructing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDoneConstructing() {
|
||||||
|
return this.doneConstructing;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ import mage.game.draft.Draft;
|
||||||
public class TableEvent extends EventObject implements ExternalEvent, Serializable {
|
public class TableEvent extends EventObject implements ExternalEvent, Serializable {
|
||||||
|
|
||||||
public enum EventType {
|
public enum EventType {
|
||||||
UPDATE, INFO, REVEAL, LOOK, SIDEBOARD, SUBMIT_DECK
|
UPDATE, INFO, REVEAL, LOOK, SIDEBOARD, CONSTRUCT, SUBMIT_DECK, END
|
||||||
}
|
}
|
||||||
|
|
||||||
private Game game;
|
private Game game;
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,7 @@ public interface Player extends MageItem, Copyable<Player> {
|
||||||
public abstract void assignDamage(int damage, List<UUID> targets, UUID sourceId, Game game);
|
public abstract void assignDamage(int damage, List<UUID> targets, UUID sourceId, Game game);
|
||||||
public abstract int getAmount(int min, int max, String message, Game game);
|
public abstract int getAmount(int min, int max, String message, Game game);
|
||||||
public abstract void sideboard(Table table, Deck deck);
|
public abstract void sideboard(Table table, Deck deck);
|
||||||
|
public abstract void construct(Table table, Deck deck);
|
||||||
public abstract void pickCard(List<Card> cards, Deck deck, Draft draft);
|
public abstract void pickCard(List<Card> cards, Deck deck, Draft draft);
|
||||||
|
|
||||||
public void declareAttacker(UUID attackerId, UUID defenderId, Game game);
|
public void declareAttacker(UUID attackerId, UUID defenderId, Game game);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue