Add views to GUI refactoring, and update some more code.

This commit is contained in:
elcnesh
2014-09-02 10:37:11 +00:00
parent e4f6c7cb5d
commit 01c2648555
14 changed files with 1749 additions and 124 deletions

View File

@@ -17,20 +17,11 @@
*/
package forge.screens.match;
import forge.Singletons;
import forge.game.card.Card;
import forge.game.combat.Combat;
import forge.gui.framework.FScreen;
import forge.screens.match.controllers.CDock;
import forge.screens.match.views.VField;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.FView;
import forge.view.arcane.CardPanel;
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.awt.geom.GeneralPath;
@@ -39,6 +30,22 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JPanel;
import org.testng.collections.Lists;
import forge.Singletons;
import forge.gui.framework.FScreen;
import forge.screens.match.controllers.CDock;
import forge.screens.match.views.VField;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.CardView;
import forge.view.CombatView;
import forge.view.FView;
import forge.view.GameEntityView;
import forge.view.arcane.CardPanel;
/**
* Semi-transparent overlay panel. Should be used with layered panes.
*
@@ -74,7 +81,7 @@ public enum TargetingOverlay {
// TODO - this is called every repaint, regardless if card
// positions have changed or not. Could perform better if
// it checked for a state change. Doublestrike 28-09-12
private void assembleArcs(Combat combat) {
private void assembleArcs(final CombatView combat) {
//List<VField> fields = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
arcsCombat.clear();
arcsOther.clear();
@@ -115,7 +122,7 @@ public enum TargetingOverlay {
for (CardPanel c : cardPanels) {
if (c.isShowing()) {
cardLocOnScreen = c.getCardLocationOnScreen();
endpoints.put(c.getCard().getUniqueNumber(), new Point(
endpoints.put(c.getCard().getId(), new Point(
(int) (cardLocOnScreen.getX() - locOnScreen.getX() + c.getWidth() / 4),
(int) (cardLocOnScreen.getY() - locOnScreen.getY() + c.getHeight() / 2)
));
@@ -124,16 +131,16 @@ public enum TargetingOverlay {
if (CDock.SINGLETON_INSTANCE.getArcState() == 1) {
// Only work with the active panel
Card c = activePanel.getCard();
final CardView c = activePanel.getCard();
addArcsForCard(c, endpoints, combat);
} else {
// Work with all card panels currently visible
List<Card> visualized = new ArrayList<Card>();
for (CardPanel c : cardPanels) {
final List<CardView> visualized = Lists.newArrayList();
for (final CardPanel c : cardPanels) {
if (!c.isShowing()) {
continue;
}
Card card = c.getCard();
final CardView card = c.getCard();
if (visualized.contains(card)) { continue; }
visualized.addAll(addArcsForCard(card, endpoints, combat));
@@ -141,23 +148,22 @@ public enum TargetingOverlay {
}
}
private List<Card> addArcsForCard(final Card c, final Map<Integer, Point> endpoints, final Combat combat) {
List<Card> cardsVisualized = new ArrayList<Card>();
cardsVisualized.add(c);
private List<CardView> addArcsForCard(final CardView c, final Map<Integer, Point> endpoints, final CombatView combat) {
final List<CardView> cardsVisualized = Lists.newArrayList(c);
Card enchanting = c.getEnchantingCard();
Card equipping = c.getEquippingCard();
Card fortifying = c.getFortifyingCard();
List<Card> enchantedBy = c.getEnchantedBy();
List<Card> equippedBy = c.getEquippedBy();
List<Card> fortifiedBy = c.getFortifiedBy();
Card paired = c.getPairedWith();
final CardView enchanting = c.getEnchantingCard();
final CardView equipping = c.getEquipping();
final CardView fortifying = c.getFortifying();
final Iterable<CardView> enchantedBy = c.getEnchantedBy();
final Iterable<CardView> equippedBy = c.getEquippedBy();
final Iterable<CardView> fortifiedBy = c.getFortifiedBy();
final CardView paired = c.getPairedWith();
if (null != enchanting) {
if (!enchanting.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(enchanting.getUniqueNumber()),
endpoints.get(c.getUniqueNumber())
endpoints.get(enchanting.getId()),
endpoints.get(c.getId())
});
cardsVisualized.add(enchanting);
}
@@ -165,8 +171,8 @@ public enum TargetingOverlay {
if (null != equipping) {
if (!equipping.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(equipping.getUniqueNumber()),
endpoints.get(c.getUniqueNumber())
endpoints.get(equipping.getId()),
endpoints.get(c.getId())
});
cardsVisualized.add(equipping);
}
@@ -174,40 +180,40 @@ public enum TargetingOverlay {
if (null != fortifying) {
if (!fortifying.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(fortifying.getUniqueNumber()),
endpoints.get(c.getUniqueNumber())
endpoints.get(fortifying.getId()),
endpoints.get(c.getId())
});
cardsVisualized.add(fortifying);
}
}
if (null != enchantedBy) {
for (Card enc : enchantedBy) {
for (final CardView enc : enchantedBy) {
if (!enc.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(c.getUniqueNumber()),
endpoints.get(enc.getUniqueNumber())
endpoints.get(c.getId()),
endpoints.get(enc.getId())
});
cardsVisualized.add(enc);
}
}
}
if (null != equippedBy) {
for (Card eq : equippedBy) {
for (final CardView eq : equippedBy) {
if (!eq.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(c.getUniqueNumber()),
endpoints.get(eq.getUniqueNumber())
endpoints.get(c.getId()),
endpoints.get(eq.getId())
});
cardsVisualized.add(eq);
}
}
}
if (null != fortifiedBy) {
for (Card eq : fortifiedBy) {
for (final CardView eq : fortifiedBy) {
if (!eq.getController().equals(c.getController())) {
arcsOther.add(new Point[] {
endpoints.get(c.getUniqueNumber()),
endpoints.get(eq.getUniqueNumber())
endpoints.get(c.getId()),
endpoints.get(eq.getId())
});
cardsVisualized.add(eq);
}
@@ -215,29 +221,35 @@ public enum TargetingOverlay {
}
if (null != paired) {
arcsOther.add(new Point[] {
endpoints.get(paired.getUniqueNumber()),
endpoints.get(c.getUniqueNumber())
endpoints.get(paired.getId()),
endpoints.get(c.getId())
});
cardsVisualized.add(paired);
}
if ( null != combat ) {
for (Card planeswalker : combat.getDefendingPlaneswalkers()) {
List<Card> cards = combat.getAttackersOf(planeswalker);
for (Card pwAttacker : cards) {
if (!planeswalker.equals(c) && !pwAttacker.equals(c)) { continue; }
arcsCombat.add(new Point[] {
endpoints.get(planeswalker.getUniqueNumber()),
endpoints.get(pwAttacker.getUniqueNumber())
if (null != combat) {
final GameEntityView defender = combat.getDefender(c);
// if c is attacking a planeswalker
if (defender instanceof CardView) {
arcsCombat.add(new Point[] {
endpoints.get(((CardView)defender).getId()),
endpoints.get(c.getId())
});
}
}
for (Card attackingCard : combat.getAttackers()) {
List<Card> cards = combat.getBlockers(attackingCard);
for (Card blockingCard : cards) {
// if c is a planeswalker that's being attacked
final Iterable<CardView> attackers = combat.getAttackersOf(c);
for (final CardView pwAttacker : attackers) {
arcsCombat.add(new Point[] {
endpoints.get(c.getId()),
endpoints.get(pwAttacker.getId())
});
}
for (final CardView attackingCard : combat.getAttackers()) {
final Iterable<CardView> cards = combat.getBlockers(attackingCard);
for (final CardView blockingCard : cards) {
if (!attackingCard.equals(c) && !blockingCard.equals(c)) { continue; }
arcsCombat.add(new Point[] {
endpoints.get(attackingCard.getUniqueNumber()),
endpoints.get(blockingCard.getUniqueNumber())
endpoints.get(attackingCard.getId()),
endpoints.get(blockingCard.getId())
});
cardsVisualized.add(blockingCard);
}
@@ -340,7 +352,6 @@ public enum TargetingOverlay {
*/
@Override
public void paintComponent(final Graphics g) {
final Combat combat = Singletons.getControl().getObservedGame().getCombat(); // this will get deprecated too
// No need for this except in match view
if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
@@ -351,7 +362,7 @@ public enum TargetingOverlay {
if (overlaystate == 0) { return; }
// Arc drawing
assembleArcs(combat);
assembleArcs(Singletons.getControl().getGameView().getCombat());
if (arcsCombat.isEmpty() && arcsOther.isEmpty()) { return; }

View File

@@ -17,11 +17,28 @@
*/
package forge.screens.match;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import net.miginfocom.swing.MigLayout;
import org.testng.collections.Lists;
import com.google.common.collect.Maps;
import forge.control.FControl;
import forge.game.GameEntity;
import forge.game.card.Card;
import forge.game.card.CounterType;
import forge.game.player.Player;
import forge.gui.SOverlayUtils;
import forge.toolbox.FButton;
import forge.toolbox.FLabel;
@@ -33,25 +50,6 @@ import forge.view.FDialog;
import forge.view.GameEntityView;
import forge.view.PlayerView;
import forge.view.arcane.CardPanel;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import javax.swing.border.Border;
import org.testng.collections.Lists;
import com.google.common.collect.Maps;
import java.awt.Dialog.ModalityType;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Assembles Swing components of assign damage dialog.
@@ -200,13 +198,13 @@ public class VAssignDamage {
if (defender instanceof CardView)
fakeCard = (CardView)defender;
else if (defender instanceof PlayerView) {
fakeCard = new CardView(null, -1);
fakeCard = new CardView(null, -1, true);
fakeCard.getState().setName(this.defender.toString());
final PlayerView p = (PlayerView)defender;
fakeCard.getState().setOwner(p);
fakeCard.setOwner(p);
fakeCard.getState().setImageKey(CMatchUI.SINGLETON_INSTANCE.avatarImages.get(p.getLobbyPlayer()));
} else {
fakeCard = new CardView(null, -2);
fakeCard = new CardView(null, -2, true);
fakeCard.getState().setName(this.defender.toString());
}
addPanelForDefender(pnlDefenders, fakeCard);

View File

@@ -623,13 +623,13 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
}
List<CardView> toAdd = new ArrayList<CardView>(model);
final List<CardView> toAdd = new ArrayList<CardView>(model);
toAdd.removeAll(oldCards);
toAdd.addAll(toReplace);
List<CardPanel> newPanels = new ArrayList<CardPanel>();
final List<CardPanel> newPanels = new ArrayList<CardPanel>();
for (final CardView card : toAdd) {
if (card.getCardForUi() == card) { //only include cards that are meant for display
if (card.isUiDisplayable()) { //only include cards that are meant for display
final CardPanel placeholder = new CardPanel(card);
placeholder.setDisplayEnabled(false);
this.getCardPanels().add(placeholder);