From 6db3273c253c9695c18b2ba805567aea2264f7be Mon Sep 17 00:00:00 2001 From: JamzTheMan Date: Fri, 24 Jan 2020 09:36:34 -0600 Subject: [PATCH] Fixes Token VBL and AI Pathing Conflict #456 Signed-off-by: JamzTheMan --- .../rptools/maptool/client/ui/zone/RenderPathWorker.java | 6 +++++- .../net/rptools/maptool/client/ui/zone/ZoneRenderer.java | 7 ++++++- .../maptool/client/walker/AbstractZoneWalker.java | 9 +++++++-- .../net/rptools/maptool/client/walker/ZoneWalker.java | 5 ++++- .../maptool/client/walker/astar/AbstractAStarWalker.java | 4 ++++ src/main/java/net/rptools/maptool/model/Token.java | 4 ++++ 6 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/RenderPathWorker.java b/src/main/java/net/rptools/maptool/client/ui/zone/RenderPathWorker.java index 62ea9ece96..2fb0e1eef8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/RenderPathWorker.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/RenderPathWorker.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.ui.zone; +import java.awt.geom.Area; import java.util.Set; import javax.swing.SwingWorker; import net.rptools.maptool.client.walker.ZoneWalker; @@ -28,23 +29,26 @@ public class RenderPathWorker extends SwingWorker { CellPoint startPoint, endPoint; private final boolean restrictMovement; private final Set terrainModifiersIgnored; + private final Area tokenVBL; public RenderPathWorker( ZoneWalker walker, CellPoint endPoint, boolean restrictMovement, Set terrainModifiersIgnored, + Area tokenVBL, ZoneRenderer zoneRenderer) { this.walker = walker; this.endPoint = endPoint; this.restrictMovement = restrictMovement; this.zoneRenderer = zoneRenderer; this.terrainModifiersIgnored = terrainModifiersIgnored; + this.tokenVBL = tokenVBL; } @Override protected Void doInBackground() throws Exception { - walker.replaceLastWaypoint(endPoint, restrictMovement, terrainModifiersIgnored); + walker.replaceLastWaypoint(endPoint, restrictMovement, terrainModifiersIgnored, tokenVBL); return null; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 27bcbff95b..51e812afaf 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -4349,7 +4349,12 @@ public void setOffset(int x, int y) { renderPathTask = new RenderPathWorker( - walker, point, restictMovement, terrainModifiersIgnored, ZoneRenderer.this); + walker, + point, + restictMovement, + terrainModifiersIgnored, + token.getTransformedVBL(), + ZoneRenderer.this); renderPathThreadPool.execute(renderPathTask); } else { if (gridlessPath.getCellPath().size() > 1) { diff --git a/src/main/java/net/rptools/maptool/client/walker/AbstractZoneWalker.java b/src/main/java/net/rptools/maptool/client/walker/AbstractZoneWalker.java index 0c29367387..b2ebacf74f 100644 --- a/src/main/java/net/rptools/maptool/client/walker/AbstractZoneWalker.java +++ b/src/main/java/net/rptools/maptool/client/walker/AbstractZoneWalker.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.walker; +import java.awt.geom.Area; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -32,6 +33,7 @@ public abstract class AbstractZoneWalker implements ZoneWalker { protected final Zone zone; protected boolean restrictMovement = false; protected Set terrainModifiersIgnored; + protected Area tokenVBL; protected RenderPathWorker renderPathWorker; public AbstractZoneWalker(Zone zone) { @@ -69,17 +71,20 @@ public void addWaypoints(CellPoint... points) { } public CellPoint replaceLastWaypoint(CellPoint point) { - return replaceLastWaypoint(point, false, Collections.singleton(TerrainModifierOperation.NONE)); + return replaceLastWaypoint( + point, false, Collections.singleton(TerrainModifierOperation.NONE), null); } @Override public CellPoint replaceLastWaypoint( CellPoint point, boolean restrictMovement, - Set terrainModifiersIgnored) { + Set terrainModifiersIgnored, + Area tokenVBL) { this.restrictMovement = restrictMovement; this.terrainModifiersIgnored = terrainModifiersIgnored; + this.tokenVBL = tokenVBL; if (partialPaths.isEmpty()) { return null; diff --git a/src/main/java/net/rptools/maptool/client/walker/ZoneWalker.java b/src/main/java/net/rptools/maptool/client/walker/ZoneWalker.java index 18bfec2c18..7a3a89a648 100644 --- a/src/main/java/net/rptools/maptool/client/walker/ZoneWalker.java +++ b/src/main/java/net/rptools/maptool/client/walker/ZoneWalker.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.walker; +import java.awt.geom.Area; import java.util.Collection; import java.util.Set; import net.rptools.maptool.client.ui.zone.RenderPathWorker; @@ -24,6 +25,7 @@ import net.rptools.maptool.model.TokenFootprint; public interface ZoneWalker { + public void setWaypoints(CellPoint... points); public void addWaypoints(CellPoint... point); @@ -33,7 +35,8 @@ public interface ZoneWalker { public CellPoint replaceLastWaypoint( CellPoint point, boolean restrictMovement, - Set terrainModifiersIgnored); + Set terrainModifiersIgnored, + Area tokenVBL); public boolean isWaypoint(CellPoint point); diff --git a/src/main/java/net/rptools/maptool/client/walker/astar/AbstractAStarWalker.java b/src/main/java/net/rptools/maptool/client/walker/astar/AbstractAStarWalker.java index 20789678ab..bb10abeb8c 100644 --- a/src/main/java/net/rptools/maptool/client/walker/astar/AbstractAStarWalker.java +++ b/src/main/java/net/rptools/maptool/client/walker/astar/AbstractAStarWalker.java @@ -151,6 +151,10 @@ protected List calculatePath(CellPoint start, CellPoint goal) { // Note: zoneRenderer will be null if map is not visible to players. if (MapTool.getFrame().getCurrentZoneRenderer() != null) { vbl = MapTool.getFrame().getCurrentZoneRenderer().getZoneView().getTopologyTree().getArea(); + + if (tokenVBL != null) { + vbl.subtract(tokenVBL); + } } if (!vbl.isEmpty()) { diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index f035ee6560..12b4a4a196 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -1376,6 +1376,10 @@ public Area getTransformedVBL() { * @since 1.4.1.5 */ public Area getTransformedVBL(Area areaToTransform) { + if (areaToTransform == null) { + return null; + } + Rectangle footprintBounds = getBounds(MapTool.getFrame().getCurrentZoneRenderer().getZone()); Dimension imgSize = new Dimension(getWidth(), getHeight()); SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height);