mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Initial checkin for Puzzle Mode
This commit is contained in:
@@ -16,6 +16,8 @@ import forge.screens.home.gauntlet.VSubmenuGauntletContests;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletLoad;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletQuick;
|
||||
import forge.screens.home.online.VSubmenuOnlineLobby;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
|
||||
import forge.screens.home.quest.VSubmenuChallenges;
|
||||
import forge.screens.home.quest.VSubmenuDuels;
|
||||
import forge.screens.home.quest.VSubmenuQuestData;
|
||||
@@ -71,6 +73,8 @@ public enum EDocID {
|
||||
HOME_ACHIEVEMENTS (VSubmenuAchievements.SINGLETON_INSTANCE),
|
||||
HOME_AVATARS (VSubmenuAvatars.SINGLETON_INSTANCE),
|
||||
HOME_UTILITIES (VSubmenuDownloaders.SINGLETON_INSTANCE),
|
||||
HOME_PUZZLE_CREATE(VSubmenuPuzzleCreate.SINGLETON_INSTANCE),
|
||||
HOME_PUZZLE_SOLVE(VSubmenuPuzzleSolve.SINGLETON_INSTANCE),
|
||||
HOME_CONSTRUCTED (VSubmenuConstructed.SINGLETON_INSTANCE),
|
||||
HOME_DRAFT (VSubmenuDraft.SINGLETON_INSTANCE),
|
||||
HOME_SEALED (VSubmenuSealed.SINGLETON_INSTANCE),
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package forge.screens.deckeditor.views;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
@@ -11,6 +8,9 @@ import forge.item.InventoryItem;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.ItemManagerContainer;
|
||||
import forge.screens.deckeditor.controllers.CCardCatalog;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Assembles Swing components of card catalog in deck editor.
|
||||
|
||||
@@ -11,6 +11,7 @@ public enum EMenuGroup {
|
||||
SANCTIONED ("Sanctioned Formats"),
|
||||
ONLINE ("Online Multiplayer"),
|
||||
QUEST ("Quest Mode"),
|
||||
PUZZLE ("Puzzle Mode"),
|
||||
GAUNTLET ("Gauntlets"),
|
||||
SETTINGS ("Game Settings");
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ import javax.swing.JPanel;
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Singletons;
|
||||
import forge.assets.FSkinProp;
|
||||
@@ -56,6 +58,7 @@ import forge.screens.home.quest.VSubmenuQuestPrefs;
|
||||
import forge.screens.home.sanctioned.VSubmenuConstructed;
|
||||
import forge.screens.home.sanctioned.VSubmenuDraft;
|
||||
import forge.screens.home.sanctioned.VSubmenuSealed;
|
||||
import forge.screens.home.sanctioned.VSubmenuWinston;
|
||||
import forge.screens.home.settings.VSubmenuAchievements;
|
||||
import forge.screens.home.settings.VSubmenuAvatars;
|
||||
import forge.screens.home.settings.VSubmenuDownloaders;
|
||||
@@ -132,6 +135,9 @@ public enum VHomeUI implements IVTopLevelUI {
|
||||
allSubmenus.add(VSubmenuGauntletLoad.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuGauntletContests.SINGLETON_INSTANCE);
|
||||
|
||||
allSubmenus.add(VSubmenuPuzzleSolve.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuPuzzleCreate.SINGLETON_INSTANCE);
|
||||
|
||||
allSubmenus.add(VSubmenuPreferences.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuAchievements.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuAvatars.SINGLETON_INSTANCE);
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package forge.screens.home.puzzle;
|
||||
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.menus.IMenuProvider;
|
||||
import forge.menus.MenuUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public enum CSubmenuPuzzleCreate implements ICDoc, IMenuProvider {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private VSubmenuPuzzleCreate view = VSubmenuPuzzleCreate.SINGLETON_INSTANCE;
|
||||
|
||||
@Override
|
||||
public void register() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
MenuUtil.setMenuProvider(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JMenu> getMenus() {
|
||||
final List<JMenu> menus = new ArrayList<JMenu>();
|
||||
menus.add(PuzzleGameMenu.getMenu());
|
||||
return menus;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package forge.screens.home.puzzle;
|
||||
|
||||
import forge.GuiBase;
|
||||
import forge.UiCommand;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameRules;
|
||||
import forge.game.GameType;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.match.HostedMatch;
|
||||
import forge.menus.IMenuProvider;
|
||||
import forge.menus.MenuUtil;
|
||||
import forge.player.GamePlayerUtil;
|
||||
import forge.puzzle.Puzzle;
|
||||
import forge.puzzle.PuzzleIO;
|
||||
import forge.quest.QuestUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public enum CSubmenuPuzzleSolve implements ICDoc, IMenuProvider {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private VSubmenuPuzzleSolve view = VSubmenuPuzzleSolve.SINGLETON_INSTANCE;
|
||||
|
||||
@Override
|
||||
public void register() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
view.getList().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
updateData();
|
||||
view.getBtnStart().addActionListener(
|
||||
new ActionListener() { @Override
|
||||
public void actionPerformed(final ActionEvent e) { startPuzzleSolve(); } });
|
||||
}
|
||||
|
||||
private final UiCommand cmdStart = new UiCommand() {
|
||||
@Override public void run() {
|
||||
startPuzzleSolve();
|
||||
}
|
||||
};
|
||||
|
||||
private void updateData() {
|
||||
final ArrayList<Puzzle> puzzles = PuzzleIO.loadPuzzles();
|
||||
for(Puzzle p : puzzles) {
|
||||
view.getModel().addElement(p);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
MenuUtil.setMenuProvider(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JMenu> getMenus() {
|
||||
final List<JMenu> menus = new ArrayList<JMenu>();
|
||||
menus.add(PuzzleGameMenu.getMenu());
|
||||
return menus;
|
||||
}
|
||||
|
||||
private boolean startPuzzleSolve() {
|
||||
final Puzzle selected = (Puzzle)view.getList().getSelectedValue();
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
SOverlayUtils.startGameOverlay();
|
||||
SOverlayUtils.showOverlay();
|
||||
}
|
||||
});
|
||||
|
||||
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
||||
hostedMatch.setStartGameHook(new Runnable() {
|
||||
@Override
|
||||
public final void run() {
|
||||
selected.applyToGame(hostedMatch.getGame());
|
||||
}
|
||||
});
|
||||
|
||||
final List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>();
|
||||
final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer());
|
||||
human.setStartingHand(0);
|
||||
players.add(human);
|
||||
|
||||
final RegisteredPlayer ai = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.createAiPlayer());
|
||||
ai.setStartingHand(0);
|
||||
players.add(ai);
|
||||
|
||||
GameRules rules = new GameRules(GameType.Puzzle);
|
||||
rules.setGamesPerMatch(1);
|
||||
hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame());
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
SOverlayUtils.hideOverlay();
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package forge.screens.home.puzzle;
|
||||
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class PuzzleGameMenu {
|
||||
private PuzzleGameMenu() { }
|
||||
|
||||
private static ForgePreferences prefs = FModel.getPreferences();
|
||||
|
||||
public static JMenu getMenu() {
|
||||
JMenu menu = new JMenu("Puzzle");
|
||||
menu.setMnemonic(KeyEvent.VK_G);
|
||||
return menu;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package forge.screens.home.puzzle;
|
||||
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.interfaces.IPlayerChangeListener;
|
||||
import forge.match.GameLobby;
|
||||
import forge.match.LocalLobby;
|
||||
import forge.net.event.UpdateLobbyPlayerEvent;
|
||||
import forge.screens.home.EMenuGroup;
|
||||
import forge.screens.home.IVSubmenu;
|
||||
import forge.screens.home.VHomeUI;
|
||||
import forge.screens.home.VLobby;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public enum VSubmenuPuzzleCreate implements IVSubmenu<CSubmenuPuzzleCreate> {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private DragCell parentCell;
|
||||
private final DragTab tab = new DragTab("Puzzle Mode: Create");
|
||||
|
||||
private final GameLobby lobby = new LocalLobby();
|
||||
private final VLobby vLobby = new VLobby(lobby);
|
||||
|
||||
VSubmenuPuzzleCreate() {
|
||||
lobby.setListener(vLobby);
|
||||
|
||||
vLobby.setPlayerChangeListener(new IPlayerChangeListener() {
|
||||
@Override public final void update(final int index, final UpdateLobbyPlayerEvent event) {
|
||||
lobby.applyToSlot(index, event);
|
||||
}
|
||||
});
|
||||
|
||||
vLobby.update(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EMenuGroup getGroupEnum() {
|
||||
return EMenuGroup.PUZZLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMenuTitle() {
|
||||
return "Create";
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDocID getItemEnum() {
|
||||
return EDocID.HOME_PUZZLE_CREATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDocID getDocumentID() {
|
||||
return EDocID.HOME_PUZZLE_CREATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragTab getTabLabel() {
|
||||
return tab;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CSubmenuPuzzleCreate getLayoutControl() {
|
||||
return CSubmenuPuzzleCreate.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentCell(DragCell cell0) {
|
||||
this.parentCell = cell0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragCell getParentCell() {
|
||||
return this.parentCell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate() {
|
||||
final JPanel container = VHomeUI.SINGLETON_INSTANCE.getPnlDisplay();
|
||||
|
||||
container.removeAll();
|
||||
container.setLayout(new MigLayout("insets 0, gap 0, wrap 1, ax right"));
|
||||
vLobby.getLblTitle().setText("Puzzle Mode: Create");
|
||||
container.add(vLobby.getLblTitle(), "w 80%, h 40px!, gap 0 0 15px 15px, span 2, al right, pushx");
|
||||
|
||||
|
||||
if (container.isShowing()) {
|
||||
container.validate();
|
||||
container.repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package forge.screens.home.puzzle;
|
||||
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.interfaces.IPlayerChangeListener;
|
||||
import forge.match.GameLobby;
|
||||
import forge.match.LocalLobby;
|
||||
import forge.net.event.UpdateLobbyPlayerEvent;
|
||||
import forge.screens.home.*;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public enum VSubmenuPuzzleSolve implements IVSubmenu<CSubmenuPuzzleSolve> {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private final JList puzzleList;
|
||||
final DefaultListModel model = new DefaultListModel();
|
||||
|
||||
private final StartButton btnStart = new StartButton();
|
||||
|
||||
private DragCell parentCell;
|
||||
private final DragTab tab = new DragTab("Puzzle Mode: Solve");
|
||||
|
||||
private final GameLobby lobby = new LocalLobby();
|
||||
private final VLobby vLobby = new VLobby(lobby);
|
||||
|
||||
VSubmenuPuzzleSolve() {
|
||||
puzzleList = new JList<>();
|
||||
lobby.setListener(vLobby);
|
||||
|
||||
vLobby.setPlayerChangeListener(new IPlayerChangeListener() {
|
||||
@Override public final void update(final int index, final UpdateLobbyPlayerEvent event) {
|
||||
lobby.applyToSlot(index, event);
|
||||
}
|
||||
});
|
||||
|
||||
vLobby.update(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EMenuGroup getGroupEnum() {
|
||||
return EMenuGroup.PUZZLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMenuTitle() {
|
||||
return "Solve";
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDocID getItemEnum() {
|
||||
return EDocID.HOME_PUZZLE_SOLVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDocID getDocumentID() {
|
||||
return EDocID.HOME_PUZZLE_SOLVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragTab getTabLabel() {
|
||||
return tab;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CSubmenuPuzzleSolve getLayoutControl() {
|
||||
return CSubmenuPuzzleSolve.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentCell(DragCell cell0) {
|
||||
this.parentCell = cell0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DragCell getParentCell() {
|
||||
return this.parentCell;
|
||||
}
|
||||
|
||||
public JList getList() {
|
||||
return puzzleList;
|
||||
}
|
||||
|
||||
public DefaultListModel getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
public StartButton getBtnStart() {
|
||||
return btnStart;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate() {
|
||||
final JPanel container = VHomeUI.SINGLETON_INSTANCE.getPnlDisplay();
|
||||
|
||||
container.removeAll();
|
||||
container.setLayout(new MigLayout("insets 0, gap 0, wrap 1, ax right"));
|
||||
vLobby.getLblTitle().setText("Puzzle Mode: Solve");
|
||||
container.add(vLobby.getLblTitle(), "w 80%, h 40px!, gap 0 0 15px 15px, span 2, al right, pushx");
|
||||
puzzleList.setModel(model);
|
||||
container.add(puzzleList, "w 80%, h 200px!, gap 0 0 0px 0px, span 2, al center");
|
||||
container.add(btnStart, "w 98%!, ax center, gap 1% 0 20px 20px, span 2");
|
||||
|
||||
|
||||
if (container.isShowing()) {
|
||||
container.validate();
|
||||
container.repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user