Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fe89a871c9 | |||
| 62c965b499 | |||
| 4149f0e351 | |||
| 5c43651925 | |||
| 59f2e67717 | |||
| 33cb9a2ba2 | |||
| c8a7352d5f | |||
| 135a3091b0 |
@@ -1,3 +1,11 @@
|
|||||||
|
## v1.1.0
|
||||||
|
### New features
|
||||||
|
- The drag ruler will now be colored for other players than the dragging player as well (only if they have at least observer permissions for that token)
|
||||||
|
- The drag ruler won't be shown to other players if they cannot see the dragged token
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- Fixed a bug where Drag Ruler wouldn't work at all on some windows installations (specificially where the `foundry.js` has `CRLF` line endings)
|
||||||
|
|
||||||
## v1.0.1
|
## v1.0.1
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
- The GM can now move tokens through walls
|
- The GM can now move tokens through walls
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
[](https://ko-fi.com/staebchenfisch)
|
||||||
|
|
||||||
# Drag Ruler
|
# Drag Ruler
|
||||||
This module shows a ruler when you drag a token to infrom you how far you've dragged the token from it's start point. Additionally, if you're using a grid, the spaces the token will travel though will be colored depending on your tokens speed.
|
This module shows a ruler when you drag a token to infrom you how far you've dragged the token from it's start point. Additionally, if you're using a grid, the spaces the token will travel though will be colored depending on your tokens speed.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"drag-ruler": {
|
"drag-ruler": {
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"alwaysShowSpeedForPCs": {
|
||||||
|
"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."
|
||||||
|
},
|
||||||
"dashMultiplier": {
|
"dashMultiplier": {
|
||||||
"name": "Dash Multiplier",
|
"name": "Dash Multiplier",
|
||||||
"hint": "This can be used to give tokens a secondary speed during coloring of the measured path. Set it to 0 to disable the secondary speed."
|
"hint": "This can be used to give tokens a secondary speed during coloring of the measured path. Set it to 0 to disable the secondary speed."
|
||||||
|
|||||||
+2
-2
@@ -2,7 +2,7 @@
|
|||||||
"name": "drag-ruler",
|
"name": "drag-ruler",
|
||||||
"title": "Drag Ruler",
|
"title": "Drag Ruler",
|
||||||
"description": "When dragging a token displays a ruler showing how far you've moved that token.",
|
"description": "When dragging a token displays a ruler showing how far you've moved that token.",
|
||||||
"version": "1.0.1",
|
"version": "1.1.0",
|
||||||
"minimumCoreVersion" : "0.7.9",
|
"minimumCoreVersion" : "0.7.9",
|
||||||
"compatibleCoreVersion" : "0.7.9",
|
"compatibleCoreVersion" : "0.7.9",
|
||||||
"authors": [
|
"authors": [
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"url": "https://github.com/manuelVo/foundryvtt-drag-ruler",
|
"url": "https://github.com/manuelVo/foundryvtt-drag-ruler",
|
||||||
"download": "https://github.com/manuelVo/foundryvtt-drag-ruler/archive/v1.0.1.zip",
|
"download": "https://github.com/manuelVo/foundryvtt-drag-ruler/archive/v1.1.0.zip",
|
||||||
"manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/master/module.json",
|
"manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/master/module.json",
|
||||||
"readme": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/README.md",
|
"readme": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/README.md",
|
||||||
"changelog": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/CHANGELOG.md",
|
"changelog": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/CHANGELOG.md",
|
||||||
|
|||||||
+39
-7
@@ -7,7 +7,7 @@ import {registerSettings, settingsKey} from "./settings.js"
|
|||||||
Hooks.once("init", () => {
|
Hooks.once("init", () => {
|
||||||
registerSettings()
|
registerSettings()
|
||||||
hookTokenDragHandlers()
|
hookTokenDragHandlers()
|
||||||
hookRulerHandlers()
|
hookRulerFunctions()
|
||||||
patchRulerMeasure()
|
patchRulerMeasure()
|
||||||
patchRulerHighlightMeasurement()
|
patchRulerHighlightMeasurement()
|
||||||
|
|
||||||
@@ -27,11 +27,13 @@ Hooks.once("ready", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Hooks.on("canvasReady", () => {
|
Hooks.on("canvasReady", () => {
|
||||||
canvas.controls.ruler.draggedToken = null
|
canvas.controls.rulers.children.forEach(ruler => {
|
||||||
Object.defineProperty(canvas.controls.ruler, "isDragRuler", {
|
ruler.draggedToken = null
|
||||||
get: function isDragRuler() {
|
Object.defineProperty(ruler, "isDragRuler", {
|
||||||
return Boolean(this.draggedToken) // If draggedToken is set this is a drag ruler
|
get: function isDragRuler() {
|
||||||
}
|
return Boolean(this.draggedToken) // If draggedToken is set this is a drag ruler
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -63,7 +65,7 @@ function hookTokenDragHandlers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function hookRulerHandlers() {
|
function hookRulerFunctions() {
|
||||||
const originalMoveTokenHandler = Ruler.prototype.moveToken
|
const originalMoveTokenHandler = Ruler.prototype.moveToken
|
||||||
Ruler.prototype.moveToken = function (event) {
|
Ruler.prototype.moveToken = function (event) {
|
||||||
const eventHandled = onRulerMoveToken.call(this, event)
|
const eventHandled = onRulerMoveToken.call(this, event)
|
||||||
@@ -71,6 +73,22 @@ function hookRulerHandlers() {
|
|||||||
return originalMoveTokenHandler.call(this, event)
|
return originalMoveTokenHandler.call(this, event)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const originalToJSON = Ruler.prototype.toJSON
|
||||||
|
Ruler.prototype.toJSON = function () {
|
||||||
|
const json = originalToJSON.call(this)
|
||||||
|
if (this.draggedToken)
|
||||||
|
json["draggedToken"] = this.draggedToken.data._id
|
||||||
|
return json
|
||||||
|
}
|
||||||
|
|
||||||
|
const originalUpdate = Ruler.prototype.update
|
||||||
|
Ruler.prototype.update = function (data) {
|
||||||
|
if (data.draggedToken) {
|
||||||
|
this.draggedToken = canvas.tokens.get(data.draggedToken)
|
||||||
|
}
|
||||||
|
originalUpdate.call(this, data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTokenLeftDragStart(event) {
|
function onTokenLeftDragStart(event) {
|
||||||
@@ -125,10 +143,16 @@ function strInsertAfter(haystack, needle, strToInsert) {
|
|||||||
// These patches were written with foundry-0.7.9.js as reference
|
// These patches were written with foundry-0.7.9.js as reference
|
||||||
function patchRulerMeasure() {
|
function patchRulerMeasure() {
|
||||||
let code = Ruler.prototype.measure.toString()
|
let code = Ruler.prototype.measure.toString()
|
||||||
|
// Replace CRLF with LF in case foundry.js has CRLF for some reason
|
||||||
|
code = code.replace(/\r\n/g, "\n")
|
||||||
// Remove function signature and closing curly bracket (those are on the first and last line)
|
// Remove function signature and closing curly bracket (those are on the first and last line)
|
||||||
code = code.slice(code.indexOf("\n"), code.lastIndexOf("\n"))
|
code = code.slice(code.indexOf("\n"), code.lastIndexOf("\n"))
|
||||||
code = strInsertAfter(code, "for ( let [i, d] of distances.entries() ) {\n", "segments[i].startDistance = totalDistance\n")
|
code = strInsertAfter(code, "for ( let [i, d] of distances.entries() ) {\n", "segments[i].startDistance = totalDistance\n")
|
||||||
code = strInsertAfter(code, "this._highlightMeasurement(ray", ", s.startDistance")
|
code = strInsertAfter(code, "this._highlightMeasurement(ray", ", s.startDistance")
|
||||||
|
|
||||||
|
// Don't show ruler if the measured token is invisible
|
||||||
|
code = "if (this.isDragRuler && !this.draggedToken.isVisible) return [];" + code
|
||||||
|
|
||||||
Ruler.prototype.measure = new Function("destination", "{gridSpaces=true}={}", code)
|
Ruler.prototype.measure = new Function("destination", "{gridSpaces=true}={}", code)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,6 +174,12 @@ function nativeSpeedProvider(token, playercolor) {
|
|||||||
function getColorForDistance(startDistance, subDistance) {
|
function getColorForDistance(startDistance, subDistance) {
|
||||||
if (!this.isDragRuler)
|
if (!this.isDragRuler)
|
||||||
return this.color
|
return this.color
|
||||||
|
// Don't apply colors if the current user doesn't have at least observer permissions
|
||||||
|
if (this.draggedToken.actor.permission < 2) {
|
||||||
|
// If this is a pc and alwaysShowSpeedForPCs is enabled we show the color anyway
|
||||||
|
if (!(this.draggedToken.actor.data.type === "character" && game.settings.get(settingsKey, "alwaysShowSpeedForPCs")))
|
||||||
|
return this.color
|
||||||
|
}
|
||||||
const distance = startDistance + subDistance
|
const distance = startDistance + subDistance
|
||||||
const ranges = currentSpeedProvider(this.draggedToken, this.color)
|
const ranges = currentSpeedProvider(this.draggedToken, this.color)
|
||||||
if (ranges.length === 0)
|
if (ranges.length === 0)
|
||||||
@@ -165,6 +195,8 @@ function getColorForDistance(startDistance, subDistance) {
|
|||||||
// These patches were written with foundry-0.7.9.js as reference
|
// These patches were written with foundry-0.7.9.js as reference
|
||||||
function patchRulerHighlightMeasurement() {
|
function patchRulerHighlightMeasurement() {
|
||||||
let code = Ruler.prototype._highlightMeasurement.toString()
|
let code = Ruler.prototype._highlightMeasurement.toString()
|
||||||
|
// Replace CRLF with LF in case foundry.js has CRLF for some reason
|
||||||
|
code = code.replace(/\r\n/g, "\n")
|
||||||
// Remove function signature and closing curly bracket (those are on the first and last line)
|
// Remove function signature and closing curly bracket (those are on the first and last line)
|
||||||
code = code.slice(code.indexOf("\n"), code.lastIndexOf("\n"))
|
code = code.slice(code.indexOf("\n"), code.lastIndexOf("\n"))
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,15 @@ import {getDefaultDashMultiplier, getDefaultSpeedAttribute} from "./systems.js"
|
|||||||
export const settingsKey = "drag-ruler";
|
export const settingsKey = "drag-ruler";
|
||||||
|
|
||||||
export function registerSettings() {
|
export function registerSettings() {
|
||||||
|
game.settings.register(settingsKey, "alwaysShowSpeedForPCs", {
|
||||||
|
name: "drag-ruler.settings.alwaysShowSpeedForPCs.name",
|
||||||
|
hint: "drag-ruler.settings.alwaysShowSpeedForPCs.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", {
|
||||||
name: "drag-ruler.settings.speedProvider.name",
|
name: "drag-ruler.settings.speedProvider.name",
|
||||||
|
|||||||
Reference in New Issue
Block a user