Skip to content

Commit

Permalink
Fix auto-expose fog on token movement
Browse files Browse the repository at this point in the history
- Fix auto-expose fog on token movement so that tokens expose the fog on personal servers if moved or if their facing is changed
- Change text of setting to be clearer
- Close #962
  • Loading branch information
Merudo committed Dec 7, 2019
1 parent 4570bfe commit 7be9bd0
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 25 deletions.
25 changes: 17 additions & 8 deletions src/main/java/net/rptools/maptool/client/tool/FacingTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,20 @@ public void mouseMoved(MouseEvent e) {
}
Area visibleArea = null;
Set<GUID> remoteSelected = new HashSet<GUID>();

String name = MapTool.getPlayer().getName();
boolean isGM = MapTool.getPlayer().isGM();
boolean ownerReveal; // if true, reveal FoW if current player owns the token.
boolean hasOwnerReveal; // if true, reveal FoW if token has an owner.
boolean noOwnerReveal; // if true, reveal FoW if token has no owners.
if (MapTool.isPersonalServer()) {
ownerReveal =
hasOwnerReveal = noOwnerReveal = AppPreferences.getAutoRevealVisionOnGMMovement();
} else {
ownerReveal = MapTool.getServerPolicy().isAutoRevealOnMovement();
hasOwnerReveal = isGM && MapTool.getServerPolicy().isAutoRevealOnMovement();
noOwnerReveal = isGM && MapTool.getServerPolicy().getGmRevealsVisionForUnownedTokens();
}
for (GUID tokenGUID : selectedTokenSet) {
Token token = renderer.getZone().getToken(tokenGUID);
if (token == null) {
Expand All @@ -122,16 +136,11 @@ public void mouseMoved(MouseEvent e) {
// remoteSelected.add(token.getId());
// renderer.getZone().exposeArea(visibleArea, token);
// }

boolean revealFog = false;
if (renderer.getZone().hasFog()) {
if ((AppPreferences.getAutoRevealVisionOnGMMovement() && MapTool.getPlayer().isGM())
|| MapTool.getServerPolicy().isAutoRevealOnMovement()) {
if (token.isOwner(MapTool.getPlayer().getName())) revealFog = true;
else if (MapTool.getPlayer().isGM())
if (token.hasOwners() || MapTool.getServerPolicy().getGmRevealsVisionForUnownedTokens())
revealFog = true;
}
if (ownerReveal && token.isOwner(name)) revealFog = true;
else if (hasOwnerReveal && token.hasOwners()) revealFog = true;
else if (noOwnerReveal && !token.hasOwners()) revealFog = true;
}

if (revealFog) {
Expand Down
34 changes: 19 additions & 15 deletions src/main/java/net/rptools/maptool/client/tool/PointerTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,28 +262,32 @@ public void stopTokenDrag() {
public void exposeFoW(ZonePoint p) {
// if has fog(required)
// and ((isGM with pref set) OR serverPolicy allows auto reveal by players)
if (renderer.getZone().hasFog()
&& ((AppPreferences.getAutoRevealVisionOnGMMovement() && MapTool.getPlayer().isGM())
|| MapTool.getServerPolicy().isAutoRevealOnMovement())) {

String name = MapTool.getPlayer().getName();
boolean isGM = MapTool.getPlayer().isGM();
boolean ownerReveal; // if true, reveal FoW if current player owns the token.
boolean hasOwnerReveal; // if true, reveal FoW if token has an owner.
boolean noOwnerReveal; // if true, reveal FoW if token has no owners.

if (MapTool.isPersonalServer()) {
ownerReveal =
hasOwnerReveal = noOwnerReveal = AppPreferences.getAutoRevealVisionOnGMMovement();
} else {
ownerReveal = MapTool.getServerPolicy().isAutoRevealOnMovement();
hasOwnerReveal = isGM && MapTool.getServerPolicy().isAutoRevealOnMovement();
noOwnerReveal = isGM && MapTool.getServerPolicy().getGmRevealsVisionForUnownedTokens();
}
if (renderer.getZone().hasFog() && (ownerReveal || hasOwnerReveal || noOwnerReveal)) {
Set<GUID> exposeSet = new HashSet<GUID>();
Zone zone = renderer.getZone();
for (GUID tokenGUID : renderer.getOwnedTokens(renderer.getSelectedTokenSet())) {
Token token = zone.getToken(tokenGUID);
if (token == null) {
continue;
}

// Old logic
// if (MapTool.getPlayer().isGM() || token.isOwner(MapTool.getPlayer().getName())) {
// exposeSet.add(tokenGUID);
// }

// Jamz: New logic so GM only reveals FoW for unowned tokens if server option is enabled
if (token.isOwner(MapTool.getPlayer().getName())) exposeSet.add(tokenGUID);
else if (MapTool.getPlayer().isGM() && token.hasOwners()) exposeSet.add(tokenGUID);
else if (MapTool.getPlayer().isGM()
&& MapTool.getServerPolicy().getGmRevealsVisionForUnownedTokens())
exposeSet.add(tokenGUID);
if (ownerReveal && token.isOwner(name)) exposeSet.add(tokenGUID);
else if (hasOwnerReveal && token.hasOwners()) exposeSet.add(tokenGUID);
else if (noOwnerReveal && !token.hasOwners()) exposeSet.add(tokenGUID);
}

if (p != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9542,13 +9542,13 @@ Disabled (default): show tooltips for macroLinks</at>
</at>
<at name="width">464</at>
<at name="name"/>
<at name="text">Auto-expose fog on token movement (GM Only)</at>
<at name="text">Auto-expose fog on token movement (personal server)</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="toolTipText">If enabled, the fog of war is automatically exposed as a token moves on maps with a grid. Gridless maps cannot auto-expose fog.</at>
<at name="toolTipText">If enabled, the fog of war is automatically exposed as a token moves on maps with a grid. Gridless maps cannot auto-expose fog. When running a server, this setting is ignored in favor of the settings in the 'Start Server' dialog.</at>
<at name="height">14</at>
</object>
</at>
Expand Down

0 comments on commit 7be9bd0

Please sign in to comment.