Add support for the Toggle Snap To Grid module (#97)
This commit is contained in:
+18
-9
@@ -1,7 +1,7 @@
|
||||
import {measure} from "./foundry_imports.js"
|
||||
import {getMovementHistory} from "./movement_tracking.js";
|
||||
import {settingsKey} from "./settings.js";
|
||||
import {getSnapPointForEntity} from "./util.js";
|
||||
import {getSnapPointForEntity, setSnapParameterOnOptions} from "./util.js";
|
||||
|
||||
export class DragRulerRuler extends Ruler {
|
||||
// Functions below are overridden versions of functions in Ruler
|
||||
@@ -22,12 +22,15 @@ export class DragRulerRuler extends Ruler {
|
||||
// This function is invoked by left clicking
|
||||
if (!this.isDragRuler)
|
||||
return await super.moveToken(event);
|
||||
|
||||
let options = {};
|
||||
setSnapParameterOnOptions(this, event, options);
|
||||
|
||||
if (!game.settings.get(settingsKey, "swapSpacebarRightClick")) {
|
||||
const snap = !event.shiftKey;
|
||||
this.dragRulerAddWaypoint(this.destination, snap);
|
||||
this.dragRulerAddWaypoint(this.destination, options);
|
||||
}
|
||||
else {
|
||||
this.dragRulerDeleteWaypoint();
|
||||
this.dragRulerDeleteWaypoint(event, options);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +55,7 @@ export class DragRulerRuler extends Ruler {
|
||||
else
|
||||
this.draggedEntity = canvas.templates.get(data.draggedEntity);
|
||||
}
|
||||
|
||||
super.update(data);
|
||||
}
|
||||
|
||||
@@ -70,8 +74,9 @@ export class DragRulerRuler extends Ruler {
|
||||
}
|
||||
|
||||
// The functions below aren't present in the orignal Ruler class and are added by Drag Ruler
|
||||
dragRulerAddWaypoint(point, snap=true) {
|
||||
if (snap) {
|
||||
dragRulerAddWaypoint(point, options={}) {
|
||||
options.snap = options.snap ?? true;
|
||||
if (options.snap) {
|
||||
point = getSnapPointForEntity(point.x, point.y, this.draggedEntity);
|
||||
}
|
||||
this.waypoints.push(new PIXI.Point(point.x, point.y));
|
||||
@@ -91,12 +96,16 @@ export class DragRulerRuler extends Ruler {
|
||||
this.labels.removeChildren().forEach(c => c.destroy());
|
||||
}
|
||||
|
||||
dragRulerDeleteWaypoint(event={preventDefault: () => {return}}) {
|
||||
dragRulerDeleteWaypoint(event={preventDefault: () => {return}}, options={}) {
|
||||
options.snap = options.snap ?? true;
|
||||
if (this.waypoints.filter(w => !w.isPrevious).length > 1) {
|
||||
event.preventDefault();
|
||||
const mousePosition = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.tokens);
|
||||
const rulerOffset = this.rulerOffset;
|
||||
this._removeWaypoint({x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y});
|
||||
|
||||
// Options are not passed to _removeWaypoint in vanilla Foundry.
|
||||
// Send them in case other modules have overriden that behavior and accept an options parameter (Toggle Snap to Grid)
|
||||
this._removeWaypoint({x: mousePosition.x + rulerOffset.x, y: mousePosition.y + rulerOffset.y}, options);
|
||||
game.user.broadcastActivity({ruler: this});
|
||||
}
|
||||
else {
|
||||
@@ -123,7 +132,7 @@ export class DragRulerRuler extends Ruler {
|
||||
if (game.settings.get(settingsKey, "enableMovementHistory"))
|
||||
this.dragRulerAddWaypointHistory(getMovementHistory(this.draggedEntity));
|
||||
for (const waypoint of waypoints) {
|
||||
this.dragRulerAddWaypoint(waypoint, false);
|
||||
this.dragRulerAddWaypoint(waypoint, {snap: false});
|
||||
}
|
||||
this.measure(this.destination);
|
||||
game.user.broadcastActivity({ruler: this});
|
||||
|
||||
Reference in New Issue
Block a user