106 lines
2.5 KiB
JavaScript
106 lines
2.5 KiB
JavaScript
import {settingsKey} from "./settings.js";
|
|
import {getMeasurePosition, setSnapParameterOnOptions} from "./util.js";
|
|
|
|
export let disableSnap = false;
|
|
export let moveWithoutAnimation = false;
|
|
|
|
export function registerKeybindings() {
|
|
game.keybindings.register(settingsKey, "cancelDrag", {
|
|
name: "drag-ruler.keybindings.cancelDrag",
|
|
onDown: cancelDrag,
|
|
uneditable: [{
|
|
key: "Escape",
|
|
}],
|
|
precedence: -1,
|
|
});
|
|
|
|
game.keybindings.register(settingsKey, "createWaypoint", {
|
|
name: "drag-ruler.keybindings.createWaypoint",
|
|
onDown: handleCreateWaypoint,
|
|
editable: [{
|
|
key: "Space"
|
|
}],
|
|
precedence: -1,
|
|
});
|
|
|
|
game.keybindings.register(settingsKey, "deleteWaypoint", {
|
|
name: "drag-ruler.keybindings.deleteWaypoint",
|
|
onDown: handleDeleteWaypoint,
|
|
precedence: -1,
|
|
});
|
|
|
|
game.keybindings.register(settingsKey, "disableSnap", {
|
|
name: "drag-ruler.keybindings.disableSnap.name",
|
|
hint: "drag-ruler.keybindings.disableSnap.hint",
|
|
onDown: handleDisableSnap,
|
|
onUp: handleDisableSnap,
|
|
editable: [{
|
|
key: "ShiftLeft",
|
|
}],
|
|
precedence: -1,
|
|
});
|
|
|
|
game.keybindings.register(settingsKey, "moveWithoutAnimation", {
|
|
name: "drag-ruler.keybindings.moveWithoutAnimation.name",
|
|
hint: "drag-ruler.keybindings.moveWithoutAnimation.hint",
|
|
onDown: handleMoveWithoutAnimation,
|
|
onUp: handleMoveWithoutAnimation,
|
|
editable: [{
|
|
key: "AltLeft",
|
|
}],
|
|
precedence: -1,
|
|
});
|
|
}
|
|
|
|
function handleDeleteWaypoint() {
|
|
const ruler = canvas.controls.ruler;
|
|
if (!ruler?.draggedEntity)
|
|
return false;
|
|
ruler.dragRulerDeleteWaypoint();
|
|
return true;
|
|
}
|
|
|
|
function handleCreateWaypoint() {
|
|
const ruler = canvas.controls.ruler;
|
|
// .draggedEntity is used here because .isDragRuler only returns true once the ruler started measuring
|
|
// Ruler can end up being undefined here if no canvas is active
|
|
if (!ruler?.draggedEntity)
|
|
return false;
|
|
|
|
let options = {};
|
|
setSnapParameterOnOptions(ruler, options);
|
|
|
|
if (ruler._state === Ruler.STATES.INACTIVE) {
|
|
ruler.dragRulerStart(options);
|
|
}
|
|
else {
|
|
ruler.dragRulerAddWaypoint(getMeasurePosition(), options);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function cancelDrag() {
|
|
const ruler = canvas.controls.ruler;
|
|
if (!ruler?.draggedEntity)
|
|
return false;
|
|
ruler.dragRulerAbortDrag();
|
|
return true;
|
|
}
|
|
|
|
function handleDisableSnap(event) {
|
|
disableSnap = !event.up;
|
|
|
|
const ruler = canvas.controls.ruler;
|
|
if (!ruler?.isDragRuler)
|
|
return false;
|
|
if (ruler._state !== Ruler.STATES.MEASURING)
|
|
return false;
|
|
|
|
ruler.measure(getMeasurePosition(), {snap: !disableSnap});
|
|
return false;
|
|
}
|
|
|
|
function handleMoveWithoutAnimation(event) {
|
|
moveWithoutAnimation = !event.up;
|
|
}
|