mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Draft Matters - How many cards you've drafted this round (#5203)
This commit is contained in:
@@ -5,16 +5,7 @@ package forge.gui.framework;
|
||||
|
||||
import com.google.common.collect.ObjectArrays;
|
||||
|
||||
import forge.screens.deckeditor.views.VAllDecks;
|
||||
import forge.screens.deckeditor.views.VBrawlDecks;
|
||||
import forge.screens.deckeditor.views.VCardCatalog;
|
||||
import forge.screens.deckeditor.views.VCommanderDecks;
|
||||
import forge.screens.deckeditor.views.VCurrentDeck;
|
||||
import forge.screens.deckeditor.views.VDeckgen;
|
||||
import forge.screens.deckeditor.views.VOathbreakerDecks;
|
||||
import forge.screens.deckeditor.views.VProbabilities;
|
||||
import forge.screens.deckeditor.views.VStatistics;
|
||||
import forge.screens.deckeditor.views.VTinyLeadersDecks;
|
||||
import forge.screens.deckeditor.views.*;
|
||||
import forge.screens.home.gauntlet.*;
|
||||
import forge.screens.home.online.VSubmenuOnlineLobby;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
@@ -61,6 +52,7 @@ public enum EDocID {
|
||||
EDITOR_BRAWL (VBrawlDecks.SINGLETON_INSTANCE),
|
||||
EDITOR_TINY_LEADERS (VTinyLeadersDecks.SINGLETON_INSTANCE),
|
||||
EDITOR_OATHBREAKER (VOathbreakerDecks.SINGLETON_INSTANCE),
|
||||
EDITOR_LOG(VEditorLog.SINGLETON_INSTANCE),
|
||||
|
||||
WORKSHOP_CATALOG (VWorkshopCatalog.SINGLETON_INSTANCE),
|
||||
WORKSHOP_CARDDESIGNER (VCardDesigner.SINGLETON_INSTANCE),
|
||||
|
||||
@@ -42,13 +42,7 @@ import forge.screens.deckeditor.controllers.CEditorQuestCardShop;
|
||||
import forge.screens.deckeditor.controllers.CProbabilities;
|
||||
import forge.screens.deckeditor.controllers.CStatistics;
|
||||
import forge.screens.deckeditor.controllers.DeckController;
|
||||
import forge.screens.deckeditor.views.VAllDecks;
|
||||
import forge.screens.deckeditor.views.VBrawlDecks;
|
||||
import forge.screens.deckeditor.views.VCardCatalog;
|
||||
import forge.screens.deckeditor.views.VCommanderDecks;
|
||||
import forge.screens.deckeditor.views.VCurrentDeck;
|
||||
import forge.screens.deckeditor.views.VOathbreakerDecks;
|
||||
import forge.screens.deckeditor.views.VTinyLeadersDecks;
|
||||
import forge.screens.deckeditor.views.*;
|
||||
import forge.screens.match.controllers.CDetailPicture;
|
||||
import forge.util.ItemPool;
|
||||
|
||||
@@ -72,6 +66,7 @@ public enum CDeckEditorUI implements ICDoc {
|
||||
private final VOathbreakerDecks vOathbreakerDecks;
|
||||
private final VBrawlDecks vBrawlDecks;
|
||||
private final VTinyLeadersDecks vTinyLeadersDecks;
|
||||
private final VEditorLog vEditorLog;
|
||||
|
||||
CDeckEditorUI() {
|
||||
screenChildControllers = new HashMap<>();
|
||||
@@ -86,6 +81,7 @@ public enum CDeckEditorUI implements ICDoc {
|
||||
this.vBrawlDecks.setCDetailPicture(cDetailPicture);
|
||||
this.vTinyLeadersDecks = VTinyLeadersDecks.SINGLETON_INSTANCE;
|
||||
this.vTinyLeadersDecks.setCDetailPicture(cDetailPicture);
|
||||
this.vEditorLog = VEditorLog.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
public CDetailPicture getCDetailPicture() {
|
||||
@@ -230,9 +226,9 @@ public enum CDeckEditorUI implements ICDoc {
|
||||
}
|
||||
else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) {
|
||||
if (e.isControlDown() || e.isMetaDown()) {
|
||||
deckView.focus();
|
||||
e.consume(); //prevent losing selection
|
||||
}
|
||||
deckView.focus();
|
||||
e.consume(); //prevent losing selection
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -308,6 +304,7 @@ public enum CDeckEditorUI implements ICDoc {
|
||||
public void register() {
|
||||
EDocID.CARD_PICTURE.setDoc(cDetailPicture.getCPicture().getView());
|
||||
EDocID.CARD_DETAIL.setDoc(cDetailPicture.getCDetail().getView());
|
||||
EDocID.EDITOR_LOG.setDoc(vEditorLog);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -27,6 +27,8 @@ import forge.deck.DeckSection;
|
||||
import forge.game.GameType;
|
||||
import forge.gamemodes.limited.BoosterDraft;
|
||||
import forge.gamemodes.limited.IBoosterDraft;
|
||||
import forge.gamemodes.limited.IDraftLog;
|
||||
import forge.gamemodes.limited.LimitedPlayer;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.item.PaperCard;
|
||||
@@ -34,13 +36,7 @@ import forge.itemmanager.CardManager;
|
||||
import forge.itemmanager.ItemManagerConfig;
|
||||
import forge.model.FModel;
|
||||
import forge.screens.deckeditor.CDeckEditorUI;
|
||||
import forge.screens.deckeditor.views.VAllDecks;
|
||||
import forge.screens.deckeditor.views.VBrawlDecks;
|
||||
import forge.screens.deckeditor.views.VCommanderDecks;
|
||||
import forge.screens.deckeditor.views.VCurrentDeck;
|
||||
import forge.screens.deckeditor.views.VDeckgen;
|
||||
import forge.screens.deckeditor.views.VOathbreakerDecks;
|
||||
import forge.screens.deckeditor.views.VTinyLeadersDecks;
|
||||
import forge.screens.deckeditor.views.*;
|
||||
import forge.screens.home.sanctioned.CSubmenuDraft;
|
||||
import forge.screens.match.controllers.CDetailPicture;
|
||||
import forge.toolbox.FOptionPane;
|
||||
@@ -55,7 +51,7 @@ import forge.util.Localizer;
|
||||
* @author Forge
|
||||
* @version $Id: CEditorDraftingProcess.java 24872 2014-02-17 07:35:47Z drdev $
|
||||
*/
|
||||
public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> implements IDraftLog {
|
||||
private IBoosterDraft boosterDraft;
|
||||
|
||||
private String ccAddLabel = Localizer.getInstance().getMessage("lblAddcard");
|
||||
@@ -65,6 +61,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
private DragCell brawlDecksParent = null;
|
||||
private DragCell tinyLeadersDecksParent = null;
|
||||
private DragCell deckGenParent = null;
|
||||
private DragCell draftLogParent = null;
|
||||
private boolean saved = false;
|
||||
private final Localizer localizer = Localizer.getInstance();
|
||||
|
||||
@@ -99,6 +96,13 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
*/
|
||||
public final void showGui(final IBoosterDraft inBoosterDraft) {
|
||||
this.boosterDraft = inBoosterDraft;
|
||||
this.boosterDraft.setLogEntry(this);
|
||||
|
||||
this.addLogEntry("Drafting process started.");
|
||||
}
|
||||
|
||||
public void addLogEntry(String message) {
|
||||
CEditorLog.SINGLETON_INSTANCE.addLogEntry(message);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -110,6 +114,8 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
|
||||
// can only draft one at a time, regardless of the requested quantity
|
||||
PaperCard card = items.iterator().next().getKey();
|
||||
|
||||
// Verify if card is in the activate pack?
|
||||
this.getDeckManager().addItem(card, 1);
|
||||
|
||||
// get next booster pack
|
||||
@@ -212,16 +218,30 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
|
||||
} while(s == null || s.isEmpty());
|
||||
|
||||
saved = true;
|
||||
|
||||
// Construct computer's decks and save draft
|
||||
final Deck[] computer = this.boosterDraft.getDecks();
|
||||
final LimitedPlayer[] players = this.boosterDraft.getOpposingPlayers();
|
||||
|
||||
for(int i = 0; i < computer.length; i++) {
|
||||
Deck deck = computer[i];
|
||||
LimitedPlayer player = players[i];
|
||||
|
||||
deck.setDraftNotes(player.getSerializedDraftNotes());
|
||||
}
|
||||
|
||||
// Assigned noted stuff to deck from LimitedPlayer
|
||||
final DeckGroup finishedDraft = new DeckGroup(s);
|
||||
finishedDraft.setHumanDeck((Deck) this.getPlayersDeck().copyTo(s));
|
||||
final LimitedPlayer player = this.boosterDraft.getHumanPlayer();
|
||||
|
||||
Deck humanDeck = (Deck) this.getPlayersDeck().copyTo(s);
|
||||
humanDeck.setDraftNotes(player.getSerializedDraftNotes());
|
||||
finishedDraft.setHumanDeck(humanDeck);
|
||||
finishedDraft.addAiDecks(computer);
|
||||
|
||||
FModel.getDecks().getDraft().add(finishedDraft);
|
||||
|
||||
saved = true;
|
||||
|
||||
CSubmenuDraft.SINGLETON_INSTANCE.update();
|
||||
FScreen.DRAFTING_PROCESS.close();
|
||||
|
||||
@@ -267,6 +287,11 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
this.getCatalogManager().setup(ItemManagerConfig.DRAFT_PACK);
|
||||
this.getDeckManager().setup(ItemManagerConfig.DRAFT_POOL);
|
||||
|
||||
if (VEditorLog.SINGLETON_INSTANCE.getParentCell() == null) {
|
||||
VCardCatalog.SINGLETON_INSTANCE.getParentCell().addDoc(VEditorLog.SINGLETON_INSTANCE);
|
||||
VEditorLog.SINGLETON_INSTANCE.showView();
|
||||
}
|
||||
|
||||
ccAddLabel = this.getBtnAdd().getText();
|
||||
|
||||
if (this.getDeckManager().getPool() == null) { //avoid showing next choice or resetting pool if just switching back to Draft screen
|
||||
@@ -327,6 +352,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
this.getBtnRemove4().setVisible(true);
|
||||
|
||||
VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(true);
|
||||
VEditorLog.SINGLETON_INSTANCE.getParentCell().setVisible(true);
|
||||
|
||||
//Re-add tabs
|
||||
if (deckGenParent != null) {
|
||||
@@ -347,6 +373,9 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
if (tinyLeadersDecksParent != null) {
|
||||
tinyLeadersDecksParent.addDoc(VTinyLeadersDecks.SINGLETON_INSTANCE);
|
||||
}
|
||||
if (draftLogParent != null) {
|
||||
draftLogParent.addDoc(VEditorLog.SINGLETON_INSTANCE);
|
||||
}
|
||||
|
||||
// set catalog table back to free-selection mode
|
||||
getCatalogManager().setAllowMultipleSelections(true);
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package forge.screens.deckeditor.controllers;
|
||||
|
||||
import forge.gui.FThreads;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.screens.deckeditor.views.VEditorLog;
|
||||
|
||||
/**
|
||||
* Controls the "editor log" panel in the deck editor UI.
|
||||
*
|
||||
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||
*
|
||||
*/
|
||||
public enum CEditorLog implements ICDoc {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
/** */
|
||||
CEditorDraftingProcess draftingProcess;
|
||||
|
||||
private final VEditorLog view;
|
||||
|
||||
CEditorLog() {
|
||||
this.view = VEditorLog.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
//========== Overridden methods
|
||||
|
||||
public final VEditorLog getView() {
|
||||
return view;
|
||||
}
|
||||
|
||||
public final void addLogEntry(final String entry) {
|
||||
view.addLogEntry(entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register() {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.ICDoc#initialize()
|
||||
*/
|
||||
@Override
|
||||
public void initialize() {
|
||||
FThreads.invokeInEdtNowOrLater(reset);
|
||||
}
|
||||
|
||||
private final Runnable reset = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
view.resetNewDraft();
|
||||
}
|
||||
};
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.ICDoc#update()
|
||||
*/
|
||||
@Override
|
||||
public void update() {
|
||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
view.updateConsole();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package forge.screens.deckeditor.views;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.IVDoc;
|
||||
import forge.screens.deckeditor.controllers.CEditorLog;
|
||||
import forge.screens.match.GameLogPanel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.util.Localizer;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Assembles Swing components of card catalog in deck editor.
|
||||
*
|
||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||
*
|
||||
*/
|
||||
public enum VEditorLog implements IVDoc<CEditorLog> {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
// Fields used with interface IVDoc
|
||||
private DragCell parentCell;
|
||||
final Localizer localizer = Localizer.getInstance();
|
||||
private final DragTab tab = new DragTab(localizer.getMessage("lblEditorLog"));
|
||||
|
||||
private final GameLogPanel gameLog;
|
||||
|
||||
private final JPanel pnlContent = new JPanel(new MigLayout("insets 0, gap 0, wrap"));
|
||||
private final FScrollPane scroller = new FScrollPane(pnlContent, false);
|
||||
|
||||
|
||||
private final List<String> editorLogEntries = Lists.newArrayList();
|
||||
|
||||
VEditorLog() {
|
||||
pnlContent.setOpaque(false);
|
||||
scroller.getViewport().setBorder(null);
|
||||
|
||||
this.gameLog = new GameLogPanel();
|
||||
}
|
||||
|
||||
//========== Overridden from IVDoc
|
||||
|
||||
@Override
|
||||
public EDocID getDocumentID() {
|
||||
return EDocID.EDITOR_LOG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragTab getTabLabel() {
|
||||
return tab;
|
||||
}
|
||||
|
||||
public void showView() {
|
||||
tab.setVisible(true);
|
||||
tab.setOpaque(true);
|
||||
pnlContent.setOpaque(true);
|
||||
pnlContent.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CEditorLog getLayoutControl() {
|
||||
return CEditorLog.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentCell(final DragCell cell0) {
|
||||
this.parentCell = cell0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragCell getParentCell() {
|
||||
return this.parentCell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate() {
|
||||
final JPanel parentBody = parentCell.getBody();
|
||||
parentBody.setLayout(new MigLayout("insets 5, gap 0, wrap, hidemode 3"));
|
||||
// Add the panel that contains the log entries
|
||||
parentBody.add(gameLog, "w 10:100%, h 100%");
|
||||
}
|
||||
|
||||
public void resetNewDraft() {
|
||||
// Should we store the draft?
|
||||
gameLog.reset();
|
||||
editorLogEntries.clear();
|
||||
}
|
||||
|
||||
public void updateConsole() {
|
||||
gameLog.updateUI();
|
||||
}
|
||||
|
||||
public void addLogEntry(String entry) {
|
||||
gameLog.addLogEntry(entry);
|
||||
this.editorLogEntries.add(entry);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package forge;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.gamemodes.limited.IDraftLog;
|
||||
import forge.gamemodes.limited.LimitedPlayer;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import forge.deck.CardPool;
|
||||
@@ -32,6 +34,16 @@ public class BoosterDraftTest implements IBoosterDraft {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LimitedPlayer[] getOpposingPlayers() {
|
||||
return new LimitedPlayer[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public LimitedPlayer getHumanPlayer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CardPool nextChoice() {
|
||||
this.n--;
|
||||
@@ -69,4 +81,14 @@ public class BoosterDraftTest implements IBoosterDraft {
|
||||
public boolean isPileDraft() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLogEntry(IDraftLog draftingProcess) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IDraftLog getDraftLog() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user