diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bd8b51..1747ade 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## In development ### New features - If the [Terrain Ruler module](https://foundryvtt.com/packages/terrain-ruler/) is installed and activated, Drag Ruler will now take difficult terrain that was placed with the [TerrainLayer module](https://foundryvtt.com/packages/TerrainLayer/) into account. +- The GM's Drag Ruler can now be hidden from non GM players via a setting. ## 1.3.4 ### Module compatibility diff --git a/lang/en.json b/lang/en.json index ac98613..5793d4a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -21,6 +21,10 @@ "name": "Show PC speed to everyone", "hint": "If enabled the coloring based on actor speed for player characters will shown to everyone, even if they don't have observer permission for the character sheet." }, + "showGMRulerToPlayers": { + "name": "Show GM ruler to players", + "hint": "If disabled the ruler of GMs will not be shown for non-GM players" + }, "speedProviderSettings": { "name": "Speed Provider Settings", "hint": "The Speed Provider Settings contain all the game system specific settings.", diff --git a/src/main.js b/src/main.js index fcf8e23..974dc22 100644 --- a/src/main.js +++ b/src/main.js @@ -84,6 +84,9 @@ function hookRulerFunctions() { const originalUpdate = Ruler.prototype.update Ruler.prototype.update = function (data) { + // Don't show a GMs drag ruler to non GM players + if (data.draggedToken && this.user.isGM && !game.user.isGM && !game.settings.get(settingsKey, "showGMRulerToPlayers")) + return if (data.draggedToken) { this.draggedToken = canvas.tokens.get(data.draggedToken) } @@ -99,6 +102,12 @@ function hookRulerFunctions() { return originalMeasure.call(this, destination, options) } } + + const originalEndMeasurement = Ruler.prototype._endMeasurement + Ruler.prototype._endMeasurement = function () { + originalEndMeasurement.call(this) + this.draggedToken = null + } } function hookKeyboardManagerFunctions() { @@ -167,15 +176,15 @@ function onTokenDragLeftDrop(event) { if (!ruler.isDragRuler) return false const selectedTokens = canvas.tokens.controlled + ruler._state = Ruler.STATES.MOVING moveTokens.call(ruler, ruler.draggedToken, selectedTokens) - ruler.draggedToken = null return true } function onTokenDragLeftCancel(event) { // This function is invoked by right clicking const ruler = canvas.controls.ruler - if (!ruler.isDragRuler) + if (!ruler.isDragRuler || ruler._state === Ruler.STATES.MOVING) return false if (ruler._state === Ruler.STATES.MEASURING) { if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) { @@ -225,7 +234,6 @@ function deleteWaypoint() { else { const token = ruler.draggedToken ruler._endMeasurement() - ruler.draggedToken = null // Deactivate the drag workflow in mouse token.mouseInteractionManager._deactivateDragEvents(); diff --git a/src/settings.js b/src/settings.js index 7075681..edae1ca 100644 --- a/src/settings.js +++ b/src/settings.js @@ -29,6 +29,15 @@ export function registerSettings() { default: true, }) + game.settings.register(settingsKey, "showGMRulerToPlayers", { + name: "drag-ruler.settings.showGMRulerToPlayers.name", + hint: "drag-ruler.settings.showGMRulerToPlayers.hint", + scope: "world", + config: true, + type: Boolean, + default: true, + }) + // This setting will be modified by the api if modules register to it game.settings.register(settingsKey, "speedProvider", { scope: "world",