mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
- Remove the Players and Command panels
- Some more cleanup - Cleanup the Animation class (public method signatures unchanged)
This commit is contained in:
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -1020,7 +1020,6 @@ forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java -text
|
|||||||
forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CAntes.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CAntes.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCommand.java -text
|
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetailPicture.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetailPicture.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java -text
|
||||||
@@ -1029,7 +1028,6 @@ forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java -tex
|
|||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CHand.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CHand.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPlayers.java -text
|
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CStack.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/CStack.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/controllers/package-info.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/controllers/package-info.java -text
|
||||||
@@ -1041,7 +1039,6 @@ forge-gui-desktop/src/main/java/forge/screens/match/package-info.java -text
|
|||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/IDevListener.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/IDevListener.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VAntes.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VAntes.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VCombat.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VCombat.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VCommand.java -text
|
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VDetail.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VDetail.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java -text
|
||||||
@@ -1049,7 +1046,6 @@ forge-gui-desktop/src/main/java/forge/screens/match/views/VField.java -text
|
|||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VHand.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VHand.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VPicture.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VPicture.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VPlayers.java -text
|
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VPrompt.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VPrompt.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/views/package-info.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/views/package-info.java -text
|
||||||
|
|||||||
@@ -80,15 +80,6 @@ public class KeyboardShortcuts {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Show players panel. */
|
|
||||||
final Action actShowPlayers = new AbstractAction() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent e) {
|
|
||||||
if (!Singletons.getControl().getCurrentScreen().isMatchScreen()) { return; }
|
|
||||||
SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Show dev panel. */
|
/** Show dev panel. */
|
||||||
final Action actShowDev = new AbstractAction() {
|
final Action actShowDev = new AbstractAction() {
|
||||||
@Override
|
@Override
|
||||||
@@ -144,7 +135,6 @@ public class KeyboardShortcuts {
|
|||||||
list.add(new Shortcut(FPref.SHORTCUT_SHOWSTACK, "Match: show stack panel", actShowStack, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_SHOWSTACK, "Match: show stack panel", actShowStack, am, im));
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_SHOWCOMBAT, "Match: show combat panel", actShowCombat, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_SHOWCOMBAT, "Match: show combat panel", actShowCombat, am, im));
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_SHOWCONSOLE, "Match: show console panel", actShowConsole, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_SHOWCONSOLE, "Match: show console panel", actShowConsole, am, im));
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_SHOWPLAYERS, "Match: show players panel", actShowPlayers, am, im));
|
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_SHOWDEV, "Match: show dev panel", actShowDev, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_SHOWDEV, "Match: show dev panel", actShowDev, am, im));
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_CONCEDE, "Match: concede game", actConcede, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_CONCEDE, "Match: concede game", actConcede, am, im));
|
||||||
list.add(new Shortcut(FPref.SHORTCUT_ENDTURN, "Match: pass priority until EOT or next stack event", actEndTurn, am, im));
|
list.add(new Shortcut(FPref.SHORTCUT_ENDTURN, "Match: pass priority until EOT or next stack event", actEndTurn, am, im));
|
||||||
|
|||||||
@@ -85,6 +85,10 @@ public enum EDocID {
|
|||||||
REPORT_STACK (),
|
REPORT_STACK (),
|
||||||
REPORT_COMBAT (),
|
REPORT_COMBAT (),
|
||||||
REPORT_LOG (),
|
REPORT_LOG (),
|
||||||
|
|
||||||
|
// Player panel, deprecated, to be removed in a few months
|
||||||
|
// from now (2015-04-10) to allow users' match layouts to update
|
||||||
|
@Deprecated
|
||||||
REPORT_PLAYERS (),
|
REPORT_PLAYERS (),
|
||||||
|
|
||||||
DEV_MODE (),
|
DEV_MODE (),
|
||||||
@@ -110,25 +114,36 @@ public enum EDocID {
|
|||||||
HAND_6 (),
|
HAND_6 (),
|
||||||
HAND_7 (),
|
HAND_7 (),
|
||||||
|
|
||||||
// Command zones, use setDoc to register.
|
// Command zones, deprecated, to be removed in a few months
|
||||||
|
// from now (2015-04-10) to allow users' match layouts to update
|
||||||
|
@Deprecated
|
||||||
COMMAND_0 (),
|
COMMAND_0 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_1 (),
|
COMMAND_1 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_2 (),
|
COMMAND_2 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_3 (),
|
COMMAND_3 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_4 (),
|
COMMAND_4 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_5 (),
|
COMMAND_5 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_6 (),
|
COMMAND_6 (),
|
||||||
|
@Deprecated
|
||||||
COMMAND_7 ();
|
COMMAND_7 ();
|
||||||
|
|
||||||
public final static EDocID[] Commands = new EDocID[] {COMMAND_0, COMMAND_1, COMMAND_2, COMMAND_3, COMMAND_4, COMMAND_5, COMMAND_6, COMMAND_7};
|
|
||||||
public final static EDocID[] Fields = new EDocID[] {FIELD_0, FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5, FIELD_6, FIELD_7};
|
public final static EDocID[] Fields = new EDocID[] {FIELD_0, FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5, FIELD_6, FIELD_7};
|
||||||
public final static EDocID[] Hands = new EDocID[] {HAND_0, HAND_1, HAND_2, HAND_3, HAND_4, HAND_5, HAND_6, HAND_7};
|
public final static EDocID[] Hands = new EDocID[] {HAND_0, HAND_1, HAND_2, HAND_3, HAND_4, HAND_5, HAND_6, HAND_7};
|
||||||
static {
|
static {
|
||||||
for (int i = 0; i < 8; i++) EDocID.Fields[i].setDoc(new VEmptyDoc(EDocID.Fields[i]));
|
for (int i = 0; i < 8; i++) EDocID.Fields[i].setDoc(new VEmptyDoc(EDocID.Fields[i]));
|
||||||
for (int i = 0; i < 8; i++) EDocID.Commands[i].setDoc(new VEmptyDoc(EDocID.Commands[i]));
|
|
||||||
for (int i = 0; i < 8; i++) EDocID.Hands[i].setDoc(new VEmptyDoc(EDocID.Hands[i]));
|
for (int i = 0; i < 8; i++) EDocID.Hands[i].setDoc(new VEmptyDoc(EDocID.Hands[i]));
|
||||||
|
|
||||||
|
for (final EDocID deprecated : new EDocID[] {REPORT_PLAYERS, COMMAND_0, COMMAND_1, COMMAND_2, COMMAND_3, COMMAND_4, COMMAND_5, COMMAND_6, COMMAND_7}) {
|
||||||
|
deprecated.setDoc(new VEmptyDoc(deprecated));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public final static EDocID[] VarDocs = ObjectArrays.concat(ObjectArrays.concat(Commands, Fields, EDocID.class), Hands, EDocID.class);
|
public final static EDocID[] VarDocs = ObjectArrays.concat(Fields, Hands, EDocID.class);
|
||||||
|
|
||||||
// End enum declarations, start enum methods.
|
// End enum declarations, start enum methods.
|
||||||
private IVDoc<? extends ICDoc> vDoc;
|
private IVDoc<? extends ICDoc> vDoc;
|
||||||
|
|||||||
@@ -88,11 +88,9 @@ import forge.screens.match.controllers.CDetailPicture;
|
|||||||
import forge.screens.match.controllers.CDev;
|
import forge.screens.match.controllers.CDev;
|
||||||
import forge.screens.match.controllers.CDock;
|
import forge.screens.match.controllers.CDock;
|
||||||
import forge.screens.match.controllers.CLog;
|
import forge.screens.match.controllers.CLog;
|
||||||
import forge.screens.match.controllers.CPlayers;
|
|
||||||
import forge.screens.match.controllers.CPrompt;
|
import forge.screens.match.controllers.CPrompt;
|
||||||
import forge.screens.match.controllers.CStack;
|
import forge.screens.match.controllers.CStack;
|
||||||
import forge.screens.match.menus.CMatchUIMenus;
|
import forge.screens.match.menus.CMatchUIMenus;
|
||||||
import forge.screens.match.views.VCommand;
|
|
||||||
import forge.screens.match.views.VField;
|
import forge.screens.match.views.VField;
|
||||||
import forge.screens.match.views.VHand;
|
import forge.screens.match.views.VHand;
|
||||||
import forge.toolbox.FButton;
|
import forge.toolbox.FButton;
|
||||||
@@ -124,26 +122,26 @@ public final class CMatchUI
|
|||||||
implements ICDoc, IMenuProvider {
|
implements ICDoc, IMenuProvider {
|
||||||
|
|
||||||
private final FScreen screen;
|
private final FScreen screen;
|
||||||
|
private VMatchUI view;
|
||||||
|
private final CMatchUIMenus menus = new CMatchUIMenus(this);
|
||||||
|
private final Map<EDocID, IVDoc<? extends ICDoc>> myDocs;
|
||||||
|
private final TargetingOverlay targetingOverlay = new TargetingOverlay(this);
|
||||||
|
|
||||||
private FCollectionView<PlayerView> sortedPlayers;
|
private FCollectionView<PlayerView> sortedPlayers;
|
||||||
/** Players attached to this UI */
|
private final Map<String, String> avatarImages = new HashMap<String, String>();
|
||||||
private VMatchUI view;
|
|
||||||
private boolean allHands;
|
private boolean allHands;
|
||||||
private boolean showOverlay = true;
|
private boolean showOverlay = true;
|
||||||
|
|
||||||
private IVDoc<? extends ICDoc> selectedDocBeforeCombat;
|
private IVDoc<? extends ICDoc> selectedDocBeforeCombat;
|
||||||
public final Map<String, String> avatarImages = new HashMap<String, String>();
|
|
||||||
private final CAntes cAntes = new CAntes(this);
|
private final CAntes cAntes = new CAntes(this);
|
||||||
private final CCombat cCombat = new CCombat();
|
private final CCombat cCombat = new CCombat();
|
||||||
private final CDetailPicture cDetailPicture = new CDetailPicture(this);
|
private final CDetailPicture cDetailPicture = new CDetailPicture(this);
|
||||||
private final CDev cDev = new CDev(this);
|
private final CDev cDev = new CDev(this);
|
||||||
private final CDock cDock = new CDock(this);
|
private final CDock cDock = new CDock(this);
|
||||||
private final CLog cLog = new CLog(this);
|
private final CLog cLog = new CLog(this);
|
||||||
private final CPlayers cPlayers = new CPlayers(this);
|
|
||||||
private final CPrompt cPrompt = new CPrompt(this);
|
private final CPrompt cPrompt = new CPrompt(this);
|
||||||
private final CStack cStack = new CStack(this);
|
private final CStack cStack = new CStack(this);
|
||||||
private final TargetingOverlay targetingOverlay = new TargetingOverlay(this);
|
|
||||||
private final Map<EDocID, IVDoc<? extends ICDoc>> myDocs;
|
|
||||||
|
|
||||||
public CMatchUI() {
|
public CMatchUI() {
|
||||||
this.view = new VMatchUI(this);
|
this.view = new VMatchUI(this);
|
||||||
@@ -158,7 +156,6 @@ public final class CMatchUI
|
|||||||
this.myDocs.put(EDocID.REPORT_STACK, getCStack().getView());
|
this.myDocs.put(EDocID.REPORT_STACK, getCStack().getView());
|
||||||
this.myDocs.put(EDocID.REPORT_COMBAT, getCCombat().getView());
|
this.myDocs.put(EDocID.REPORT_COMBAT, getCCombat().getView());
|
||||||
this.myDocs.put(EDocID.REPORT_LOG, getCLog().getView());
|
this.myDocs.put(EDocID.REPORT_LOG, getCLog().getView());
|
||||||
this.myDocs.put(EDocID.REPORT_PLAYERS, getCPlayers().getView());
|
|
||||||
this.myDocs.put(EDocID.DEV_MODE, getCDev().getView());
|
this.myDocs.put(EDocID.DEV_MODE, getCDev().getView());
|
||||||
this.myDocs.put(EDocID.BUTTON_DOCK, getCDock().getView());;
|
this.myDocs.put(EDocID.BUTTON_DOCK, getCDock().getView());;
|
||||||
}
|
}
|
||||||
@@ -180,6 +177,10 @@ public final class CMatchUI
|
|||||||
return getGameView() != null;
|
return getGameView() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAvatarImage(final String playerName) {
|
||||||
|
return avatarImages.get(playerName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setGameView(final GameView gameView) {
|
public void setGameView(final GameView gameView) {
|
||||||
super.setGameView(gameView);
|
super.setGameView(gameView);
|
||||||
@@ -226,9 +227,6 @@ public final class CMatchUI
|
|||||||
public CLog getCLog() {
|
public CLog getCLog() {
|
||||||
return cLog;
|
return cLog;
|
||||||
}
|
}
|
||||||
public CPlayers getCPlayers() {
|
|
||||||
return cPlayers;
|
|
||||||
}
|
|
||||||
public CPrompt getCPrompt() {
|
public CPrompt getCPrompt() {
|
||||||
return cPrompt;
|
return cPrompt;
|
||||||
}
|
}
|
||||||
@@ -269,7 +267,6 @@ public final class CMatchUI
|
|||||||
final String[] indices = FModel.getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
final String[] indices = FModel.getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
||||||
|
|
||||||
final List<VField> fields = new ArrayList<VField>();
|
final List<VField> fields = new ArrayList<VField>();
|
||||||
final List<VCommand> commands = new ArrayList<VCommand>();
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (final PlayerView p : sortedPlayers) {
|
for (final PlayerView p : sortedPlayers) {
|
||||||
@@ -281,22 +278,13 @@ public final class CMatchUI
|
|||||||
fields.add(f);
|
fields.add(f);
|
||||||
myDocs.put(fieldDoc, f);
|
myDocs.put(fieldDoc, f);
|
||||||
|
|
||||||
final EDocID commandDoc = EDocID.Commands[i];
|
|
||||||
final VCommand c = new VCommand(this, commandDoc, p, mirror);
|
|
||||||
commands.add(c);
|
|
||||||
myDocs.put(commandDoc, c);
|
|
||||||
|
|
||||||
f.setAvatar(getPlayerAvatar(p, Integer.parseInt(indices[i > 2 ? 1 : 0])));
|
f.setAvatar(getPlayerAvatar(p, Integer.parseInt(indices[i > 2 ? 1 : 0])));
|
||||||
f.getLayoutControl().initialize();
|
f.getLayoutControl().initialize();
|
||||||
c.getLayoutControl().initialize();
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
view.setCommandViews(commands);
|
|
||||||
view.setFieldViews(fields);
|
view.setFieldViews(fields);
|
||||||
|
|
||||||
getCPlayers().getView().init(this.sortedPlayers);
|
|
||||||
|
|
||||||
initHandViews();
|
initHandViews();
|
||||||
registerDocs();
|
registerDocs();
|
||||||
}
|
}
|
||||||
@@ -338,14 +326,6 @@ public final class CMatchUI
|
|||||||
return idx < 0 ? null : getFieldViews().get(idx);
|
return idx < 0 ? null : getFieldViews().get(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<VCommand> getCommandViews() {
|
|
||||||
return view.getCommandViews();
|
|
||||||
}
|
|
||||||
public VCommand getCommandFor(final PlayerView p) {
|
|
||||||
final int idx = getPlayerIndex(p);
|
|
||||||
return idx < 0 ? null : getCommandViews().get(idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<VHand> getHandViews() {
|
public List<VHand> getHandViews() {
|
||||||
return view.getHands();
|
return view.getHands();
|
||||||
}
|
}
|
||||||
@@ -421,7 +401,7 @@ public final class CMatchUI
|
|||||||
for (final PlayerZoneUpdate update : zonesToUpdate) {
|
for (final PlayerZoneUpdate update : zonesToUpdate) {
|
||||||
final PlayerView owner = update.getPlayer();
|
final PlayerView owner = update.getPlayer();
|
||||||
|
|
||||||
boolean setupPlayZone = false, updateHand = false, updateCommand = false, updateAnte = false, updateZones = false, updateDetails = false;
|
boolean setupPlayZone = false, updateHand = false, updateAnte = false, updateZones = false;
|
||||||
for (final ZoneType zone : update.getZones()) {
|
for (final ZoneType zone : update.getZones()) {
|
||||||
switch (zone) {
|
switch (zone) {
|
||||||
case Battlefield:
|
case Battlefield:
|
||||||
@@ -432,15 +412,7 @@ public final class CMatchUI
|
|||||||
break;
|
break;
|
||||||
case Hand:
|
case Hand:
|
||||||
updateHand = true;
|
updateHand = true;
|
||||||
updateZones = true;
|
//$FALL-THROUGH$
|
||||||
updateDetails = true;
|
|
||||||
FloatingCardArea.refresh(owner, zone);
|
|
||||||
break;
|
|
||||||
case Command:
|
|
||||||
updateCommand = true;
|
|
||||||
updateZones = true;
|
|
||||||
FloatingCardArea.refresh(owner, zone);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
updateZones = true;
|
updateZones = true;
|
||||||
FloatingCardArea.refresh(owner, zone);
|
FloatingCardArea.refresh(owner, zone);
|
||||||
@@ -458,18 +430,12 @@ public final class CMatchUI
|
|||||||
vHand.getLayoutControl().updateHand();
|
vHand.getLayoutControl().updateHand();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (updateCommand) {
|
|
||||||
getCommandFor(owner).getTabletop().update();
|
|
||||||
}
|
|
||||||
if (updateAnte) {
|
if (updateAnte) {
|
||||||
cAntes.update();
|
cAntes.update();
|
||||||
}
|
}
|
||||||
if (updateZones) {
|
if (updateZones) {
|
||||||
vField.updateZones();
|
vField.updateZones();
|
||||||
}
|
}
|
||||||
if (updateDetails) {
|
|
||||||
vField.updateDetails();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,12 +478,6 @@ public final class CMatchUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Command:
|
|
||||||
final VCommand command = getCommandFor(c.getController());
|
|
||||||
if (command != null) {
|
|
||||||
command.getTabletop().updateCard(c, false);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -525,7 +485,7 @@ public final class CMatchUI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<JMenu> getMenus() {
|
public List<JMenu> getMenus() {
|
||||||
return new CMatchUIMenus(this).getMenus(cDev);
|
return menus.getMenus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -580,9 +540,6 @@ public final class CMatchUI
|
|||||||
for (final VField f : view.getFieldViews()) {
|
for (final VField f : view.getFieldViews()) {
|
||||||
panels.addAll(f.getTabletop().getCardPanels());
|
panels.addAll(f.getTabletop().getCardPanels());
|
||||||
}
|
}
|
||||||
for (final VCommand c : view.getCommandViews()) {
|
|
||||||
panels.addAll(c.getTabletop().getCardPanels());
|
|
||||||
}
|
|
||||||
return panels;
|
return panels;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,7 +607,7 @@ public final class CMatchUI
|
|||||||
public void disableOverlay() {
|
public void disableOverlay() {
|
||||||
showOverlay = false;
|
showOverlay = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enableOverlay() {
|
public void enableOverlay() {
|
||||||
showOverlay = true;
|
showOverlay = true;
|
||||||
@@ -934,34 +891,34 @@ public final class CMatchUI
|
|||||||
final List<VField> fieldViews = getFieldViews();
|
final List<VField> fieldViews = getFieldViews();
|
||||||
|
|
||||||
// AI field is at index [1]
|
// AI field is at index [1]
|
||||||
PhaseIndicator fvAi = fieldViews.get(1).getPhaseIndicator();
|
final PhaseIndicator fvAi = fieldViews.get(1).getPhaseIndicator();
|
||||||
prefs.setPref(FPref.PHASE_AI_UPKEEP, String.valueOf(fvAi.getLblUpkeep().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_UPKEEP, fvAi.getLblUpkeep().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_DRAW, String.valueOf(fvAi.getLblDraw().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_DRAW, fvAi.getLblDraw().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_MAIN1, String.valueOf(fvAi.getLblMain1().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_MAIN1, fvAi.getLblMain1().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_BEGINCOMBAT, String.valueOf(fvAi.getLblBeginCombat().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_BEGINCOMBAT, fvAi.getLblBeginCombat().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_DECLAREATTACKERS, String.valueOf(fvAi.getLblDeclareAttackers().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_DECLAREATTACKERS, fvAi.getLblDeclareAttackers().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_DECLAREBLOCKERS, String.valueOf(fvAi.getLblDeclareBlockers().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_DECLAREBLOCKERS, fvAi.getLblDeclareBlockers().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_FIRSTSTRIKE, String.valueOf(fvAi.getLblFirstStrike().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_FIRSTSTRIKE, fvAi.getLblFirstStrike().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_COMBATDAMAGE, String.valueOf(fvAi.getLblCombatDamage().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_COMBATDAMAGE, fvAi.getLblCombatDamage().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_ENDCOMBAT, String.valueOf(fvAi.getLblEndCombat().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_ENDCOMBAT, fvAi.getLblEndCombat().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_MAIN2, String.valueOf(fvAi.getLblMain2().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_MAIN2, fvAi.getLblMain2().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_EOT, String.valueOf(fvAi.getLblEndTurn().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_EOT, fvAi.getLblEndTurn().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_AI_CLEANUP, String.valueOf(fvAi.getLblCleanup().getEnabled()));
|
prefs.setPref(FPref.PHASE_AI_CLEANUP, fvAi.getLblCleanup().getEnabled());
|
||||||
|
|
||||||
// Human field is at index [0]
|
// Human field is at index [0]
|
||||||
PhaseIndicator fvHuman = fieldViews.get(0).getPhaseIndicator();
|
final PhaseIndicator fvHuman = fieldViews.get(0).getPhaseIndicator();
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_UPKEEP, String.valueOf(fvHuman.getLblUpkeep().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_UPKEEP, fvHuman.getLblUpkeep().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_DRAW, String.valueOf(fvHuman.getLblDraw().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_DRAW, fvHuman.getLblDraw().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_MAIN1, String.valueOf(fvHuman.getLblMain1().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_MAIN1, fvHuman.getLblMain1().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_BEGINCOMBAT, String.valueOf(fvHuman.getLblBeginCombat().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_BEGINCOMBAT, fvHuman.getLblBeginCombat().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_DECLAREATTACKERS, String.valueOf(fvHuman.getLblDeclareAttackers().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_DECLAREATTACKERS, fvHuman.getLblDeclareAttackers().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_DECLAREBLOCKERS, String.valueOf(fvHuman.getLblDeclareBlockers().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_DECLAREBLOCKERS, fvHuman.getLblDeclareBlockers().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_FIRSTSTRIKE, String.valueOf(fvHuman.getLblFirstStrike().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_FIRSTSTRIKE, fvHuman.getLblFirstStrike().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, String.valueOf(fvHuman.getLblCombatDamage().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, fvHuman.getLblCombatDamage().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, String.valueOf(fvHuman.getLblEndCombat().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, fvHuman.getLblEndCombat().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_MAIN2, String.valueOf(fvHuman.getLblMain2().getEnabled()));
|
prefs.setPref(FPref.PHASE_HUMAN_MAIN2, fvHuman.getLblMain2().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_EOT, fvHuman.getLblEndTurn().getEnabled());
|
prefs.setPref(FPref.PHASE_HUMAN_EOT, fvHuman.getLblEndTurn().getEnabled());
|
||||||
prefs.setPref(FPref.PHASE_HUMAN_CLEANUP, fvHuman.getLblCleanup().getEnabled());
|
prefs.setPref(FPref.PHASE_HUMAN_CLEANUP, fvHuman.getLblCleanup().getEnabled());
|
||||||
|
|
||||||
prefs.save();
|
prefs.save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ public class VAssignDamage {
|
|||||||
fakeCard = (CardView)defender;
|
fakeCard = (CardView)defender;
|
||||||
} else if (defender instanceof PlayerView) {
|
} else if (defender instanceof PlayerView) {
|
||||||
final PlayerView p = (PlayerView)defender;
|
final PlayerView p = (PlayerView)defender;
|
||||||
fakeCard = new CardView(-1, null, defender.toString(), p, matchUI.avatarImages.get(p.getLobbyPlayerName()));
|
fakeCard = new CardView(-1, null, defender.toString(), p, matchUI.getAvatarImage(p.getLobbyPlayerName()));
|
||||||
}
|
}
|
||||||
addPanelForDefender(pnlDefenders, fakeCard);
|
addPanelForDefender(pnlDefenders, fakeCard);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import forge.gui.framework.IVTopLevelUI;
|
|||||||
import forge.gui.framework.SRearrangingUtil;
|
import forge.gui.framework.SRearrangingUtil;
|
||||||
import forge.gui.framework.VEmptyDoc;
|
import forge.gui.framework.VEmptyDoc;
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.screens.match.views.VCommand;
|
|
||||||
import forge.screens.match.views.VDev;
|
import forge.screens.match.views.VDev;
|
||||||
import forge.screens.match.views.VField;
|
import forge.screens.match.views.VField;
|
||||||
import forge.screens.match.views.VHand;
|
import forge.screens.match.views.VHand;
|
||||||
@@ -30,7 +29,6 @@ import forge.view.FView;
|
|||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
*/
|
*/
|
||||||
public class VMatchUI implements IVTopLevelUI {
|
public class VMatchUI implements IVTopLevelUI {
|
||||||
private List<VCommand> lstCommands = new ArrayList<VCommand>();
|
|
||||||
private List<VField> lstFields = new ArrayList<VField>();
|
private List<VField> lstFields = new ArrayList<VField>();
|
||||||
private List<VHand> lstHands = new ArrayList<VHand>();
|
private List<VHand> lstHands = new ArrayList<VHand>();
|
||||||
|
|
||||||
@@ -81,15 +79,6 @@ public class VMatchUI implements IVTopLevelUI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add extra players alternatively to existing user/AI field panels.
|
|
||||||
for (int i = 2; i < lstCommands.size(); i++) {
|
|
||||||
// If already in layout, no need to add again.
|
|
||||||
VCommand cmdView = lstCommands.get(i);
|
|
||||||
if (cmdView.getParentCell() == null) {
|
|
||||||
lstCommands.get(i % 2).getParentCell().addDoc(cmdView);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine (an) existing hand panel
|
// Determine (an) existing hand panel
|
||||||
DragCell cellWithHands = null;
|
DragCell cellWithHands = null;
|
||||||
for (final EDocID handId : EDocID.Hands) {
|
for (final EDocID handId : EDocID.Hands) {
|
||||||
@@ -127,11 +116,6 @@ public class VMatchUI implements IVTopLevelUI {
|
|||||||
fieldDoc.getDoc().getParentCell().addDoc(myVHand);
|
fieldDoc.getDoc().getParentCell().addDoc(myVHand);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final EDocID commandDoc = EDocID.Commands[iHandId];
|
|
||||||
if (commandDoc.getDoc().getParentCell() != null) {
|
|
||||||
commandDoc.getDoc().getParentCell().addDoc(myVHand);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
cellWithHands.addDoc(myVHand);
|
cellWithHands.addDoc(myVHand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,14 +159,6 @@ public class VMatchUI implements IVTopLevelUI {
|
|||||||
return getControl().getCPrompt().getView().getBtnOK();
|
return getControl().getCPrompt().getView().getBtnOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<VCommand> getCommandViews() {
|
|
||||||
return lstCommands;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCommandViews(final List<VCommand> lstCommands0) {
|
|
||||||
this.lstCommands = lstCommands0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<VHand> getHands() {
|
public List<VHand> getHands() {
|
||||||
return lstHands;
|
return lstHands;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ public class ViewWinLose implements IWinLoseView<FButton> {
|
|||||||
if (!FModel.getGauntletMini().isGauntletDraft()) {
|
if (!FModel.getGauntletMini().isGauntletDraft()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//$FALL-THROUGH$
|
||||||
case Sealed:
|
case Sealed:
|
||||||
control = new LimitedWinLose(this, game0, matchUI);
|
control = new LimitedWinLose(this, game0, matchUI);
|
||||||
break;
|
break;
|
||||||
@@ -184,7 +185,7 @@ public class ViewWinLose implements IWinLoseView<FButton> {
|
|||||||
pnlLeft.add(pnlLog, "w 100%!");
|
pnlLeft.add(pnlLog, "w 100%!");
|
||||||
|
|
||||||
lblTitle.setText(composeTitle(game0));
|
lblTitle.setText(composeTitle(game0));
|
||||||
|
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.screens.match.controllers;
|
|
||||||
|
|
||||||
import forge.UiCommand;
|
|
||||||
import forge.game.player.PlayerView;
|
|
||||||
import forge.gui.framework.ICDoc;
|
|
||||||
import forge.screens.match.views.VCommand;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls Swing components of a player's command instance.
|
|
||||||
*/
|
|
||||||
public class CCommand implements ICDoc {
|
|
||||||
private final PlayerView player;
|
|
||||||
private final VCommand view;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls Swing components of a player's command instance.
|
|
||||||
*
|
|
||||||
* @param player2   {@link forge.game.player.Player}
|
|
||||||
* @param v0   {@link forge.screens.match.views.VCommand}
|
|
||||||
*/
|
|
||||||
public CCommand(final PlayerView player2, final VCommand v0) {
|
|
||||||
this.player = player2;
|
|
||||||
this.view = v0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link forge.game.player.Player} */
|
|
||||||
public PlayerView getPlayer() {
|
|
||||||
return this.player;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link forge.screens.match.views.VField} */
|
|
||||||
public VCommand getView() {
|
|
||||||
return this.view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public UiCommand getCommandOnSelect() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} // End class CCommand
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
package forge.screens.match.controllers;
|
|
||||||
|
|
||||||
import forge.UiCommand;
|
|
||||||
import forge.gui.framework.ICDoc;
|
|
||||||
import forge.screens.match.CMatchUI;
|
|
||||||
import forge.screens.match.views.VPlayers;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the combat panel in the match UI.
|
|
||||||
*
|
|
||||||
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class CPlayers implements ICDoc {
|
|
||||||
|
|
||||||
private final CMatchUI matchUI;
|
|
||||||
private final VPlayers view;
|
|
||||||
public CPlayers(final CMatchUI matchUI) {
|
|
||||||
this.matchUI = matchUI;
|
|
||||||
this.view = new VPlayers(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final CMatchUI getMatchUI() {
|
|
||||||
return matchUI;
|
|
||||||
}
|
|
||||||
public final VPlayers getView() {
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public UiCommand getCommandOnSelect() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.ICDoc#initialize()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void initialize() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.ICDoc#update()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
view.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package forge.screens.match.menus;
|
package forge.screens.match.menus;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.screens.match.CMatchUI;
|
import forge.screens.match.CMatchUI;
|
||||||
import forge.screens.match.controllers.CDev;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the menus associated with the Game screen.
|
* Gets the menus associated with the Game screen.
|
||||||
@@ -15,18 +15,16 @@ import forge.screens.match.controllers.CDev;
|
|||||||
*/
|
*/
|
||||||
public class CMatchUIMenus {
|
public class CMatchUIMenus {
|
||||||
|
|
||||||
private final boolean SHOW_ICONS = false;
|
|
||||||
|
|
||||||
private final CMatchUI matchUI;
|
private final CMatchUI matchUI;
|
||||||
public CMatchUIMenus(final CMatchUI matchUI) {
|
public CMatchUIMenus(final CMatchUI matchUI) {
|
||||||
this.matchUI = matchUI;
|
this.matchUI = matchUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<JMenu> getMenus(final CDev devController) {
|
public List<JMenu> getMenus() {
|
||||||
final List<JMenu> menus = new ArrayList<JMenu>();
|
final List<JMenu> menus = Lists.newArrayListWithCapacity(2);
|
||||||
menus.add(new GameMenu(matchUI).getMenu(SHOW_ICONS));
|
menus.add(new GameMenu(matchUI).getMenu());
|
||||||
if (ForgePreferences.DEV_MODE) {
|
if (ForgePreferences.DEV_MODE) {
|
||||||
menus.add(new DevModeMenu(devController).getMenu());
|
menus.add(new DevModeMenu(matchUI.getCDev()).getMenu());
|
||||||
}
|
}
|
||||||
return menus;
|
return menus;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public final class CardOverlaysMenu {
|
|||||||
private static ForgePreferences prefs = FModel.getPreferences();
|
private static ForgePreferences prefs = FModel.getPreferences();
|
||||||
private static boolean showOverlays = prefs.getPrefBoolean(FPref.UI_SHOW_CARD_OVERLAYS);
|
private static boolean showOverlays = prefs.getPrefBoolean(FPref.UI_SHOW_CARD_OVERLAYS);
|
||||||
|
|
||||||
public JMenu getMenu(final boolean showMenuIcons) {
|
public JMenu getMenu() {
|
||||||
JMenu menu = new JMenu("Card Overlays");
|
JMenu menu = new JMenu("Card Overlays");
|
||||||
menu.add(getMenuItem_ShowOverlays());
|
menu.add(getMenuItem_ShowOverlays());
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ public final class GameMenu {
|
|||||||
private static ForgePreferences prefs = FModel.getPreferences();
|
private static ForgePreferences prefs = FModel.getPreferences();
|
||||||
private static boolean showIcons;
|
private static boolean showIcons;
|
||||||
|
|
||||||
public JMenu getMenu(final boolean showMenuIcons) {
|
public JMenu getMenu() {
|
||||||
JMenu menu = new JMenu("Game");
|
final JMenu menu = new JMenu("Game");
|
||||||
menu.setMnemonic(KeyEvent.VK_G);
|
menu.setMnemonic(KeyEvent.VK_G);
|
||||||
menu.add(getMenuItem_Undo());
|
menu.add(getMenuItem_Undo());
|
||||||
menu.add(getMenuItem_Concede());
|
menu.add(getMenuItem_Concede());
|
||||||
@@ -45,7 +45,7 @@ public final class GameMenu {
|
|||||||
menu.add(getMenuItem_AlphaStrike());
|
menu.add(getMenuItem_AlphaStrike());
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add(getMenuItem_TargetingArcs());
|
menu.add(getMenuItem_TargetingArcs());
|
||||||
menu.add(new CardOverlaysMenu(matchUI).getMenu(showMenuIcons));
|
menu.add(new CardOverlaysMenu(matchUI).getMenu());
|
||||||
menu.add(getMenuItem_AutoYields());
|
menu.add(getMenuItem_AutoYields());
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add(getMenuItem_ViewDeckList());
|
menu.add(getMenuItem_ViewDeckList());
|
||||||
|
|||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.screens.match.views;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
import forge.game.player.PlayerView;
|
|
||||||
import forge.game.zone.ZoneType;
|
|
||||||
import forge.gui.framework.DragCell;
|
|
||||||
import forge.gui.framework.DragTab;
|
|
||||||
import forge.gui.framework.EDocID;
|
|
||||||
import forge.gui.framework.IVDoc;
|
|
||||||
import forge.screens.match.CMatchUI;
|
|
||||||
import forge.screens.match.controllers.CCommand;
|
|
||||||
import forge.toolbox.FScrollPane;
|
|
||||||
import forge.toolbox.FSkin;
|
|
||||||
import forge.view.arcane.PlayArea;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Assembles Swing components of a player command instance.
|
|
||||||
*
|
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
|
||||||
*/
|
|
||||||
public class VCommand implements IVDoc<CCommand> {
|
|
||||||
// Fields used with interface IVDoc
|
|
||||||
private final CCommand control;
|
|
||||||
private DragCell parentCell;
|
|
||||||
private final EDocID docID;
|
|
||||||
private final DragTab tab = new DragTab("Command");
|
|
||||||
|
|
||||||
// Other fields
|
|
||||||
private PlayerView player = null;
|
|
||||||
|
|
||||||
// Top-level containers
|
|
||||||
private final FScrollPane scroller = new FScrollPane(false);
|
|
||||||
private final PlayArea tabletop;
|
|
||||||
|
|
||||||
//========= Constructor
|
|
||||||
/**
|
|
||||||
* Assembles Swing components of a player command instance.
|
|
||||||
*
|
|
||||||
* @param p   {@link forge.game.player.Player}
|
|
||||||
* @param id0   {@link forge.gui.framework.EDocID}
|
|
||||||
*/
|
|
||||||
public VCommand(final CMatchUI matchUI, final EDocID id0, final PlayerView p, final boolean mirror) {
|
|
||||||
this.docID = id0;
|
|
||||||
|
|
||||||
this.player = p;
|
|
||||||
if (p != null) { tab.setText(p.getName() + " Command"); }
|
|
||||||
else { tab.setText("NO PLAYER FOR " + docID.toString()); }
|
|
||||||
|
|
||||||
// TODO player is hard-coded into tabletop...should be dynamic
|
|
||||||
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
|
||||||
tabletop = new PlayArea(matchUI, scroller, mirror, player, ZoneType.Command);
|
|
||||||
|
|
||||||
control = new CCommand(player, this);
|
|
||||||
|
|
||||||
tabletop.setBorder(new FSkin.MatteSkinBorder(0, 1, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)));
|
|
||||||
tabletop.setOpaque(false);
|
|
||||||
|
|
||||||
scroller.setViewportView(this.tabletop);
|
|
||||||
}
|
|
||||||
|
|
||||||
//========= Overridden methods
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#populate()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void populate() {
|
|
||||||
final JPanel pnl = parentCell.getBody();
|
|
||||||
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
|
||||||
|
|
||||||
pnl.add(scroller, "w 85%!, h 100%!, span 1 2, wrap");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getDocumentID()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public EDocID getDocumentID() {
|
|
||||||
return docID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getTabLabel()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragTab getTabLabel() {
|
|
||||||
return tab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public CCommand getLayoutControl() {
|
|
||||||
return control;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#setParentCell()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setParentCell(final DragCell cell0) {
|
|
||||||
this.parentCell = cell0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getParentCell()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragCell getParentCell() {
|
|
||||||
return this.parentCell;
|
|
||||||
}
|
|
||||||
|
|
||||||
//========= Retrieval methods
|
|
||||||
/**
|
|
||||||
* Gets the player currently associated with this command.
|
|
||||||
* @return {@link forge.game.player.Player}
|
|
||||||
*/
|
|
||||||
public PlayerView getPlayer() {
|
|
||||||
return this.player;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the tabletop.
|
|
||||||
*
|
|
||||||
* @return PlayArea where cards for this command are in play
|
|
||||||
*/
|
|
||||||
public PlayArea getTabletop() {
|
|
||||||
return this.tabletop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -228,8 +228,6 @@ public class VField implements IVDoc<CField> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateDetails() {
|
public void updateDetails() {
|
||||||
control.getMatchUI().getCPlayers().update();
|
|
||||||
|
|
||||||
// Update life total
|
// Update life total
|
||||||
final int life = player.getLife();
|
final int life = player.getLife();
|
||||||
lblLife.setText(String.valueOf(life));
|
lblLife.setText(String.valueOf(life));
|
||||||
|
|||||||
@@ -1,200 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Nate
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.screens.match.views;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.ScrollPaneConstants;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
import forge.game.card.CardView;
|
|
||||||
import forge.game.player.PlayerView;
|
|
||||||
import forge.gui.framework.DragCell;
|
|
||||||
import forge.gui.framework.DragTab;
|
|
||||||
import forge.gui.framework.EDocID;
|
|
||||||
import forge.gui.framework.IVDoc;
|
|
||||||
import forge.model.FModel;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
import forge.screens.match.controllers.CPlayers;
|
|
||||||
import forge.toolbox.FScrollPanel;
|
|
||||||
import forge.toolbox.FSkin;
|
|
||||||
import forge.toolbox.FSkin.SkinnedLabel;
|
|
||||||
import forge.util.FCollectionView;
|
|
||||||
import forge.util.Lang;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Assembles Swing components of players report.
|
|
||||||
*
|
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
|
||||||
*/
|
|
||||||
public class VPlayers implements IVDoc<CPlayers> {
|
|
||||||
|
|
||||||
// Fields used with interface IVDoc
|
|
||||||
private DragCell parentCell;
|
|
||||||
private final DragTab tab = new DragTab("Players");
|
|
||||||
private final FScrollPanel scroller = new FScrollPanel(new MigLayout("insets 0, gap 0, wrap"), false,
|
|
||||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
|
|
||||||
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
|
||||||
|
|
||||||
// Other fields
|
|
||||||
private Map<PlayerView, JLabel[]> infoLBLs;
|
|
||||||
|
|
||||||
private final CPlayers controller;
|
|
||||||
|
|
||||||
public VPlayers(final CPlayers controller) {
|
|
||||||
this.controller = controller;
|
|
||||||
}
|
|
||||||
|
|
||||||
//========= Overridden methods
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#populate()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void populate() {
|
|
||||||
scroller.removeAll();
|
|
||||||
final String constraints = "w 97%!, gapleft 2%, gapbottom 1%";
|
|
||||||
for (final Entry<PlayerView, JLabel[]> p : infoLBLs.entrySet()) {
|
|
||||||
for (JLabel label : p.getValue()) {
|
|
||||||
scroller.add(label, constraints);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0"));
|
|
||||||
parentCell.getBody().add(scroller, "w 100%, h 100%!");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void init(final Iterable<PlayerView> players) {
|
|
||||||
this.infoLBLs = new HashMap<>();
|
|
||||||
for (final PlayerView p : players) {
|
|
||||||
// Create and store labels detailing various non-critical player info.
|
|
||||||
final InfoLabel name = new InfoLabel();
|
|
||||||
final InfoLabel life = new InfoLabel();
|
|
||||||
final InfoLabel hand = new InfoLabel();
|
|
||||||
final InfoLabel draw = new InfoLabel();
|
|
||||||
final InfoLabel prevention = new InfoLabel();
|
|
||||||
final InfoLabel keywords = new InfoLabel();
|
|
||||||
final InfoLabel antes = new InfoLabel();
|
|
||||||
final InfoLabel cmd = new InfoLabel();
|
|
||||||
this.infoLBLs.put(p, new JLabel[] { name, life, hand, draw, prevention, keywords, antes, cmd });
|
|
||||||
|
|
||||||
// Set border on bottom label, and larger font on player name
|
|
||||||
name.setBorder(new FSkin.MatteSkinBorder(1, 0, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)));
|
|
||||||
name.setText(p.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#setParentCell()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setParentCell(final DragCell cell0) {
|
|
||||||
this.parentCell = cell0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getParentCell()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragCell getParentCell() {
|
|
||||||
return this.parentCell;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getDocumentID()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public EDocID getDocumentID() {
|
|
||||||
return EDocID.REPORT_PLAYERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getTabLabel()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragTab getTabLabel() {
|
|
||||||
return tab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public CPlayers getLayoutControl() {
|
|
||||||
return controller;
|
|
||||||
}
|
|
||||||
|
|
||||||
//========== Observer update methods
|
|
||||||
|
|
||||||
/** @param game {@link forge.game.player.Player} */
|
|
||||||
public void update() {
|
|
||||||
// No need to update if this panel isn't showing
|
|
||||||
if (parentCell == null || !this.equals(parentCell.getSelected())) { return; }
|
|
||||||
boolean isCommander = controller.getMatchUI().getGameView().isCommander();
|
|
||||||
|
|
||||||
for(final Entry<PlayerView, JLabel[]> rr : infoLBLs.entrySet()) {
|
|
||||||
PlayerView p0 = rr.getKey();
|
|
||||||
final JLabel[] temp = rr.getValue();
|
|
||||||
temp[1].setText("Life: " + String.valueOf(p0.getLife()) + " | Poison counters: "
|
|
||||||
+ String.valueOf(p0.getPoisonCounters()));
|
|
||||||
temp[2].setText("Maximum hand size: " + String.valueOf(p0.getMaxHandSize()));
|
|
||||||
temp[3].setText("Cards drawn this turn: " + String.valueOf(p0.getNumDrawnThisTurn()));
|
|
||||||
temp[4].setText("Damage Prevention: " + String.valueOf(p0.getPreventNextDamage()));
|
|
||||||
List<String> keywords = Lists.newArrayList(p0.getKeywords());
|
|
||||||
while (keywords.indexOf("CanSeeOpponentsFaceDownCards") != -1) {
|
|
||||||
keywords.remove("CanSeeOpponentsFaceDownCards");
|
|
||||||
}
|
|
||||||
if (!keywords.isEmpty()) {
|
|
||||||
temp[5].setText(keywords.toString());
|
|
||||||
} else {
|
|
||||||
temp[5].setText("");
|
|
||||||
}
|
|
||||||
if (FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE)) {
|
|
||||||
final FCollectionView<CardView> list = p0.getAnte();
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("Ante'd: ");
|
|
||||||
if (list == null || list.isEmpty()) {
|
|
||||||
sb.append("none");
|
|
||||||
} else {
|
|
||||||
sb.append(Lang.joinHomogenous(list));
|
|
||||||
}
|
|
||||||
temp[6].setText(sb.toString());
|
|
||||||
}
|
|
||||||
if (isCommander) {
|
|
||||||
temp[7].setText(p0.getCommanderInfo());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//========= Custom class handling
|
|
||||||
|
|
||||||
/** A quick JLabel for info in "players" panel, to consolidate styling. */
|
|
||||||
@SuppressWarnings("serial")
|
|
||||||
private class InfoLabel extends SkinnedLabel {
|
|
||||||
public InfoLabel() {
|
|
||||||
super();
|
|
||||||
this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -51,7 +51,8 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
** Add a DocumentLister before the undo is done so we can position
|
** Add a DocumentLister before the undo is done so we can position
|
||||||
** the Caret correctly as each edit is undone.
|
** the Caret correctly as each edit is undone.
|
||||||
*/
|
*/
|
||||||
public void undo() {
|
@Override
|
||||||
|
public synchronized void undo() {
|
||||||
if (canUndo()) {
|
if (canUndo()) {
|
||||||
textComponent.getDocument().addDocumentListener(this);
|
textComponent.getDocument().addDocumentListener(this);
|
||||||
super.undo();
|
super.undo();
|
||||||
@@ -63,7 +64,8 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
** Add a DocumentLister before the redo is done so we can position
|
** Add a DocumentLister before the redo is done so we can position
|
||||||
** the Caret correctly as each edit is redone.
|
** the Caret correctly as each edit is redone.
|
||||||
*/
|
*/
|
||||||
public void redo() {
|
@Override
|
||||||
|
public synchronized void redo() {
|
||||||
if (canRedo()) {
|
if (canRedo()) {
|
||||||
textComponent.getDocument().addDocumentListener(this);
|
textComponent.getDocument().addDocumentListener(this);
|
||||||
super.redo();
|
super.redo();
|
||||||
@@ -75,6 +77,7 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
** Whenever an UndoableEdit happens the edit will either be absorbed
|
** Whenever an UndoableEdit happens the edit will either be absorbed
|
||||||
** by the current compound edit or a new compound edit will be started
|
** by the current compound edit or a new compound edit will be started
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void undoableEditHappened(UndoableEditEvent e) {
|
public void undoableEditHappened(UndoableEditEvent e) {
|
||||||
// Start a new compound edit
|
// Start a new compound edit
|
||||||
if (compoundEdit == null) {
|
if (compoundEdit == null) {
|
||||||
@@ -153,25 +156,30 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
* Updates to the Document as a result of Undo/Redo will cause the
|
* Updates to the Document as a result of Undo/Redo will cause the
|
||||||
* Caret to be repositioned
|
* Caret to be repositioned
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void insertUpdate(final DocumentEvent e) {
|
public void insertUpdate(final DocumentEvent e) {
|
||||||
int offset = e.getOffset() + e.getLength();
|
int offset = e.getOffset() + e.getLength();
|
||||||
offset = Math.min(offset, textComponent.getDocument().getLength());
|
offset = Math.min(offset, textComponent.getDocument().getLength());
|
||||||
textComponent.setCaretPosition(offset);
|
textComponent.setCaretPosition(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void removeUpdate(DocumentEvent e) {
|
public void removeUpdate(DocumentEvent e) {
|
||||||
textComponent.setCaretPosition(e.getOffset());
|
textComponent.setCaretPosition(e.getOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void changedUpdate(DocumentEvent e) {}
|
public void changedUpdate(DocumentEvent e) {}
|
||||||
|
|
||||||
private class MyCompoundEdit extends CompoundEdit {
|
private class MyCompoundEdit extends CompoundEdit {
|
||||||
|
@Override
|
||||||
public boolean isInProgress() {
|
public boolean isInProgress() {
|
||||||
// in order for the canUndo() and canRedo() methods to work
|
// in order for the canUndo() and canRedo() methods to work
|
||||||
// assume that the compound edit is never in progress
|
// assume that the compound edit is never in progress
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void undo() throws CannotUndoException {
|
public void undo() throws CannotUndoException {
|
||||||
// End the edit so future edits don't get absorbed by this edit
|
// End the edit so future edits don't get absorbed by this edit
|
||||||
if (compoundEdit != null) {
|
if (compoundEdit != null) {
|
||||||
@@ -197,6 +205,7 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
setEnabled(false);
|
setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
try {
|
||||||
undoManager.undo();
|
undoManager.undo();
|
||||||
@@ -225,6 +234,7 @@ public class FUndoManager extends UndoManager implements DocumentListener {
|
|||||||
setEnabled(false);
|
setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
try {
|
||||||
undoManager.redo();
|
undoManager.redo();
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ public class FFrame extends SkinnedFrame implements ITitleBarOwner {
|
|||||||
|
|
||||||
//override normal state behavior
|
//override normal state behavior
|
||||||
@Override
|
@Override
|
||||||
public void setState(int state) {
|
public synchronized void setState(final int state) {
|
||||||
setMinimized(state == Frame.ICONIFIED);
|
setMinimized(state == Frame.ICONIFIED);
|
||||||
if (state == Frame.MAXIMIZED_BOTH) {
|
if (state == Frame.MAXIMIZED_BOTH) {
|
||||||
this.setMaximized(true);
|
this.setMaximized(true);
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ import forge.view.arcane.CardPanel;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Abstract Animation class.
|
* Animation class. Provides useful static methods for animating movement of
|
||||||
|
* cards.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
@@ -39,40 +40,41 @@ public abstract class Animation {
|
|||||||
private static final long TARGET_MILLIS_PER_FRAME = 30;
|
private static final long TARGET_MILLIS_PER_FRAME = 30;
|
||||||
|
|
||||||
/** Constant <code>timer</code>. */
|
/** Constant <code>timer</code>. */
|
||||||
private static Timer timer = new Timer("Animation", true);
|
private static final Timer timer = new Timer("Animation", true);
|
||||||
|
|
||||||
private TimerTask timerTask;
|
private final long delay;
|
||||||
|
|
||||||
|
private final TimerTask timerTask;
|
||||||
private FrameTimer frameTimer;
|
private FrameTimer frameTimer;
|
||||||
private long elapsed;
|
private long elapsed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Constructor for Animation, with a default delay of zero.
|
||||||
* Constructor for Animation.
|
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param duration
|
* @param duration
|
||||||
* a long.
|
* the duration, in milliseconds, for which the animation will
|
||||||
|
* run.
|
||||||
*/
|
*/
|
||||||
public Animation(final long duration) {
|
private Animation(final long duration) {
|
||||||
this(duration, 0);
|
this(duration, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
|
||||||
* Constructor for Animation.
|
* Constructor for Animation.
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param duration
|
* @param duration
|
||||||
* a long.
|
* the duration, in milliseconds, for which the animation will
|
||||||
|
* run.
|
||||||
* @param delay
|
* @param delay
|
||||||
* a long.
|
* the delay, in milliseconds, between subsequent
|
||||||
|
* {@link #update(float)} calls while the animation is running.
|
||||||
*/
|
*/
|
||||||
public Animation(final long duration, final long delay) {
|
private Animation(final long duration, final long delay) {
|
||||||
|
this.delay = delay;
|
||||||
timerTask = new TimerTask() {
|
timerTask = new TimerTask() {
|
||||||
@Override
|
@Override public final void run() {
|
||||||
public void run() {
|
|
||||||
if (frameTimer == null) {
|
if (frameTimer == null) {
|
||||||
start();
|
onStart();
|
||||||
frameTimer = new FrameTimer();
|
frameTimer = new FrameTimer();
|
||||||
}
|
}
|
||||||
elapsed += frameTimer.getTimeSinceLastFrame();
|
elapsed += frameTimer.getTimeSinceLastFrame();
|
||||||
@@ -82,17 +84,21 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
update(elapsed / (float) duration);
|
update(elapsed / (float) duration);
|
||||||
if (elapsed == duration) {
|
if (elapsed == duration) {
|
||||||
end();
|
onEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the animation.
|
||||||
|
*/
|
||||||
|
protected final void run() {
|
||||||
timer.scheduleAtFixedRate(timerTask, delay, TARGET_MILLIS_PER_FRAME);
|
timer.scheduleAtFixedRate(timerTask, delay, TARGET_MILLIS_PER_FRAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Called every {@link #delay} ms while the animation is running.
|
||||||
* update.
|
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param percentage
|
* @param percentage
|
||||||
* a float.
|
* a float.
|
||||||
@@ -100,29 +106,23 @@ public abstract class Animation {
|
|||||||
protected abstract void update(float percentage);
|
protected abstract void update(float percentage);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Cancel the animation.
|
||||||
* cancel.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
protected final void cancel() {
|
protected final void cancel() {
|
||||||
timerTask.cancel();
|
timerTask.cancel();
|
||||||
end();
|
onEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Executed when the animation starts.
|
||||||
* start.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
protected void start() {
|
protected void onStart() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Executed when the animation ends.
|
||||||
* end.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
protected void end() {
|
protected void onEnd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,7 +133,7 @@ public abstract class Animation {
|
|||||||
* @param runnable
|
* @param runnable
|
||||||
* a {@link java.lang.Runnable} object.
|
* a {@link java.lang.Runnable} object.
|
||||||
*/
|
*/
|
||||||
public static void invokeLater(final Runnable runnable) {
|
private static void invokeLater(final Runnable runnable) {
|
||||||
EventQueue.invokeLater(runnable);
|
EventQueue.invokeLater(runnable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ public abstract class Animation {
|
|||||||
* Uses averaging of the time between the past few frames to provide smooth
|
* Uses averaging of the time between the past few frames to provide smooth
|
||||||
* animation.
|
* animation.
|
||||||
*/
|
*/
|
||||||
private class FrameTimer {
|
private static final class FrameTimer {
|
||||||
private static final int SAMPLES = 6;
|
private static final int SAMPLES = 6;
|
||||||
private static final long MAX_FRAME = 100; // Max time for one frame, to
|
private static final long MAX_FRAME = 100; // Max time for one frame, to
|
||||||
// weed out spikes.
|
// weed out spikes.
|
||||||
@@ -194,7 +194,7 @@ public abstract class Animation {
|
|||||||
public static void tapCardToggle(final CardPanel panel) {
|
public static void tapCardToggle(final CardPanel panel) {
|
||||||
new Animation(200) {
|
new Animation(200) {
|
||||||
@Override
|
@Override
|
||||||
protected void start() {
|
protected void onStart() {
|
||||||
panel.setTapped(!panel.isTapped());
|
panel.setTapped(!panel.isTapped());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,18 +208,14 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void end() {
|
protected void onEnd() {
|
||||||
panel.setTappedAngle(panel.isTapped() ? CardPanel.TAPPED_ANGLE : 0);
|
panel.setTappedAngle(panel.isTapped() ? CardPanel.TAPPED_ANGLE : 0);
|
||||||
}
|
}
|
||||||
};
|
}.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
// static public void moveCardToPlay (Component source, final CardPanel
|
|
||||||
// dest, final CardPanel animationPanel) {
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Animate a {@link CardPanel} moving.
|
||||||
* moveCardToPlay.
|
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param startX
|
* @param startX
|
||||||
* a int.
|
* a int.
|
||||||
@@ -242,7 +238,7 @@ public abstract class Animation {
|
|||||||
* @param speed
|
* @param speed
|
||||||
* a int.
|
* a int.
|
||||||
*/
|
*/
|
||||||
public static void moveCardToPlay(final int startX, final int startY, final int startWidth, final int endX,
|
public static void moveCardToField(final int startX, final int startY, final int startWidth, final int endX,
|
||||||
final int endY, final int endWidth, final CardPanel animationPanel, final CardPanel placeholder,
|
final int endY, final int endWidth, final CardPanel animationPanel, final CardPanel placeholder,
|
||||||
final JLayeredPane layeredPane, final int speed) {
|
final JLayeredPane layeredPane, final int speed) {
|
||||||
Animation.invokeLater(new Runnable() {
|
Animation.invokeLater(new Runnable() {
|
||||||
@@ -258,7 +254,7 @@ public abstract class Animation {
|
|||||||
Container parent = animationPanel.getParent();
|
Container parent = animationPanel.getParent();
|
||||||
if (parent != layeredPane) {
|
if (parent != layeredPane) {
|
||||||
layeredPane.add(animationPanel);
|
layeredPane.add(animationPanel);
|
||||||
layeredPane.setLayer(animationPanel, JLayeredPane.MODAL_LAYER);
|
layeredPane.setLayer(animationPanel, JLayeredPane.MODAL_LAYER.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
new Animation(700) {
|
new Animation(700) {
|
||||||
@@ -292,7 +288,7 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void end() {
|
protected void onEnd() {
|
||||||
EventQueue.invokeLater(new Runnable() {
|
EventQueue.invokeLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -306,15 +302,13 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
}.run();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Animate a {@link CardPanel} moving.
|
||||||
* moveCard.
|
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param startX
|
* @param startX
|
||||||
* a int.
|
* a int.
|
||||||
@@ -351,7 +345,7 @@ public abstract class Animation {
|
|||||||
Container parent = animationPanel.getParent();
|
Container parent = animationPanel.getParent();
|
||||||
if (parent != layeredPane) {
|
if (parent != layeredPane) {
|
||||||
layeredPane.add(animationPanel);
|
layeredPane.add(animationPanel);
|
||||||
layeredPane.setLayer(animationPanel, JLayeredPane.MODAL_LAYER);
|
layeredPane.setLayer(animationPanel, JLayeredPane.MODAL_LAYER.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
new Animation(speed) {
|
new Animation(speed) {
|
||||||
@@ -365,7 +359,7 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void end() {
|
protected void onEnd() {
|
||||||
EventQueue.invokeLater(new Runnable() {
|
EventQueue.invokeLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -383,15 +377,13 @@ public abstract class Animation {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
}.run();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* Animate a {@link CardPanel} moving.
|
||||||
* moveCard.
|
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @param placeholder
|
* @param placeholder
|
||||||
* a {@link forge.view.arcane.CardPanel} object.
|
* a {@link forge.view.arcane.CardPanel} object.
|
||||||
|
|||||||
@@ -8,10 +8,18 @@ Forge Beta: #-#-2015 ver 1.5.39
|
|||||||
Release Notes
|
Release Notes
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
Interface Update
|
||||||
|
The interface has received several small changes.
|
||||||
|
- The "Players" panel has been removed. This information can now be viewed by
|
||||||
|
hovering the cursor over a player's avatar.
|
||||||
|
- The poison counters value has been moved to next to a players life total.
|
||||||
|
This is only visible if the player has any poison counters.
|
||||||
|
- The poison counters button has been replaced with a Command Zone button.
|
||||||
|
The command zone panels have been removed.
|
||||||
|
|
||||||
- Smarter Deck Color Determination -
|
- Smarter Deck Color Determination -
|
||||||
When determining the color of decks, colors of hybrid and phyrexian cards are no longer considered unless they can be produced by a land in the deck
|
When determining the color of decks, colors of hybrid and phyrexian cards are no
|
||||||
|
longer considered unless they can be produced by a land in the deck
|
||||||
|
|
||||||
- Land Color Filtering in Deck Editor -
|
- Land Color Filtering in Deck Editor -
|
||||||
When filtering colors in the Deck Editor, lands that produce all selected colors will now be shown
|
When filtering colors in the Deck Editor, lands that produce all selected colors will now be shown
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
SHORTCUT_SHOWSTACK ("83"),
|
SHORTCUT_SHOWSTACK ("83"),
|
||||||
SHORTCUT_SHOWCOMBAT ("67"),
|
SHORTCUT_SHOWCOMBAT ("67"),
|
||||||
SHORTCUT_SHOWCONSOLE ("76"),
|
SHORTCUT_SHOWCONSOLE ("76"),
|
||||||
SHORTCUT_SHOWPLAYERS ("80"),
|
|
||||||
SHORTCUT_SHOWDEV ("68"),
|
SHORTCUT_SHOWDEV ("68"),
|
||||||
SHORTCUT_CONCEDE ("17"),
|
SHORTCUT_CONCEDE ("17"),
|
||||||
SHORTCUT_ENDTURN ("69"),
|
SHORTCUT_ENDTURN ("69"),
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class ForgeProfileProperties {
|
|||||||
cacheDir = getDir(props, CACHE_DIR_KEY, defaults.getRight());
|
cacheDir = getDir(props, CACHE_DIR_KEY, defaults.getRight());
|
||||||
cardPicsDir = getDir(props, CARD_PICS_DIR_KEY, cacheDir + "pics" + File.separator + "cards" + File.separator);
|
cardPicsDir = getDir(props, CARD_PICS_DIR_KEY, cacheDir + "pics" + File.separator + "cards" + File.separator);
|
||||||
cardPicsSubDirs = getMap(props, CARD_PICS_SUB_DIRS_KEY);
|
cardPicsSubDirs = getMap(props, CARD_PICS_SUB_DIRS_KEY);
|
||||||
serverPort = getInt(props, SERVER_PORT_KEY, 0);
|
serverPort = getInt(props, SERVER_PORT_KEY, 36743); // "Forge" using phone keypad
|
||||||
|
|
||||||
//ensure directories exist
|
//ensure directories exist
|
||||||
FileUtil.ensureDirectoryExists(userDir);
|
FileUtil.ensureDirectoryExists(userDir);
|
||||||
|
|||||||
Reference in New Issue
Block a user