From 392beeb78351365dd6e3b6c19a3a1a51c2833f9f Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Wed, 26 Feb 2025 11:59:56 -0800 Subject: [PATCH 1/8] Add back the AbstractTemplate.zoneId field so XStream can reference it After loading, null it out so we don't keep serializing it and it won't be the target of a reference in the future. --- .../maptool/model/drawing/AbstractTemplate.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/net/rptools/maptool/model/drawing/AbstractTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/AbstractTemplate.java index 2c5ce25992..2a8c3d9cfe 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/AbstractTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/AbstractTemplate.java @@ -41,6 +41,13 @@ public abstract class AbstractTemplate extends AbstractDrawing { /** The location of the vertex where painting starts. */ private ZonePoint vertex = new ZonePoint(0, 0); + /** + * @deprecated This used to indicate the zone where this drawable is painted. We no longer track + * this in the drawing, but old campaign files may keep a reference to this field. So we have + * to keep this around so XStream can find the value if it needs it. + */ + @Deprecated private GUID zoneId; + protected AbstractTemplate() {} protected AbstractTemplate(GUID id) { @@ -53,6 +60,11 @@ protected AbstractTemplate(AbstractTemplate other) { this.vertex = new ZonePoint(other.vertex); } + public Object readResolve() { + zoneId = null; + return this; + } + /*--------------------------------------------------------------------------------------------- * Class Variables *-------------------------------------------------------------------------------------------*/ From c03cc03b36c0d4ae2b29e91317f0622f0c9bc47a Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 24 Mar 2025 15:48:23 -0700 Subject: [PATCH 2/8] Fix token move validation to measure against drag anchor Every other part of token dragging measures against the anchor, and this discrepency meant the FoW checks were not checking the correct position. --- .../maptool/client/tool/PointerTool.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java index 26c6263030..7cd7c61c7d 100644 --- a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java @@ -1932,10 +1932,8 @@ private void doDragTo(ZonePoint newAnchorPoint, int dirx, int diry) { // Make sure it's a valid move boolean isValid = (renderer.getZone().getGrid().getSize() >= 9) - ? validateMove( - tokenBeingDragged, renderer.getSelectedTokenSet(), newAnchorPoint, dirx, diry) - : validateMove_legacy( - tokenBeingDragged, renderer.getSelectedTokenSet(), newAnchorPoint); + ? validateMove(renderer.getSelectedTokenSet(), newAnchorPoint, dirx, diry) + : validateMove_legacy(renderer.getSelectedTokenSet(), newAnchorPoint); if (!isValid) { return; } @@ -2001,7 +1999,7 @@ private void exposeFoW(ZonePoint p) { } private boolean validateMove( - Token leadToken, Set tokenSet, ZonePoint point, int dirx, int diry) { + Set tokenSet, ZonePoint leadTokenNewAnchor, int dirx, int diry) { if (MapTool.getPlayer().isGM()) { return true; } @@ -2014,8 +2012,8 @@ private boolean validateMove( boolean useTokenExposedArea = MapTool.getServerPolicy().isUseIndividualFOW() && zone.getVisionType() != VisionType.OFF; - int deltaX = point.x - leadToken.getX(); - int deltaY = point.y - leadToken.getY(); + int deltaX = leadTokenNewAnchor.x - this.dragAnchor.x; + int deltaY = leadTokenNewAnchor.y - this.dragAnchor.y; Grid grid = zone.getGrid(); // Loop through all tokens. As soon as one of them is blocked, stop processing and // return @@ -2054,7 +2052,7 @@ private boolean validateMove( return !isBlocked; } - private boolean validateMove_legacy(Token leadToken, Set tokenSet, ZonePoint point) { + private boolean validateMove_legacy(Set tokenSet, ZonePoint leadTokenNewAnchor) { Zone zone = renderer.getZone(); if (MapTool.getPlayer().isGM()) { return true; @@ -2068,8 +2066,8 @@ private boolean validateMove_legacy(Token leadToken, Set tokenSet, ZonePoi } isVisible = false; int fudgeSize = Math.max(Math.min((zone.getGrid().getSize() - 2) / 3 - 1, 8), 0); - int deltaX = point.x - leadToken.getX(); - int deltaY = point.y - leadToken.getY(); + int deltaX = leadTokenNewAnchor.x - this.dragAnchor.x; + int deltaY = leadTokenNewAnchor.y - this.dragAnchor.y; Rectangle bounds = new Rectangle(); for (GUID tokenGUID : tokenSet) { Token token = zone.getToken(tokenGUID); From 94c8f57e479791606953bbed01180da48773f6f8 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 24 Mar 2025 17:12:29 -0700 Subject: [PATCH 3/8] Separate validation from "Snap Token while dragging" preference This lets rendering still be done smoothly, but validation is done "cell by cell" even when the preference is disabled. --- .../maptool/client/tool/PointerTool.java | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java index 7cd7c61c7d..b153bf9aca 100644 --- a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java @@ -1859,36 +1859,13 @@ public void dragTo(int mouseX, int mouseY) { } ZonePoint zonePoint = new ScreenPoint(mouseX, mouseY).convertToZone(renderer); - - zonePoint.x = this.dragAnchor.x + zonePoint.x - tokenDragStart.x; - zonePoint.y = this.dragAnchor.y + zonePoint.y - tokenDragStart.y; - - var grid = renderer.getZone().getGrid(); - if (tokenBeingDragged.isSnapToGrid() - && grid.getCapabilities().isSnapToGridSupported() - && AppPreferences.tokensSnapWhileDragging.get()) { - // Snap to grid point. - zonePoint = grid.convert(grid.convert(zonePoint)); - - if (debugEnabled) { - renderer.setShape(new Rectangle2D.Double(zonePoint.x - 5, zonePoint.y - 5, 10, 10)); - } - - // Adjust given offet from grid to anchor point. - zonePoint.x += this.snapOffsetX; - zonePoint.y += this.snapOffsetY; - } + zonePoint.x += dragAnchor.x - tokenDragStart.x; + zonePoint.y += dragAnchor.y - tokenDragStart.y; if (debugEnabled) { renderer.setShape2(new Rectangle2D.Double(zonePoint.x - 5, zonePoint.y - 5, 10, 10)); } - - @Nullable ZonePoint previous = renderer.getLastWaypoint(tokenBeingDragged.getId()); - if (previous == null) { - doDragTo(zonePoint, 0, 0); - } else { - doDragTo(zonePoint, zonePoint.x - previous.x, zonePoint.y - previous.y); - } + doDragTo(zonePoint); } public void moveByKey(double dx, double dy) { @@ -1904,9 +1881,6 @@ public void moveByKey(double dx, double dy) { zp.x += snapOffsetX; zp.y += snapOffsetY; - - dx = zp.x - tokenBeingDragged.getX(); - dy = zp.y - tokenBeingDragged.getY(); } else { // Scalar for dx/dy in zone space. Defaulting to essentially 1 pixel. int moveFactor = 1; @@ -1920,20 +1894,45 @@ public void moveByKey(double dx, double dy) { zp = new ZonePoint(x, y); } - doDragTo(zp, (int) dx, (int) dy); + doDragTo(zp); } - private void doDragTo(ZonePoint newAnchorPoint, int dirx, int diry) { + private void doDragTo(ZonePoint newAnchorPoint) { + + // For snapped tokens, validation is done snapped as well, even if the "snap token while + // dragging preference" if disabled. + var validationAnchorPoint = newAnchorPoint; + var grid = renderer.getZone().getGrid(); + ZonePoint previousAnchorPoint = tokenDragCurrent; + if (tokenBeingDragged.isSnapToGrid() && grid.getCapabilities().isSnapToGridSupported()) { + // Snap to grid point. + validationAnchorPoint = grid.convert(grid.convert(validationAnchorPoint)); + + // Adjust given offset from grid to anchor point. + validationAnchorPoint.x += this.snapOffsetX; + validationAnchorPoint.y += this.snapOffsetY; + + previousAnchorPoint = grid.convert(grid.convert(previousAnchorPoint)); + previousAnchorPoint.x += this.snapOffsetX; + previousAnchorPoint.y += this.snapOffsetY; + } + if (AppPreferences.tokensSnapWhileDragging.get()) { + newAnchorPoint = validationAnchorPoint; + } + // Don't bother if there isn't any movement if (!renderer.hasMoveSelectionSetMoved(tokenBeingDragged.getId(), newAnchorPoint)) { return; } - // Make sure it's a valid move + // Make sure it's a valid move. + int dirx = validationAnchorPoint.x - previousAnchorPoint.x; + int diry = validationAnchorPoint.y - previousAnchorPoint.y; boolean isValid = - (renderer.getZone().getGrid().getSize() >= 9) - ? validateMove(renderer.getSelectedTokenSet(), newAnchorPoint, dirx, diry) - : validateMove_legacy(renderer.getSelectedTokenSet(), newAnchorPoint); + previousAnchorPoint.equals(validationAnchorPoint) + || ((renderer.getZone().getGrid().getSize() >= 9) + ? validateMove(renderer.getSelectedTokenSet(), validationAnchorPoint, dirx, diry) + : validateMove_legacy(renderer.getSelectedTokenSet(), validationAnchorPoint)); if (!isValid) { return; } From 0ae7b80648761a3ab7c48057f59fafcf3b104462 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 24 Mar 2025 17:35:15 -0700 Subject: [PATCH 4/8] Give the same treatment to StampTool StampTool doesn't have the same issue as PointerTool since it doesn't validation drags, but we might as well keep the structure as similar as possible. --- .../maptool/client/tool/StampTool.java | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/StampTool.java b/src/main/java/net/rptools/maptool/client/tool/StampTool.java index 4995f79de4..5cc6f53e07 100644 --- a/src/main/java/net/rptools/maptool/client/tool/StampTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/StampTool.java @@ -1195,23 +1195,8 @@ public void dragTo(int mouseX, int mouseY) { } ZonePoint zonePoint = new ScreenPoint(mouseX, mouseY).convertToZone(renderer); - - zonePoint.x = this.dragAnchor.x + zonePoint.x - tokenDragStart.x; - zonePoint.y = this.dragAnchor.y + zonePoint.y - tokenDragStart.y; - - var grid = renderer.getZone().getGrid(); - if (tokenBeingDragged.isSnapToGrid() && grid.getCapabilities().isSnapToGridSupported()) { - // Snap to grid point. - zonePoint = grid.convert(grid.convert(zonePoint)); - - if (debugEnabled) { - renderer.setShape(new Rectangle2D.Double(zonePoint.x - 5, zonePoint.y - 5, 10, 10)); - } - - // Adjust given offet from grid to anchor point. - zonePoint.x += this.snapOffsetX; - zonePoint.y += this.snapOffsetY; - } + zonePoint.x += dragAnchor.x - tokenDragStart.x; + zonePoint.y += dragAnchor.y - tokenDragStart.y; if (debugEnabled) { renderer.setShape2(new Rectangle2D.Double(zonePoint.x - 5, zonePoint.y - 5, 10, 10)); @@ -1244,13 +1229,23 @@ public void moveByKey(int dx, int dy, boolean micro) { } private void doDragTo(ZonePoint newAnchorPoint) { - tokenDragCurrent = new ZonePoint(newAnchorPoint); - // Don't bother if there isn't any movement if (!renderer.hasMoveSelectionSetMoved(tokenBeingDragged.getId(), newAnchorPoint)) { return; } + tokenDragCurrent = new ZonePoint(newAnchorPoint); + + var grid = renderer.getZone().getGrid(); + if (tokenBeingDragged.isSnapToGrid() && grid.getCapabilities().isSnapToGridSupported()) { + // Snap to grid point. + newAnchorPoint = grid.convert(grid.convert(newAnchorPoint)); + + // Adjust given offset from grid to anchor point. + newAnchorPoint.x += this.snapOffsetX; + newAnchorPoint.y += this.snapOffsetY; + } + renderer.updateMoveSelectionSet(tokenBeingDragged.getId(), newAnchorPoint); MapTool.serverCommand() .updateTokenMove( From 355b6cbd4050881f65c24e734ab2f5e36135c26b Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 24 Mar 2025 21:34:11 -0700 Subject: [PATCH 5/8] Set hex-specific properties _after_ reading the size The ratio (and therefore second dimension) depend on the size, so should be set after the grid's size is known. --- .../java/net/rptools/maptool/model/Grid.java | 29 +++++++++++++------ .../net/rptools/maptool/model/HexGrid.java | 14 ++------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/rptools/maptool/model/Grid.java b/src/main/java/net/rptools/maptool/model/Grid.java index e54e7c4dda..3a398615ff 100644 --- a/src/main/java/net/rptools/maptool/model/Grid.java +++ b/src/main/java/net/rptools/maptool/model/Grid.java @@ -1035,18 +1035,29 @@ protected Area getGridAreaFromCache(int gridRadius) { } public static Grid fromDto(GridDto dto) { - Grid grid = null; - switch (dto.getTypeCase()) { - case GRIDLESS_GRID -> grid = new GridlessGrid(); - case HEX_GRID -> { - grid = HexGrid.fromDto(dto.getHexGrid()); - } - case SQUARE_GRID -> grid = new SquareGrid(); - case ISOMETRIC_GRID -> grid = new IsometricGrid(); - } + Runnable postProcess = () -> {}; + Grid grid = + switch (dto.getTypeCase()) { + case GRIDLESS_GRID -> new GridlessGrid(); + case HEX_GRID -> { + var hexDto = dto.getHexGrid(); + var hexGrid = hexDto.getVertical() ? new HexGridVertical() : new HexGridHorizontal(); + postProcess = () -> hexGrid.readDto(hexDto); + yield hexGrid; + } + case SQUARE_GRID -> new SquareGrid(); + case ISOMETRIC_GRID -> new IsometricGrid(); + default -> { + log.error("Unrecognized Grid DTO: {}. Defaulting to square grid", dto.getTypeCase()); + yield new SquareGrid(); + } + }; + grid.offsetX = dto.getOffsetX(); grid.offsetY = dto.getOffsetY(); grid.size = dto.getSize(); + postProcess.run(); + grid.cellShape = grid.createCellShape(); return grid; diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index 47dad64c1f..746266e9f9 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -603,17 +603,9 @@ protected Area getScaledGridArea(Token token, int gridRadius) { protected abstract OffsetTranslator getOffsetTranslator(); - public static HexGrid fromDto(HexGridDto dto) { - HexGrid grid = null; - if (dto.getVertical()) { - grid = new HexGridVertical(); - } else { - grid = new HexGridHorizontal(); - } - - // Exact values do not matter, just the proportions. Grid itself will scale to the right size. - grid.setDimensions(100, 100 / grid.hexRatio); - return grid; + protected void readDto(HexGridDto dto) { + hexRatio = dto.getHexRatio(); + setDimensions(getSize(), getSize() / hexRatio); } protected void fillDto(GridDto.Builder dto) { From f9ed07314a528029e5d419fb1b5615bdf930d4a4 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Wed, 26 Mar 2025 06:54:04 -0700 Subject: [PATCH 6/8] Allow map drags to end properly when using DrawingTool or ExposeTool --- .../net/rptools/maptool/client/tool/drawing/DrawingTool.java | 2 ++ .../net/rptools/maptool/client/tool/drawing/ExposeTool.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java index 21c06d772c..839c4d73c2 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java @@ -291,5 +291,7 @@ public void mouseReleased(MouseEvent e) { submit(result.shape()); } } + + super.mouseReleased(e); } } diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java index 5d3b1876cc..e9a1847d07 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java @@ -200,5 +200,7 @@ public void mouseReleased(MouseEvent e) { submit(result.shape()); } } + + super.mouseReleased(e); } } From e413250053140c546ac20b421857136381bf8277 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Wed, 26 Mar 2025 07:20:07 -0700 Subject: [PATCH 7/8] AbstractTemplateTool has no reason to be an AbstractDrawingLikeTool --- .../tool/drawing/AbstractTemplateTool.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractTemplateTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractTemplateTool.java index f794433fad..2a91a2a379 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractTemplateTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractTemplateTool.java @@ -22,6 +22,7 @@ import net.rptools.maptool.client.MapToolUtil; import net.rptools.maptool.client.swing.SwingUtil; import net.rptools.maptool.client.swing.colorpicker.ColorPicker; +import net.rptools.maptool.client.tool.DefaultTool; import net.rptools.maptool.client.ui.zone.ZoneOverlay; import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.model.Zone.Layer; @@ -29,12 +30,13 @@ import net.rptools.maptool.model.drawing.Pen; /** Base class for tools that draw templates. */ -public abstract class AbstractTemplateTool extends AbstractDrawingLikeTool implements ZoneOverlay { +public abstract class AbstractTemplateTool extends DefaultTool implements ZoneOverlay { private static final long serialVersionUID = 9121558405484986225L; private boolean isSnapToGridSelected; private boolean isEraseSelected; + private boolean isEraser; protected AffineTransform getPaintTransform(ZoneRenderer renderer) { AffineTransform transform = new AffineTransform(); @@ -69,6 +71,14 @@ protected void detachFrom(ZoneRenderer renderer) { super.detachFrom(renderer); } + protected void setIsEraser(boolean eraser) { + isEraser = eraser; + } + + protected boolean isEraser() { + return isEraser; + } + protected boolean isEraser(MouseEvent e) { boolean defaultValue = MapTool.getFrame().getColorPicker().isEraseSelected(); if (SwingUtil.isShiftDown(e)) { @@ -78,15 +88,6 @@ protected boolean isEraser(MouseEvent e) { return defaultValue; } - protected boolean isSnapToGrid(MouseEvent e) { - boolean defaultValue = MapTool.getFrame().getColorPicker().isSnapSelected(); - if (SwingUtil.isControlDown(e)) { - // Invert from the color panel - defaultValue = !defaultValue; - } - return defaultValue; - } - protected Pen getPen() { Pen pen = new Pen(MapTool.getFrame().getPen()); pen.setEraser(isEraser()); From 2a0608fda07579e338c8bf4024f053ae1ebd871a Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Wed, 26 Mar 2025 07:09:56 -0700 Subject: [PATCH 8/8] Make instruction and tooltip keys into constructor parameters for AbstractDrawingLikeTool This fixes tooltips for drawing, expose and topology tools which are instance-based. This is because the `Tool` class sets the tooltip in the constructor using `getTooltip()`, which returns `null` for instance-based classes since their fields have not been initialized yet. This is a bad pattern, but we got away with when keys were all hardcoded in the methods themselves. --- .../tool/drawing/AbstractDrawingLikeTool.java | 20 +++++++++++++++++++ .../client/tool/drawing/DrawingTool.java | 16 ++------------- .../client/tool/drawing/ExposeTool.java | 16 ++------------- .../client/tool/drawing/TopologyTool.java | 16 ++------------- 4 files changed, 26 insertions(+), 42 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractDrawingLikeTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractDrawingLikeTool.java index 28570bb0c0..200083b673 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractDrawingLikeTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/AbstractDrawingLikeTool.java @@ -22,11 +22,31 @@ import net.rptools.maptool.client.tool.ToolHelper; import net.rptools.maptool.client.ui.zone.ZoneOverlay; import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; +import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.ZonePoint; public abstract class AbstractDrawingLikeTool extends DefaultTool implements ZoneOverlay { + private final String instructionKey; + private final String tooltipKey; private boolean isEraser; + protected AbstractDrawingLikeTool(String instructionKey, String tooltipKey) { + this.instructionKey = instructionKey; + this.tooltipKey = tooltipKey; + + setToolTipText(I18N.getText(tooltipKey)); + } + + @Override + public String getInstructions() { + return instructionKey; + } + + @Override + public String getTooltip() { + return tooltipKey; + } + protected void setIsEraser(boolean eraser) { isEraser = eraser; } diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java index 21c06d772c..00b789d36b 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/DrawingTool.java @@ -36,8 +36,6 @@ import net.rptools.maptool.model.drawing.ShapeDrawable; public final class DrawingTool extends AbstractDrawingLikeTool { - private final String instructionKey; - private final String tooltipKey; private final Strategy strategy; /** The current state of the tool. If {@code null}, nothing is being drawn right now. */ @@ -47,19 +45,9 @@ public final class DrawingTool extends AbstractDrawingLikeTool { private boolean centerOnOrigin = false; public DrawingTool(String instructionKey, String tooltipKey, Strategy strategy) { - this.instructionKey = instructionKey; - this.tooltipKey = tooltipKey; - this.strategy = strategy; - } + super(instructionKey, tooltipKey); - @Override - public String getInstructions() { - return instructionKey; - } - - @Override - public String getTooltip() { - return tooltipKey; + this.strategy = strategy; } @Override diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java index 5d3b1876cc..25e4a96776 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/ExposeTool.java @@ -30,8 +30,6 @@ import net.rptools.maptool.model.ZonePoint; public final class ExposeTool extends AbstractDrawingLikeTool { - private final String instructionKey; - private final String tooltipKey; private final Strategy strategy; /** The current state of the tool. If {@code null}, nothing is being drawn right now. */ @@ -41,19 +39,9 @@ public final class ExposeTool extends AbstractDrawingLikeTool { private boolean centerOnOrigin = false; public ExposeTool(String instructionKey, String tooltipKey, Strategy strategy) { - this.instructionKey = instructionKey; - this.tooltipKey = tooltipKey; - this.strategy = strategy; - } + super(instructionKey, tooltipKey); - @Override - public String getInstructions() { - return instructionKey; - } - - @Override - public String getTooltip() { - return tooltipKey; + this.strategy = strategy; } @Override diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/TopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/TopologyTool.java index ae8d537188..8e5e6fc232 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/TopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/TopologyTool.java @@ -32,8 +32,6 @@ import net.rptools.maptool.model.ZonePoint; public final class TopologyTool extends AbstractDrawingLikeTool { - private final String instructionKey; - private final String tooltipKey; private final boolean isFilled; private final Strategy strategy; private final TopologyModeSelectionPanel topologyModeSelectionPanel; @@ -54,8 +52,8 @@ public TopologyTool( boolean isFilled, Strategy strategy, TopologyModeSelectionPanel topologyModeSelectionPanel) { - this.instructionKey = instructionKey; - this.tooltipKey = tooltipKey; + super(instructionKey, tooltipKey); + this.isFilled = isFilled; this.strategy = strategy; // Consistency with topology tools before refactoring. Can be updated as part of #5002. @@ -65,16 +63,6 @@ public TopologyTool( this.maskOverlay = new MaskOverlay(); } - @Override - public String getInstructions() { - return instructionKey; - } - - @Override - public String getTooltip() { - return tooltipKey; - } - @Override public boolean isAvailable() { return MapTool.getPlayer().isGM();