Add a setting that allows hiding the GM's drag ruler from non gm players (resolves #23)

This commit is contained in:
Manuel Vögele
2021-03-09 12:53:09 +01:00
parent 384de1a1b5
commit 862477c698
4 changed files with 25 additions and 3 deletions
+1
View File
@@ -1,6 +1,7 @@
## In development ## In development
### New features ### 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. - 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 ## 1.3.4
### Module compatibility ### Module compatibility
+4
View File
@@ -21,6 +21,10 @@
"name": "Show PC speed to everyone", "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." "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": { "speedProviderSettings": {
"name": "Speed Provider Settings", "name": "Speed Provider Settings",
"hint": "The Speed Provider Settings contain all the game system specific settings.", "hint": "The Speed Provider Settings contain all the game system specific settings.",
+11 -3
View File
@@ -84,6 +84,9 @@ function hookRulerFunctions() {
const originalUpdate = Ruler.prototype.update const originalUpdate = Ruler.prototype.update
Ruler.prototype.update = function (data) { 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) { if (data.draggedToken) {
this.draggedToken = canvas.tokens.get(data.draggedToken) this.draggedToken = canvas.tokens.get(data.draggedToken)
} }
@@ -99,6 +102,12 @@ function hookRulerFunctions() {
return originalMeasure.call(this, destination, options) return originalMeasure.call(this, destination, options)
} }
} }
const originalEndMeasurement = Ruler.prototype._endMeasurement
Ruler.prototype._endMeasurement = function () {
originalEndMeasurement.call(this)
this.draggedToken = null
}
} }
function hookKeyboardManagerFunctions() { function hookKeyboardManagerFunctions() {
@@ -167,15 +176,15 @@ function onTokenDragLeftDrop(event) {
if (!ruler.isDragRuler) if (!ruler.isDragRuler)
return false return false
const selectedTokens = canvas.tokens.controlled const selectedTokens = canvas.tokens.controlled
ruler._state = Ruler.STATES.MOVING
moveTokens.call(ruler, ruler.draggedToken, selectedTokens) moveTokens.call(ruler, ruler.draggedToken, selectedTokens)
ruler.draggedToken = null
return true return true
} }
function onTokenDragLeftCancel(event) { function onTokenDragLeftCancel(event) {
// This function is invoked by right clicking // This function is invoked by right clicking
const ruler = canvas.controls.ruler const ruler = canvas.controls.ruler
if (!ruler.isDragRuler) if (!ruler.isDragRuler || ruler._state === Ruler.STATES.MOVING)
return false return false
if (ruler._state === Ruler.STATES.MEASURING) { if (ruler._state === Ruler.STATES.MEASURING) {
if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) { if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) {
@@ -225,7 +234,6 @@ function deleteWaypoint() {
else { else {
const token = ruler.draggedToken const token = ruler.draggedToken
ruler._endMeasurement() ruler._endMeasurement()
ruler.draggedToken = null
// Deactivate the drag workflow in mouse // Deactivate the drag workflow in mouse
token.mouseInteractionManager._deactivateDragEvents(); token.mouseInteractionManager._deactivateDragEvents();
+9
View File
@@ -29,6 +29,15 @@ export function registerSettings() {
default: true, 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 // This setting will be modified by the api if modules register to it
game.settings.register(settingsKey, "speedProvider", { game.settings.register(settingsKey, "speedProvider", {
scope: "world", scope: "world",