* GUI: improved attackers draw (if attacker was blocked then arrow colorizes with gray color);

This commit is contained in:
Oleg Agafonov 2020-08-01 22:32:33 +04:00
parent c7595ca476
commit 2b82785e4a
2 changed files with 16 additions and 12 deletions

View file

@ -27,6 +27,9 @@ public enum CombatManager {
private final Map<UUID, Integer> combatBlockers = new HashMap<>(); private final Map<UUID, Integer> combatBlockers = new HashMap<>();
private int globalBlockersCount; // we need global counter as there are several combat groups private int globalBlockersCount; // we need global counter as there are several combat groups
private static Color ARROW_COLOR_ATTACKER = Color.red;
private static Color ARROW_COLOR_BLOCKED_ATTACKER = Color.gray;
private Point parentPoint; private Point parentPoint;
@ -79,15 +82,19 @@ public enum CombatManager {
private void drawDefender(CombatGroupView group, MagePermanent attackerCard, UUID gameId) { private void drawDefender(CombatGroupView group, MagePermanent attackerCard, UUID gameId) {
UUID defenderId = group.getDefenderId(); UUID defenderId = group.getDefenderId();
if (defenderId != null) { if (defenderId != null) {
// if attacker was blocked then use another allow color
Color attackColor = group.getBlockers().isEmpty() ? ARROW_COLOR_ATTACKER : ARROW_COLOR_BLOCKED_ATTACKER;
parentPoint = getParentPoint(attackerCard); parentPoint = getParentPoint(attackerCard);
PlayAreaPanel p = MageFrame.getGamePlayers(gameId).get(defenderId); PlayAreaPanel p = MageFrame.getGamePlayers(gameId).get(defenderId);
if (p != null) { if (p != null) {
// attack to player
Point target = p.getLocationOnScreen(); Point target = p.getLocationOnScreen();
target.translate(-parentPoint.x, -parentPoint.y); target.translate(-parentPoint.x, -parentPoint.y);
Point attackerPoint = attackerCard.getLocationOnScreen(); Point attackerPoint = attackerCard.getLocationOnScreen();
attackerPoint.translate(-parentPoint.x, -parentPoint.y); attackerPoint.translate(-parentPoint.x, -parentPoint.y);
ArrowBuilder.getBuilder().addArrow(gameId, (int) attackerPoint.getX() + 45, (int) attackerPoint.getY() + 25, (int) target.getX() + 40, (int) target.getY() - 20, Color.red, ArrowBuilder.Type.COMBAT); ArrowBuilder.getBuilder().addArrow(gameId, (int) attackerPoint.getX() + 45, (int) attackerPoint.getY() + 25, (int) target.getX() + 40, (int) target.getY() - 20, attackColor, ArrowBuilder.Type.COMBAT);
} else { } else {
// attack to planeswalker
for (PlayAreaPanel pa : MageFrame.getGamePlayers(gameId).values()) { for (PlayAreaPanel pa : MageFrame.getGamePlayers(gameId).values()) {
MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(defenderId); MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(defenderId);
if (permanent != null) { if (permanent != null) {
@ -95,7 +102,7 @@ public enum CombatManager {
target.translate(-parentPoint.x, -parentPoint.y); target.translate(-parentPoint.x, -parentPoint.y);
Point attackerPoint = attackerCard.getLocationOnScreen(); Point attackerPoint = attackerCard.getLocationOnScreen();
attackerPoint.translate(-parentPoint.x, -parentPoint.y); attackerPoint.translate(-parentPoint.x, -parentPoint.y);
ArrowBuilder.getBuilder().addArrow(gameId, (int) attackerPoint.getX() + 45, (int) attackerPoint.getY() + 25, (int) target.getX() + 40, (int) target.getY() + 10, Color.red, ArrowBuilder.Type.COMBAT); ArrowBuilder.getBuilder().addArrow(gameId, (int) attackerPoint.getX() + 45, (int) attackerPoint.getY() + 25, (int) target.getX() + 40, (int) target.getY() + 10, attackColor, ArrowBuilder.Type.COMBAT);
} }
} }
} }

View file

@ -1,18 +1,11 @@
package mage.client.util.gui; package mage.client.util.gui;
import java.awt.AlphaComposite; import javax.swing.*;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.GeneralPath; import java.awt.geom.GeneralPath;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Arrow extends JPanel { public class Arrow extends JPanel {
@ -26,6 +19,7 @@ public class Arrow extends JPanel {
private float headSize = 17; private float headSize = 17;
private Composite composite; private Composite composite;
private Color color = Color.red; private Color color = Color.red;
private Color strokeColor = Color.black;
public Arrow() { public Arrow() {
setOpaque(false); setOpaque(false);
@ -53,8 +47,11 @@ public class Arrow extends JPanel {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(composite); g2d.setComposite(composite);
g2d.setColor(this.color); g2d.setColor(this.color);
//debug stroke draw
//float[] dash2 = {10, 5};
//g2d.setStroke(new BasicStroke(3.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f, dash2, 0));
g2d.fill(arrow); g2d.fill(arrow);
g2d.setColor(Color.BLACK); g2d.setColor(this.strokeColor);
g2d.draw(arrow); g2d.draw(arrow);
} }