From 44e181981decbe4d7181b0b8066d97c7bcc8b274 Mon Sep 17 00:00:00 2001 From: Tim Scott Date: Mon, 24 Dec 2018 16:44:01 -0600 Subject: [PATCH] Update targeting overlay to draw target arrow for stack top when "On" (no initial mouse over required). Prevent identical target arrows from being added to the arc lists which was causing a minor graphics glitch. --- .../forge/screens/match/TargetingOverlay.java | 43 +++++++++++++++---- .../forge/screens/match/views/VStack.java | 37 +++++++++++++--- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java b/forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java index c726449d79b..ed75f7f21a9 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java @@ -79,6 +79,13 @@ public class TargetingOverlay { x2 = end.x; y2 = end.y; } + + @Override + public boolean equals(Object obj) + { + Arc arc = (Arc)obj; + return ((arc.x1 == x1) && (arc.x2 == x2) && (arc.y1 == y1) && (arc.y2 == y2)); + } } private final Set cardsVisualized = new HashSet(); @@ -331,13 +338,24 @@ public class TargetingOverlay { activeStackItem.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(final MouseEvent e) { - assembleStackArrows(); - FView.SINGLETON_INSTANCE.getFrame().repaint(); + if (matchUI.getCDock().getArcState() == ArcState.MOUSEOVER) { + assembleStackArrows(); + FView.SINGLETON_INSTANCE.getFrame().repaint(); + } } @Override public void mouseExited(final MouseEvent e) { - assembleStackArrows(); - FView.SINGLETON_INSTANCE.getFrame().repaint(); + if (matchUI.getCDock().getArcState() == ArcState.MOUSEOVER) { + assembleStackArrows(); + FView.SINGLETON_INSTANCE.getFrame().repaint(); + } + } + @Override + public void mouseClicked(final MouseEvent e) { + if (matchUI.getCDock().getArcState() == ArcState.ON) { + assembleStackArrows(); + FView.SINGLETON_INSTANCE.getFrame().repaint(); + } } }); } @@ -384,18 +402,27 @@ public class TargetingOverlay { if (start == null || end == null) { return; } - + + Arc newArc = new Arc(end,start); + switch (connects) { case Friends: case FriendsStackTargeting: - arcsFriend.add(new Arc(end, start)); + if (!arcsFriend.contains(newArc)) { + arcsFriend.add(newArc); + } break; case FoesAttacking: - arcsFoeAtk.add(new Arc(end, start)); + if (!arcsFoeAtk.contains(newArc)) { + arcsFoeAtk.add(newArc); + } break; case FoesBlocking: case FoesStackTargeting: - arcsFoeDef.add(new Arc(end, start)); + if (!arcsFoeDef.contains(newArc)) { + arcsFoeDef.add(newArc); + } + break; } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java index 0f78f73589a..8a4dea07365 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java @@ -47,6 +47,7 @@ import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.gui.framework.IVDoc; import forge.screens.match.controllers.CStack; +import forge.screens.match.controllers.CDock.ArcState; import forge.toolbox.FMouseAdapter; import forge.toolbox.FScrollPanel; import forge.toolbox.FSkin; @@ -194,19 +195,45 @@ public class VStack implements IVDoc { setFont(FSkin.getFont()); setWrapStyleWord(true); setMinimumSize(new Dimension(CARD_WIDTH + 2 * PADDING, CARD_HEIGHT + 2 * PADDING)); + + // if the top of the stack is not assigned yet... + if (hoveredItem == null) + { + // set things up to draw an arc from it... + hoveredItem = StackInstanceTextArea.this; + controller.getMatchUI().setCard(item.getSourceCard()); + } addMouseListener(new MouseAdapter() { @Override public void mouseEntered(final MouseEvent e) { - hoveredItem = StackInstanceTextArea.this; - controller.getMatchUI().setCard(item.getSourceCard()); + if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) { + hoveredItem = StackInstanceTextArea.this; + controller.getMatchUI().setCard(item.getSourceCard()); + } } @Override public void mouseExited(final MouseEvent e) { - if (hoveredItem == StackInstanceTextArea.this) { - hoveredItem = null; - } + if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) { + if (hoveredItem == StackInstanceTextArea.this) { + hoveredItem = null; + } + } + } + + @Override + public void mouseClicked(final MouseEvent e) { + if (controller.getMatchUI().getCDock().getArcState() == ArcState.ON) { + if (hoveredItem == StackInstanceTextArea.this) { + hoveredItem = null; + } + else + { + hoveredItem = StackInstanceTextArea.this; + controller.getMatchUI().setCard(item.getSourceCard()); + } + } } });