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.
This commit is contained in:
Tim Scott
2018-12-24 16:44:01 -06:00
parent f4619fb7fd
commit 44e181981d
2 changed files with 67 additions and 13 deletions

View File

@@ -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<CardView> cardsVisualized = new HashSet<CardView>();
@@ -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;
}
}

View File

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