mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Add targeting arrow support
This commit is contained in:
@@ -23,6 +23,7 @@ import forge.assets.FSkinColor.Colors;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.screens.match.views.VCardDisplayArea.CardAreaPanel;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.util.Utils;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
@@ -64,6 +65,11 @@ public class TargetingOverlay {
|
||||
MatchController.getView().getPlayerPanel(targetPlayer).getAvatar().getTargetingArrowOrigin(),
|
||||
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) {
|
||||
if (start == null || end == null) { return; }
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import forge.card.CardZoom.ActivateHandler;
|
||||
import forge.game.card.CardView;
|
||||
import forge.match.MatchUtil;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.util.ThreadUtil;
|
||||
|
||||
public abstract class VCardDisplayArea extends VDisplayArea implements ActivateHandler {
|
||||
@@ -376,21 +377,18 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
|
||||
return cards;
|
||||
}
|
||||
|
||||
public Vector2 getTargetingArrowOrigin() {
|
||||
//don't show targeting arrow unless in display area that's visible
|
||||
if (displayArea == null || !displayArea.isVisible()) { return null; }
|
||||
|
||||
Vector2 origin = new Vector2(screenPos.x, screenPos.y);
|
||||
public static Vector2 getTargetingArrowOrigin(FDisplayObject cardDisplay, boolean isTapped) {
|
||||
Vector2 origin = new Vector2(cardDisplay.screenPos.x, cardDisplay.screenPos.y);
|
||||
|
||||
float left = PADDING;
|
||||
float top = PADDING;
|
||||
float w = getWidth() - 2 * PADDING;
|
||||
float h = getHeight() - 2 * PADDING;
|
||||
float w = cardDisplay.getWidth() - 2 * PADDING;
|
||||
float h = cardDisplay.getHeight() - 2 * PADDING;
|
||||
if (w == h) { //adjust width if needed to make room for tapping
|
||||
w = h / ASPECT_RATIO;
|
||||
}
|
||||
|
||||
if (isTapped()) { //rotate box if tapped
|
||||
if (isTapped) { //rotate box if tapped
|
||||
top += h - w;
|
||||
float temp = w;
|
||||
w = h;
|
||||
@@ -403,6 +401,13 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
|
||||
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
|
||||
protected float getTappedAngle() {
|
||||
if (displayArea != null && displayArea.rotateCards180) {
|
||||
|
||||
@@ -31,6 +31,7 @@ import forge.planarconquest.ConquestPlaneData;
|
||||
import forge.planarconquest.ConquestPlaneData.RegionData;
|
||||
import forge.planarconquest.ConquestPreferences.CQPref;
|
||||
import forge.screens.FScreen;
|
||||
import forge.screens.match.TargetingOverlay;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.toolbox.FContainer;
|
||||
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
|
||||
}
|
||||
|
||||
@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
|
||||
protected void doLayout(float startY, float width, float height) {
|
||||
btnEndDay.setSize(width / 2, btnEndDay.getAutoSizeBounds().height);
|
||||
@@ -233,24 +263,43 @@ public class ConquestMapScreen extends FScreen {
|
||||
}
|
||||
else if (index > -4) { //opponent panel
|
||||
ConquestCommander commander = regionDisplay.deployedCommander.commander;
|
||||
if (commander != null && commander.getCurrentDayAction() == null) {
|
||||
//TODO: Attack opponent
|
||||
if (commander != null && commander.getCurrentDayAction() != ConquestAction.Deploy) {
|
||||
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
|
||||
if (commanderRow.selectedIndex != -1) {
|
||||
ConquestCommander commander = commanderRow.panels[commanderRow.selectedIndex].commander;
|
||||
if (commander.getCurrentDayAction() == null) {
|
||||
regionDisplay.deployedCommander.setCommander(commander);
|
||||
regionDisplay.data.setDeployedCommander(commander);
|
||||
commander.setCurrentDayAction(ConquestAction.Deploy);
|
||||
commander.setDeployedRegion(regionDisplay.data.getRegion());
|
||||
if (regionDisplay.deployedCommander.commander == null) {
|
||||
regionDisplay.deployedCommander.setCommander(commander);
|
||||
regionDisplay.data.setDeployedCommander(commander);
|
||||
commander.setCurrentDayAction(ConquestAction.Deploy);
|
||||
commander.setDeployedRegion(regionDisplay.data.getRegion());
|
||||
}
|
||||
}
|
||||
else if (commander.getCurrentDayAction() == ConquestAction.Deploy) {
|
||||
regionDisplay.deployedCommander.setCommander(null);
|
||||
regionDisplay.data.setDeployedCommander(null);
|
||||
commander.setCurrentDayAction(null);
|
||||
commander.setDeployedRegion(null);
|
||||
if (regionDisplay.deployedCommander.commander == commander) {
|
||||
regionDisplay.deployedCommander.setCommander(null);
|
||||
regionDisplay.data.setDeployedCommander(null);
|
||||
commander.setCurrentDayAction(null);
|
||||
commander.setDeployedRegion(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user