Add targeting arrow support

This commit is contained in:
drdev
2014-12-06 07:37:33 +00:00
parent fe2547527e
commit 48bf499e89
3 changed files with 78 additions and 18 deletions

View File

@@ -23,6 +23,7 @@ import forge.assets.FSkinColor.Colors;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.game.player.PlayerView; import forge.game.player.PlayerView;
import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel;
import forge.toolbox.FDisplayObject;
import forge.util.Utils; import forge.util.Utils;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
@@ -64,6 +65,11 @@ public class TargetingOverlay {
MatchController.getView().getPlayerPanel(targetPlayer).getAvatar().getTargetingArrowOrigin(), MatchController.getView().getPlayerPanel(targetPlayer).getAvatar().getTargetingArrowOrigin(),
connectsFoes); connectsFoes);
} }
public static void drawArrow(Graphics g, FDisplayObject startCardDisplay, FDisplayObject endCardDisplay, boolean connectsFoes) {
drawArrow(g, CardAreaPanel.getTargetingArrowOrigin(startCardDisplay, false),
CardAreaPanel.getTargetingArrowOrigin(endCardDisplay, false),
connectsFoes);
}
public static void drawArrow(Graphics g, Vector2 start, Vector2 end, boolean connectsFoes) { public static void drawArrow(Graphics g, Vector2 start, Vector2 end, boolean connectsFoes) {
if (start == null || end == null) { return; } if (start == null || end == null) { return; }

View File

@@ -15,6 +15,7 @@ import forge.card.CardZoom.ActivateHandler;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.match.MatchUtil; import forge.match.MatchUtil;
import forge.toolbox.FCardPanel; import forge.toolbox.FCardPanel;
import forge.toolbox.FDisplayObject;
import forge.util.ThreadUtil; import forge.util.ThreadUtil;
public abstract class VCardDisplayArea extends VDisplayArea implements ActivateHandler { public abstract class VCardDisplayArea extends VDisplayArea implements ActivateHandler {
@@ -376,21 +377,18 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
return cards; return cards;
} }
public Vector2 getTargetingArrowOrigin() { public static Vector2 getTargetingArrowOrigin(FDisplayObject cardDisplay, boolean isTapped) {
//don't show targeting arrow unless in display area that's visible Vector2 origin = new Vector2(cardDisplay.screenPos.x, cardDisplay.screenPos.y);
if (displayArea == null || !displayArea.isVisible()) { return null; }
Vector2 origin = new Vector2(screenPos.x, screenPos.y);
float left = PADDING; float left = PADDING;
float top = PADDING; float top = PADDING;
float w = getWidth() - 2 * PADDING; float w = cardDisplay.getWidth() - 2 * PADDING;
float h = getHeight() - 2 * PADDING; float h = cardDisplay.getHeight() - 2 * PADDING;
if (w == h) { //adjust width if needed to make room for tapping if (w == h) { //adjust width if needed to make room for tapping
w = h / ASPECT_RATIO; w = h / ASPECT_RATIO;
} }
if (isTapped()) { //rotate box if tapped if (isTapped) { //rotate box if tapped
top += h - w; top += h - w;
float temp = w; float temp = w;
w = h; w = h;
@@ -403,6 +401,13 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
return origin; return origin;
} }
public Vector2 getTargetingArrowOrigin() {
//don't show targeting arrow unless in display area that's visible
if (displayArea == null || !displayArea.isVisible()) { return null; }
return getTargetingArrowOrigin(this, isTapped());
}
@Override @Override
protected float getTappedAngle() { protected float getTappedAngle() {
if (displayArea != null && displayArea.rotateCards180) { if (displayArea != null && displayArea.rotateCards180) {

View File

@@ -31,6 +31,7 @@ import forge.planarconquest.ConquestPlaneData;
import forge.planarconquest.ConquestPlaneData.RegionData; import forge.planarconquest.ConquestPlaneData.RegionData;
import forge.planarconquest.ConquestPreferences.CQPref; import forge.planarconquest.ConquestPreferences.CQPref;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.match.TargetingOverlay;
import forge.toolbox.FCardPanel; import forge.toolbox.FCardPanel;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
@@ -108,6 +109,35 @@ public class ConquestMapScreen extends FScreen {
g.drawImage(background, 0, getHeight() - h, w, h); //retain proportions, remaining area will be covered by back color g.drawImage(background, 0, getHeight() - h, w, h); //retain proportions, remaining area will be covered by back color
} }
@Override
protected void drawOverlay(Graphics g) {
ConquestCommander commander = regionDisplay.deployedCommander.commander;
if (commander == null) { return; }
int idx;
switch (commander.getCurrentDayAction()) {
case Attack1:
TargetingOverlay.drawArrow(g, regionDisplay.deployedCommander, regionDisplay.opponents[0], true);
break;
case Attack2:
TargetingOverlay.drawArrow(g, regionDisplay.deployedCommander, regionDisplay.opponents[1], true);
break;
case Attack3:
TargetingOverlay.drawArrow(g, regionDisplay.deployedCommander, regionDisplay.opponents[2], true);
break;
case Deploy:
idx = model.getCurrentPlane().getCommanders().indexOf(regionDisplay.deployedCommander.commander);
TargetingOverlay.drawArrow(g, commanderRow.panels[idx], regionDisplay.deployedCommander, false);
break;
case Undeploy:
idx = model.getCurrentPlane().getCommanders().indexOf(regionDisplay.deployedCommander.commander);
TargetingOverlay.drawArrow(g, regionDisplay.deployedCommander, commanderRow.panels[idx], false);
break;
default:
break;
}
}
@Override @Override
protected void doLayout(float startY, float width, float height) { protected void doLayout(float startY, float width, float height) {
btnEndDay.setSize(width / 2, btnEndDay.getAutoSizeBounds().height); btnEndDay.setSize(width / 2, btnEndDay.getAutoSizeBounds().height);
@@ -233,20 +263,38 @@ public class ConquestMapScreen extends FScreen {
} }
else if (index > -4) { //opponent panel else if (index > -4) { //opponent panel
ConquestCommander commander = regionDisplay.deployedCommander.commander; ConquestCommander commander = regionDisplay.deployedCommander.commander;
if (commander != null && commander.getCurrentDayAction() == null) { if (commander != null && commander.getCurrentDayAction() != ConquestAction.Deploy) {
//TODO: Attack opponent ConquestAction action;
switch (index) {
case -1:
action = ConquestAction.Attack1;
break;
case -2:
action = ConquestAction.Attack2;
break;
default:
action = ConquestAction.Attack3;
break;
}
if (commander.getCurrentDayAction() == action) {
action = null; //toggle off set to attack this opponent
}
commander.setCurrentDayAction(action);
} }
} }
else { //deploy panel - toggle whether selected commander is deployed to current region else { //deploy panel - toggle whether selected commander is deployed to current region
if (commanderRow.selectedIndex != -1) { if (commanderRow.selectedIndex != -1) {
ConquestCommander commander = commanderRow.panels[commanderRow.selectedIndex].commander; ConquestCommander commander = commanderRow.panels[commanderRow.selectedIndex].commander;
if (commander.getCurrentDayAction() == null) { if (commander.getCurrentDayAction() == null) {
if (regionDisplay.deployedCommander.commander == null) {
regionDisplay.deployedCommander.setCommander(commander); regionDisplay.deployedCommander.setCommander(commander);
regionDisplay.data.setDeployedCommander(commander); regionDisplay.data.setDeployedCommander(commander);
commander.setCurrentDayAction(ConquestAction.Deploy); commander.setCurrentDayAction(ConquestAction.Deploy);
commander.setDeployedRegion(regionDisplay.data.getRegion()); commander.setDeployedRegion(regionDisplay.data.getRegion());
} }
}
else if (commander.getCurrentDayAction() == ConquestAction.Deploy) { else if (commander.getCurrentDayAction() == ConquestAction.Deploy) {
if (regionDisplay.deployedCommander.commander == commander) {
regionDisplay.deployedCommander.setCommander(null); regionDisplay.deployedCommander.setCommander(null);
regionDisplay.data.setDeployedCommander(null); regionDisplay.data.setDeployedCommander(null);
commander.setCurrentDayAction(null); commander.setCurrentDayAction(null);
@@ -255,6 +303,7 @@ public class ConquestMapScreen extends FScreen {
} }
} }
} }
}
private class CommanderRow extends FContainer { private class CommanderRow extends FContainer {
private int selectedIndex; private int selectedIndex;