Draft Matters - How many cards you've drafted this round (#5203)

This commit is contained in:
Chris H
2024-05-21 05:36:59 -04:00
committed by GitHub
parent 6eebb1861f
commit 6087167673
30 changed files with 548 additions and 167 deletions

View File

@@ -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),

View File

@@ -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)

View File

@@ -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);

View File

@@ -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();
}
});
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}