diff --git a/CHANGELOG.md b/CHANGELOG.md index 1be7fe9..ce0e94e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## In development +### Compatibility +- Drag Ruler is now compatible with Foundry 0.8.5 + + ## 1.7.2 ### Bugfixes - Fixed a bug that prevented waypoints for measurement templates from snapping to any other point than a grid cell corner (or grid cell center on hex) diff --git a/module.json b/module.json index ea97e87..70ac4da 100644 --- a/module.json +++ b/module.json @@ -3,8 +3,8 @@ "title": "Drag Ruler", "description": "When dragging a token displays a ruler showing how far you've moved that token.", "version": "1.7.2", - "minimumCoreVersion" : "0.7.9", - "compatibleCoreVersion" : "0.7.9", + "minimumCoreVersion" : "0.8.5", + "compatibleCoreVersion" : "0.8.5", "authors": [ { "name": "Manuel Vögele", diff --git a/src/foundry_imports.js b/src/foundry_imports.js index 5a33b4a..295e7e7 100644 --- a/src/foundry_imports.js +++ b/src/foundry_imports.js @@ -83,7 +83,7 @@ async function animateEntities(entities, draggedEntity, draggedRays, wasPaused) const updates = entityPaths.map(({entity, path}) => { return {x: path.B.x, y: path.B.y, _id: entity.id}; }); - await draggedEntity.scene.updateEmbeddedEntity(draggedEntity.constructor.embeddedName, updates, {animate}); + await draggedEntity.scene.updateEmbeddedDocuments(draggedEntity.constructor.embeddedName, updates, {animate}); if (animate) await Promise.all(entityPaths.map(({entity, path}) => entity.animateMovement(path))); } diff --git a/src/main.js b/src/main.js index 8f2da66..68c1c12 100644 --- a/src/main.js +++ b/src/main.js @@ -50,7 +50,7 @@ Hooks.on("getCombatTrackerEntryContext", function (html, menu) { const entry = { name: "drag-ruler.resetMovementHistory", icon: '', - callback: li => resetMovementHistory(ui.combat.combat, li.data('combatant-id')), + callback: li => resetMovementHistory(ui.combat.viewed, li.data('combatant-id')), }; menu.splice(1, 0, entry); }); diff --git a/src/movement_tracking.js b/src/movement_tracking.js index 5bcb795..9239c9a 100644 --- a/src/movement_tracking.js +++ b/src/movement_tracking.js @@ -4,19 +4,19 @@ import {getTokenShape, zip} from "./util.js"; function initTrackingFlag(combatant) { const initialFlag = {passedWaypoints: [], trackedRound: 0}; - let dragRulerFlag = combatant.flags?.dragRuler; + let dragRulerFlag = combatant.data.flags.dragRuler; if (dragRulerFlag) { if (isNaN(dragRulerFlag.trackedRound)) { mergeObject(dragRulerFlag, initialFlag); } } else { - combatant.flags.dragRuler = initialFlag; + combatant.data.flags.dragRuler = initialFlag; } } function getInitializedCombatant(token, combat) { - const combatant = combat.getCombatantByToken(token.data._id); + const combatant = combat.getCombatantByToken(token.id); if (!combatant) return undefined; initTrackingFlag(combatant); @@ -43,14 +43,14 @@ function calculateUpdate(combat, token, rays) { return; // Check if we have entered a new round. If so, remove the currently stored path - if (combat.data.round > combatant.flags.dragRuler.trackedRound) { - combatant.flags.dragRuler.passedWaypoints = []; - combatant.flags.dragRuler.trackedRound = combat.data.round; + if (combat.data.round > combatant.data.flags.dragRuler.trackedRound) { + combatant.data.flags.dragRuler.passedWaypoints = []; + combatant.data.flags.dragRuler.trackedRound = combat.data.round; } // Add the passed waypoints to the combatant const terrainRulerAvailable = game.modules.get("terrain-ruler")?.active && (!game.modules.get("TerrainLayer")?.active || canvas.grid.type !== CONST.GRID_TYPES.GRIDLESS); - const dragRulerFlags = combatant.flags.dragRuler; + const dragRulerFlags = combatant.data.flags.dragRuler; const waypoints = dragRulerFlags.passedWaypoints; for (const ray of rays) { // Ignore rays that have the same start and end coordinates @@ -63,17 +63,17 @@ function calculateUpdate(combat, token, rays) { waypoints.push(ray.A); } } - return {_id: combatant._id, dragRulerFlags}; + return {_id: combatant.id, dragRulerFlags}; } export function getMovementHistory(token) { const combat = game.combat; if (!combat) return []; - const combatant = combat.getCombatantByToken(token.data._id); + const combatant = combat.getCombatantByToken(token.id); if (!combatant) return []; - const dragRulerFlags = combatant.flags.dragRuler; + const dragRulerFlags = combatant.data.flags.dragRuler; if (!dragRulerFlags) return []; if (combat.data.round > dragRulerFlags.trackedRound) @@ -82,8 +82,8 @@ export function getMovementHistory(token) { } export async function resetMovementHistory(combat, combatantId) { - const combatant = combat.getCombatant(combatantId); - const dragRulerFlags = combatant.flags.dragRuler; + const combatant = combat.combatants.get(combatantId); + const dragRulerFlags = combatant.data.flags.dragRuler; if (!dragRulerFlags) return; dragRulerFlags.passedWaypoints = null; diff --git a/src/ruler.js b/src/ruler.js index 2a8b751..2bb74db 100644 --- a/src/ruler.js +++ b/src/ruler.js @@ -34,7 +34,7 @@ export class DragRulerRuler extends Ruler { toJSON() { const json = super.toJSON(); if (this.draggedEntity) - json["draggedEntity"] = this.draggedEntity.data._id; + json["draggedEntity"] = this.draggedEntity.id; return json; } diff --git a/src/socket.js b/src/socket.js index 48b3331..f610fb5 100644 --- a/src/socket.js +++ b/src/socket.js @@ -12,7 +12,7 @@ export function updateCombatantDragRulerFlags(combat, updates) { const combatId = combat.id; // TODO Check if canvas.tokens.get is still neccessary in future foundry versions return socket.executeAsGM(_socketUpdateCombatantDragRulerFlags, combatId, updates) - .then(() => currentSpeedProvider.onMovementHistoryUpdate(updates.map(update => canvas.tokens.get(combat.getCombatant(update._id).token._id)))); + .then(() => currentSpeedProvider.onMovementHistoryUpdate(updates.map(update => canvas.tokens.get(combat.combatants.get(update._id).token.id)))); } async function _socketUpdateCombatantDragRulerFlags(combatId, updates) { @@ -20,10 +20,10 @@ async function _socketUpdateCombatantDragRulerFlags(combatId, updates) { const combat = game.combats.get(combatId); const requestedUpdates = updates.length; updates = updates.filter(update => { - const actor = combat.getCombatant(update._id).actor; + const actor = combat.combatants.get(update._id).actor; if (!actor) return false; - return actor.hasPerm(user, "OWNER"); + return actor.testUserPermission(user, "OWNER"); }); if (updates.length !== requestedUpdates) { console.warn(`Some of the movement history updates requested by user '${game.users.get(this.socketdata.userId).name}' were not performed because the user lacks owner permissions for those tokens`); @@ -31,7 +31,7 @@ async function _socketUpdateCombatantDragRulerFlags(combatId, updates) { updates = updates.map(update => { return {_id: update._id, flags: {dragRuler: update.dragRulerFlags}}; }); - await combat.updateEmbeddedEntity("Combatant", updates, {diff: false}); + await combat.updateEmbeddedDocuments("Combatant", updates, {diff: false}); } export function recalculate(tokens) {