- Remove the Players and Command panels

- Some more cleanup
- Cleanup the Animation class (public method signatures unchanged)
This commit is contained in:
elcnesh
2015-04-20 14:19:57 +00:00
parent e7ddc92a3f
commit 62a7b2b98d
21 changed files with 143 additions and 681 deletions

4
.gitattributes vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 &emsp; {@link forge.game.player.Player}
* @param v0 &emsp; {@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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 &emsp; {@link forge.game.player.Player}
* @param id0 &emsp; {@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;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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