Skip to content

Instantly share code, notes, and snippets.

@Varriount
Created January 6, 2022 20:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Varriount/8c767c0b59f7d657a9ea8b1b67b76221 to your computer and use it in GitHub Desktop.
Save Varriount/8c767c0b59f7d657a9ea8b1b67b76221 to your computer and use it in GitHub Desktop.
async function setElevation(value) {
// Scenarios:
// - Tokens are selected, hovered token is undefined.
// - Set elevation of selected tokens.
// - Tokens are selected, hovered token is in selection.
// - Set elevation of selected tokens.
// - Tokens are selected, hovered token is not in selection.
// - Set elevation of hovered token.
// - No tokens are selected, hovered token is undefined.
// - Do nothing
// - No tokens are selected, hovered token is defined.
// - Set elevation of hovered token.
const selectedTokensMap = canvas.tokens._controlled;
const selectedTokensArray = canvas.tokens.controlled;
const hoveredToken = canvas.tokens._hover;
let tokens = undefined;
if (hoveredToken == undefined || hoveredToken._id in selectedTokensMap){
tokens = selectedTokensArray;
} else {
tokens = [hoveredToken];
}
let updates = tokens.map(
token => {
_id: token.id,
elevation: (value === 0 ? 0 : token.data.elevation + value)
}
);
await canvas.scene.updateEmbeddedDocuments("Token", updates);
};
Hooks.on("init", () => {
for (const i of [-10, -5, 0, +5, +10]) {
const description = (i == 0) ? `Reset token elevation to ${i}` : `Change token elevation by ${i}`;
game.keybindings.register("pf2e-f-is-for-flatfooted", `elevation${i}`, {
name: description,
editable: [],
onDown: () => {
setElevation(i);
}
})
}
});
Hooks.on("renderTokenHUD", function(html){
const elevationElement = html.find('.elevation');
html.bind('wheel', function(e){
const heightDelta = 5 * Math.sign(e.originalEvent.wheelDelta);
setElevation(heightDelta);
});
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment