Add pathfinidng support for square and hex grids

This commit is contained in:
Manuel Vögele
2022-01-30 00:06:48 +01:00
parent 1f770f7597
commit d467fe5bcf
10 changed files with 288 additions and 3 deletions
+16 -2
View File
@@ -2,6 +2,7 @@ import {currentSpeedProvider, getColorForDistanceAndToken, getRangesFromSpeedPro
import {getHexSizeSupportTokenGridCenter} from "./compatibility.js";
import {cancelScheduledMeasurement, measure} from "./foundry_imports.js"
import {getMovementHistory} from "./movement_tracking.js";
import {wipePathfindingCache} from "./pathfinding.js";
import {settingsKey} from "./settings.js";
import {getSnapPointForEntity} from "./util.js";
@@ -32,8 +33,13 @@ export function extendRuler() {
const json = super.toJSON();
if (this.draggedEntity) {
const isToken = this.draggedEntity instanceof Token;
json["draggedEntityIsToken"] = isToken;
json["draggedEntity"] = this.draggedEntity.id;
json.draggedEntityIsToken = isToken;
json.draggedEntity = this.draggedEntity.id;
json.waypoints = json.waypoints.map(old => {
let w = duplicate(old);
w.isPathfinding = undefined;
return w;
});
}
return json;
}
@@ -75,6 +81,7 @@ export function extendRuler() {
}
this.waypoints.push(new PIXI.Point(point.x, point.y));
this.labels.addChild(new PreciseText("", CONFIG.canvasTextStyle));
this.waypoints.filter(waypoint => waypoint.isPathfinding).forEach(waypoint => waypoint.isPathfinding = false);
}
dragRulerAddWaypointHistory(waypoints) {
@@ -91,6 +98,7 @@ export function extendRuler() {
}
dragRulerDeleteWaypoint(event={preventDefault: () => {return}}, options={}) {
this.dragRulerRemovePathfindingWaypoints();
options.snap = options.snap ?? true;
if (this.waypoints.filter(w => !w.isPrevious).length > 1) {
event.preventDefault();
@@ -107,6 +115,11 @@ export function extendRuler() {
}
}
dragRulerRemovePathfindingWaypoints() {
this.waypoints.filter(waypoint => waypoint.isPathfinding).forEach(_ => this.labels.removeChild(this.labels.children.pop()));
this.waypoints = this.waypoints.filter(waypoint => !waypoint.isPathfinding);
}
dragRulerAbortDrag(event={preventDefault: () => {return}}) {
const token = this.draggedEntity;
this._endMeasurement();
@@ -171,6 +184,7 @@ export function extendRuler() {
return;
const ruler = canvas.controls.ruler;
ruler.clear();
wipePathfindingCache();
ruler._state = Ruler.STATES.STARTING;
let entityCenter;
if (isToken && canvas.grid.isHex && game.modules.get("hex-size-support")?.active && CONFIG.hexSizeSupport.getAltSnappingFlag(entity))