Skip to content

Commit

Permalink
#63 Restore default behavior of spacebar+left mouse click
Browse files Browse the repository at this point in the history
 * Spacebar functionality has been restored to it's original behavior
including ctrl+spacebar & shift+spacebar as well.
 * A new shift+ctrl+spacebar command along with a new pointer image is
now available. When this keystroke combo is pressed, and you are a GM,
the pointer will center & zoom all connected clients to that point. When
it is released, all clients will return to their previous view point &
zoom.

Task-Url: #63

Signed-off-by: Jamz <Jamz@Nerps.net>
  • Loading branch information
JamzTheMan committed Jun 8, 2018
1 parent f412607 commit 3c3f3aa
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 46 deletions.
30 changes: 10 additions & 20 deletions src/main/java/net/rptools/maptool/client/ClientCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,17 @@
public class ClientCommand {

public static enum COMMAND {
startAssetTransfer, updateAssetTransfer, bootPlayer, setCampaign, putZone, removeZone, putAsset, getAsset, removeAsset, putToken, removeToken, draw, clearAllDrawings, updateDrawing, setZoneGridSize, setZoneVisibility, playerConnected, playerDisconnected, message, undoDraw, showPointer, hidePointer, movePointer, startTokenMove, stopTokenMove, toggleTokenMoveWaypoint, updateTokenMove, enforceZoneView, setZoneHasFoW, exposeFoW, hideFoW, setFoW, putLabel, removeLabel, enforceZone, setServerPolicy, addTopology, removeTopology, renameZone, updateCampaign, updateInitiative, updateTokenInitiative, setUseVision, updateCampaignMacros, setTokenLocation, // NOTE:
// This
// is
// to
// support
// third
// party
// token
// placement
// and
// shouldn't
// be
// depended
// on
// for
// general
// purpose
// token
// movement
// @formatter:off
startAssetTransfer, updateAssetTransfer, bootPlayer, setCampaign, putZone, removeZone, putAsset, getAsset, removeAsset, putToken,
removeToken, draw, clearAllDrawings, updateDrawing, setZoneGridSize, setZoneVisibility, playerConnected, playerDisconnected, message,
undoDraw, showPointer, hidePointer, movePointer, startTokenMove, stopTokenMove, toggleTokenMoveWaypoint, updateTokenMove,
enforceZoneView, setZoneHasFoW, exposeFoW, hideFoW, setFoW, putLabel, removeLabel, enforceZone, setServerPolicy, addTopology,
removeTopology, renameZone, updateCampaign, updateInitiative, updateTokenInitiative, setUseVision, updateCampaignMacros,
setTokenLocation, // NOTE: This is to support third party token placement and shouldn't be depended on for general purpose token movement
setLiveTypingLabel, // Experimental chat notification
enforceNotification, // enforces notification of typing in the chat window
exposePCArea, setBoard, updateExposedAreaMeta, clearExposedArea
exposePCArea, setBoard, updateExposedAreaMeta, clearExposedArea,
restoreZoneView // Jamz: New command to restore player's view and let GM temporarily center and scale a player's view
// @formatter:on
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,11 @@ public void run() {
}
return;

case restoreZoneView:
zoneGUID = (GUID) parameters[0];
MapTool.getFrame().getZoneRenderer(zoneGUID).restoreView();
return;

case draw:
zoneGUID = (GUID) parameters[0];
Pen pen = (Pen) parameters[1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ public void enforceZoneView(GUID zoneGUID, int x, int y, double scale, int width
makeServerCall(COMMAND.enforceZoneView, zoneGUID, x, y, scale, width, height);
}

public void restoreZoneView(GUID zoneGUID) {
makeServerCall(COMMAND.restoreZoneView, zoneGUID);
}

public void putToken(GUID zoneGUID, Token token) {
// Hack to generate zone event. All functions that update tokens call this method
// after changing the token. But they don't tell the zone about it so classes
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/net/rptools/maptool/client/tool/PointerTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -1060,10 +1060,12 @@ public void actionPerformed(ActionEvent e) {
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true), new StopPointerActionListener());
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.CTRL_MASK, true), new StopPointerActionListener());
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.SHIFT_MASK, true), new StopPointerActionListener());
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.CTRL_MASK + ActionEvent.SHIFT_MASK, true), new StopPointerActionListener(true));

actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false), new PointerActionListener(Pointer.Type.ARROW));
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.CTRL_MASK, false), new PointerActionListener(Pointer.Type.SPEECH_BUBBLE));
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.SHIFT_MASK, false), new PointerActionListener(Pointer.Type.THOUGHT_BUBBLE));
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, ActionEvent.CTRL_MASK + ActionEvent.SHIFT_MASK, false), new PointerActionListener(Pointer.Type.LOOK_HERE));

actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), new AbstractAction() {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -1339,7 +1341,7 @@ public void actionPerformed(ActionEvent e) {
Pointer pointer = new Pointer(renderer.getZone(), zp.x, zp.y, 0, type);
// Jamz test move clients to view when using point (for GM only)...
// TODO: Snap player view back when done?
if (MapTool.getPlayer().isGM()) {
if (MapTool.getPlayer().isGM() & type.equals(Pointer.Type.LOOK_HERE)) {
MapTool.serverCommand().enforceZoneView(renderer.getZone().getId(), zp.x, zp.y, renderer.getScale(), renderer.getWidth(), renderer.getHeight());
}
MapTool.serverCommand().showPointer(MapTool.getPlayer().getName(), pointer);
Expand All @@ -1352,11 +1354,24 @@ public void actionPerformed(ActionEvent e) {
// STOP POINTER ACTION
private class StopPointerActionListener extends AbstractAction {
private static final long serialVersionUID = -8508019800264211345L;
private boolean restoreZoneView = false;

public StopPointerActionListener(boolean restore) {
restoreZoneView = restore;
}

public StopPointerActionListener() {
restoreZoneView = false;
}

public void actionPerformed(ActionEvent e) {
if (isShowingPointer) {
isShowingPointer = false;
MapTool.serverCommand().hidePointer(MapTool.getPlayer().getName());

if (MapTool.getPlayer().isGM() & restoreZoneView) {
MapTool.serverCommand().restoreZoneView(renderer.getZone().getId());
}
}
isSpaceDown = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,15 @@ public class PointerOverlay implements ZoneOverlay {
private static BufferedImage POINTER_IMAGE;
private static BufferedImage SPEECH_IMAGE;
private static BufferedImage THOUGHT_IMAGE;
private static BufferedImage LOOK_HERE_IMAGE;

static {
try {
POINTER_IMAGE = ImageUtil.getCompatibleImage("net/rptools/maptool/client/image/arrow.png");
SPEECH_IMAGE = ImageUtil.getCompatibleImage("net/rptools/maptool/client/image/speech.png");
THOUGHT_IMAGE = ImageUtil.getCompatibleImage("net/rptools/maptool/client/image/thought.png");
LOOK_HERE_IMAGE = ImageUtil.getCompatibleImage("net/rptools/maptool/client/image/look_here.png");

} catch (IOException ioe) {
ioe.printStackTrace();
}
Expand All @@ -60,9 +63,9 @@ public void paintOverlay(ZoneRenderer renderer, Graphics2D g) {
BufferedImage image = null;
switch (p.pointer.getType()) {
case ARROW:
image = POINTER_IMAGE;
offX = 2;
offY = -36;
image = POINTER_IMAGE;
break;
case SPEECH_BUBBLE:
offX = -19;
Expand All @@ -78,14 +81,18 @@ public void paintOverlay(ZoneRenderer renderer, Graphics2D g) {
centY = 23;
image = THOUGHT_IMAGE;
break;
case LOOK_HERE:
offX = 0;
offY = -52;
image = LOOK_HERE_IMAGE;
break;
}
g.drawImage(image, (int) sPoint.x + offX, (int) sPoint.y + offY, null);

switch (p.pointer.getType()) {
case ARROW:
GraphicsUtil.drawBoxedString(g, p.player, (int) sPoint.x + POINTER_IMAGE.getWidth() - 10, (int) sPoint.y - POINTER_IMAGE.getHeight() + 15, SwingUtilities.LEFT);
break;

case THOUGHT_BUBBLE:
case SPEECH_BUBBLE:
FontMetrics fm = renderer.getFontMetrics(renderer.getFont());
Expand All @@ -97,6 +104,11 @@ public void paintOverlay(ZoneRenderer renderer, Graphics2D g) {
int y = (int) sPoint.y + offY + centY + fm.getHeight() / 2;
g.drawString(name, x - len / 2, y);
break;
case LOOK_HERE:
GraphicsUtil.drawBoxedString(g, p.player, (int) sPoint.x + LOOK_HERE_IMAGE.getWidth() - 22, (int) sPoint.y + 2, SwingUtilities.LEFT);
break;
default:
break;
}
}
}
Expand Down
18 changes: 16 additions & 2 deletions src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,10 @@ public class ZoneRenderer extends JComponent implements DropTargetListener, Comp

// Show blocked grid lines during AStar moving, for debugging...
private boolean showAstarDebugging = false;

// Store previous view to restore to, eg after GM shows ctrl+shift+space pointer
private double previousScale;
private ZonePoint previousZonePoint;

public static enum TokenMoveCompletion {
TRUE, FALSE, OTHER
Expand Down Expand Up @@ -724,10 +728,22 @@ public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) {
// Our aspect ratio is shorter than server's, so fit to height
scale = scale * height / gmHeight;
}

previousScale = getScale();
previousZonePoint = getCenterPoint();

setScale(scale);
centerOn(new ZonePoint(x, y));
}

public void restoreView() {
log.info("Restoring view: " + previousZonePoint);
log.info("previousScale: " + previousScale);

centerOn(previousZonePoint);
setScale(previousScale);
}

public void forcePlayersView() {
ZonePoint zp = new ScreenPoint(getWidth() / 2, getHeight() / 2).convertToZone(this);
MapTool.serverCommand().enforceZoneView(getZone().getId(), zp.x, zp.y, getScale(), getWidth(), getHeight());
Expand Down Expand Up @@ -3819,8 +3835,6 @@ public SelectionSet(String playerId, GUID tokenGUID, Set<GUID> selectionList) {
if (zone.getGrid().getCapabilities().isPathingSupported()) {
CellPoint tokenPoint = zone.getGrid().convert(new ZonePoint(token.getX(), token.getY()));

log.info("SelectionSet is creating a new walker.");

walker = zone.getGrid().createZoneWalker();
walker.setFootprint(token.getFootprint(zone.getGrid()));
walker.setWaypoints(tokenPoint, tokenPoint);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/rptools/maptool/model/Pointer.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
public class Pointer {

public enum Type {
ARROW, SPEECH_BUBBLE, THOUGHT_BUBBLE
ARROW, SPEECH_BUBBLE, THOUGHT_BUBBLE, LOOK_HERE
}

private GUID zoneGUID;
Expand Down
33 changes: 13 additions & 20 deletions src/main/java/net/rptools/maptool/server/ServerCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,28 +33,19 @@

public interface ServerCommand {
public static enum COMMAND {
bootPlayer, setCampaign, getZone, putZone, removeZone, putAsset, getAsset, removeAsset, putToken, removeToken, draw, updateDrawing, clearAllDrawings, setZoneGridSize, message, undoDraw, showPointer, movePointer, hidePointer, startTokenMove, stopTokenMove, toggleTokenMoveWaypoint, updateTokenMove, setZoneVisibility, enforceZoneView, setZoneHasFoW, exposeFoW, hideFoW, setFoW, putLabel, removeLabel, sendTokensToBack, bringTokensToFront, enforceZone, setServerPolicy, addTopology, removeTopology, renameZone, heartbeat, updateCampaign, updateInitiative, updateTokenInitiative, setVisionType, updateCampaignMacros, setTokenLocation, // NOTE:
// This
// is
// to
// support
// third
// party
// token
// placement
// and
// shouldn't
// be
// depended
// on
// for
// general
// purpose
// token
// movement
// @formatter:off
bootPlayer, setCampaign, getZone, putZone, removeZone, putAsset, getAsset, removeAsset, putToken,
removeToken, draw, updateDrawing, clearAllDrawings, setZoneGridSize, message, undoDraw, showPointer,
movePointer, hidePointer, startTokenMove, stopTokenMove, toggleTokenMoveWaypoint, updateTokenMove,
setZoneVisibility, enforceZoneView, setZoneHasFoW, exposeFoW, hideFoW, setFoW, putLabel, removeLabel,
sendTokensToBack, bringTokensToFront, enforceZone, setServerPolicy, addTopology, removeTopology,
renameZone, heartbeat, updateCampaign, updateInitiative, updateTokenInitiative, setVisionType, updateCampaignMacros,
setTokenLocation, // NOTE: This is to support third party token placement and shouldn't be depended on for general purpose token movement
setLiveTypingLabel, // Experimental
enforceNotification, // Override toggle button to show typing notifications
exposePCArea, setBoard, updateExposedAreaMeta, clearExposedArea
exposePCArea, setBoard, updateExposedAreaMeta, clearExposedArea,
restoreZoneView // Jamz: New command to restore player's view and let GM temporarily center and scale a player's view
// @formatter:on
};

public void bootPlayer(String player);
Expand All @@ -73,6 +64,8 @@ public static enum COMMAND {

public void enforceZoneView(GUID zoneGUID, int x, int y, double scale, int width, int height);

public void restoreZoneView(GUID zoneGUID);

public void setCampaign(Campaign campaign);

public void getZone(GUID zoneGUID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ public void handleMethod(String id, String method, Object... parameters) {
case enforceZoneView:
enforceZoneView(context.getGUID(0), context.getInt(1), context.getInt(2), context.getDouble(3), context.getInt(4), context.getInt(5));
break;
case restoreZoneView:
restoreZoneView(context.getGUID(0));
break;
case exposeFoW:
exposeFoW(context.getGUID(0), (Area) context.get(1), (Set<GUID>) context.get(2));
break;
Expand Down Expand Up @@ -316,6 +319,10 @@ public void enforceZoneView(GUID zoneGUID, int x, int y, double scale, int width
forwardToClients();
}

public void restoreZoneView(GUID zoneGUID) {
forwardToClients();
}

public void exposeFoW(GUID zoneGUID, Area area, Set<GUID> selectedToks) {
Zone zone = server.getCampaign().getZone(zoneGUID); // this can return a zone that's not in MapToolFrame.zoneRenderList???
zone.exposeArea(area, selectedToks);
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 3c3f3aa

Please sign in to comment.