Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10346a7dbc | |||
| 6adb69829e | |||
| 94f5a49263 |
+7
-3
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.2.1
|
||||||
|
### Compatiblity
|
||||||
|
- Drag Ruler is now compatible with Hex Token Size Support. For compatibility Hex Token Size Support Version 0.5.4 or higher is required. Thanks to Ourobor for helping making this possible.
|
||||||
|
|
||||||
## 1.2.0
|
## 1.2.0
|
||||||
### New features
|
### New features
|
||||||
- Right click and spacebar can now be swapped, allowing to place waypoints with right click and removing them with spacebar
|
- Right click and spacebar can now be swapped, allowing to place waypoints with right click and removing them with spacebar
|
||||||
@@ -9,7 +13,7 @@
|
|||||||
- Disabling snap to grid with shift now works as expected
|
- Disabling snap to grid with shift now works as expected
|
||||||
- Fixed a bug where the ruler would sometimes jump to a different target location when deleting a waypoint
|
- Fixed a bug where the ruler would sometimes jump to a different target location when deleting a waypoint
|
||||||
|
|
||||||
## v1.1.1
|
## 1.1.1
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
- Fixed a bug where tokens wouldn't be moved to the corect end position on gridless maps
|
- Fixed a bug where tokens wouldn't be moved to the corect end position on gridless maps
|
||||||
- Ruler now appears immediately when the token is being dragged
|
- Ruler now appears immediately when the token is being dragged
|
||||||
@@ -17,7 +21,7 @@
|
|||||||
- This change has no impact on the distance that is being measured
|
- This change has no impact on the distance that is being measured
|
||||||
- In addition to the cosmetical aspect this also fixes a bug that allowed players to glitch through walls
|
- In addition to the cosmetical aspect this also fixes a bug that allowed players to glitch through walls
|
||||||
|
|
||||||
## v1.1.0
|
## 1.1.0
|
||||||
### New features
|
### 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 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
|
- The drag ruler won't be shown to other players if they cannot see the dragged token
|
||||||
@@ -25,7 +29,7 @@
|
|||||||
### Bugfixes
|
### 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)
|
- 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
|
## 1.0.1
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
- The GM can now move tokens through walls
|
- The GM can now move tokens through walls
|
||||||
- It is now possible to move multiple tokens with Drag Ruler enabled
|
- It is now possible to move multiple tokens with Drag Ruler enabled
|
||||||
|
|||||||
+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.2.0",
|
"version": "1.2.1",
|
||||||
"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.2.0.zip",
|
"download": "https://github.com/manuelVo/foundryvtt-drag-ruler/archive/v1.2.1.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",
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
export function getHexSizeSupportTokenGridCenter(token) {
|
||||||
|
const tokenCenterOffset = CONFIG.hexSizeSupport.getCenterOffset(token)
|
||||||
|
const tokenCenter = {x: token.x + tokenCenterOffset.x, y: token.y + tokenCenterOffset.y}
|
||||||
|
if (token.getFlag("hex-size-support", "borderSize") % 2 === 1)
|
||||||
|
return tokenCenter
|
||||||
|
if (canvas.grid.grid.columns) {
|
||||||
|
let hexOffset = canvas.grid.w / 2
|
||||||
|
if (!CONFIG.hexSizeSupport.getAltOrientationFlag(token))
|
||||||
|
hexOffset *= -1
|
||||||
|
tokenCenter.x += hexOffset
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let hexOffset = canvas.grid.h / 2
|
||||||
|
if (CONFIG.hexSizeSupport.getAltOrientationFlag(token))
|
||||||
|
hexOffset *= -1
|
||||||
|
tokenCenter.y += hexOffset
|
||||||
|
}
|
||||||
|
return tokenCenter
|
||||||
|
}
|
||||||
+36
-25
@@ -1,6 +1,7 @@
|
|||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
import {availableSpeedProviders, currentSpeedProvider, registerModule, registerSystem, setCurrentSpeedProvider} from "./api.js"
|
import {availableSpeedProviders, currentSpeedProvider, registerModule, registerSystem, setCurrentSpeedProvider} from "./api.js"
|
||||||
|
import {getHexSizeSupportTokenGridCenter} from "./compatibility.js"
|
||||||
import {measure, moveTokens, onMouseMove} from "./foundry_imports.js"
|
import {measure, moveTokens, onMouseMove} from "./foundry_imports.js"
|
||||||
import {registerSettings, settingsKey} from "./settings.js"
|
import {registerSettings, settingsKey} from "./settings.js"
|
||||||
|
|
||||||
@@ -130,52 +131,61 @@ function onKeyX(up) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onKeyShift(up) {
|
function onKeyShift(up) {
|
||||||
if (!canvas.controls.ruler.isDragRuler)
|
const ruler = canvas.controls.ruler
|
||||||
|
if (!ruler.isDragRuler)
|
||||||
return false
|
return false
|
||||||
|
|
||||||
const mousePosition = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.tokens)
|
const mousePosition = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.tokens)
|
||||||
const rulerOffset = canvas.controls.ruler.rulerOffset
|
const rulerOffset = ruler.rulerOffset
|
||||||
const measurePosition = {x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y}
|
const measurePosition = {x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y}
|
||||||
canvas.controls.ruler.measure(measurePosition, {snap: up})
|
ruler.measure(measurePosition, {snap: up})
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTokenLeftDragStart(event) {
|
function onTokenLeftDragStart(event) {
|
||||||
canvas.controls.ruler.draggedToken = this
|
const ruler = canvas.controls.ruler
|
||||||
const tokenCenter = {x: this.x + canvas.grid.grid.w / 2, y: this.y + canvas.grid.grid.h / 2}
|
ruler.draggedToken = this
|
||||||
canvas.controls.ruler.clear();
|
let tokenCenter
|
||||||
canvas.controls.ruler._state = Ruler.STATES.STARTING;
|
if (canvas.grid.isHex && game.modules.get("hex-size-support")?.active && CONFIG.hexSizeSupport.getAltSnappingFlag(this))
|
||||||
canvas.controls.ruler.rulerOffset = {x: tokenCenter.x - event.data.origin.x, y: tokenCenter.y - event.data.origin.y}
|
tokenCenter = getHexSizeSupportTokenGridCenter(this)
|
||||||
addWaypoint.call(canvas.controls.ruler, tokenCenter, false);
|
else
|
||||||
|
tokenCenter = {x: this.x + canvas.grid.grid.w / 2, y: this.y + canvas.grid.grid.h / 2}
|
||||||
|
ruler.clear();
|
||||||
|
ruler._state = Ruler.STATES.STARTING;
|
||||||
|
ruler.rulerOffset = {x: tokenCenter.x - event.data.origin.x, y: tokenCenter.y - event.data.origin.y}
|
||||||
|
addWaypoint.call(ruler, tokenCenter, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTokenLeftDragMove(event) {
|
function onTokenLeftDragMove(event) {
|
||||||
if (canvas.controls.ruler.isDragRuler)
|
const ruler = canvas.controls.ruler
|
||||||
onMouseMove.call(canvas.controls.ruler, event)
|
if (ruler.isDragRuler)
|
||||||
|
onMouseMove.call(ruler, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTokenDragLeftDrop(event) {
|
function onTokenDragLeftDrop(event) {
|
||||||
if (!canvas.controls.ruler.isDragRuler)
|
const ruler = canvas.controls.ruler
|
||||||
|
if (!ruler.isDragRuler)
|
||||||
return false
|
return false
|
||||||
const selectedTokens = canvas.tokens.placeables.filter(token => token._controlled)
|
const selectedTokens = canvas.tokens.placeables.filter(token => token._controlled)
|
||||||
moveTokens.call(canvas.controls.ruler, canvas.controls.ruler.draggedToken, selectedTokens)
|
moveTokens.call(ruler, ruler.draggedToken, selectedTokens)
|
||||||
canvas.controls.ruler.draggedToken = null
|
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
|
||||||
if (!canvas.controls.ruler.isDragRuler)
|
const ruler = canvas.controls.ruler
|
||||||
|
if (!ruler.isDragRuler)
|
||||||
return false
|
return false
|
||||||
if (canvas.controls.ruler._state === Ruler.STATES.MEASURING) {
|
if (ruler._state === Ruler.STATES.MEASURING) {
|
||||||
if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) {
|
if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) {
|
||||||
if (canvas.controls.ruler.waypoints.length > 1)
|
if (ruler.waypoints.length > 1)
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
deleteWaypoint()
|
deleteWaypoint()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
const snap = !event.shiftKey
|
const snap = !event.shiftKey
|
||||||
addWaypoint.call(canvas.controls.ruler, canvas.controls.ruler.destination, snap)
|
addWaypoint.call(ruler, ruler.destination, snap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
@@ -204,16 +214,17 @@ function addWaypoint(point, snap=true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function deleteWaypoint() {
|
function deleteWaypoint() {
|
||||||
if (canvas.controls.ruler.waypoints.length > 1) {
|
const ruler = canvas.controls.ruler
|
||||||
|
if (ruler.waypoints.length > 1) {
|
||||||
const mousePosition = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.tokens)
|
const mousePosition = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.tokens)
|
||||||
const rulerOffset = canvas.controls.ruler.rulerOffset
|
const rulerOffset = ruler.rulerOffset
|
||||||
canvas.controls.ruler._removeWaypoint({x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y})
|
ruler._removeWaypoint({x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y})
|
||||||
game.user.broadcastActivity({ruler: canvas.controls.ruler})
|
game.user.broadcastActivity({ruler: ruler})
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const token = canvas.controls.ruler.draggedToken
|
const token = ruler.draggedToken
|
||||||
canvas.controls.ruler._endMeasurement()
|
ruler._endMeasurement()
|
||||||
canvas.controls.ruler.draggedToken = null
|
ruler.draggedToken = null
|
||||||
|
|
||||||
// Deactivate the drag workflow in mouse
|
// Deactivate the drag workflow in mouse
|
||||||
token.mouseInteractionManager._deactivateDragEvents();
|
token.mouseInteractionManager._deactivateDragEvents();
|
||||||
|
|||||||
Reference in New Issue
Block a user