Fix several issues with Terrain Ruler based measurements
This commit is contained in:
+6
-39
@@ -126,7 +126,7 @@ export function extendRuler() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (const segment of [...this.dragRulerUnsnappedSegments].reverse()) {
|
for (const segment of [...this.segments].reverse()) {
|
||||||
const opacityMultiplier = segment.ray.isPrevious ? 0.33 : 1;
|
const opacityMultiplier = segment.ray.isPrevious ? 0.33 : 1;
|
||||||
highlightMeasurementTerrainRuler.call(
|
highlightMeasurementTerrainRuler.call(
|
||||||
this,
|
this,
|
||||||
@@ -208,52 +208,19 @@ export function extendRuler() {
|
|||||||
enableTerrainRuler: this.dragRulerEnableTerrainRuler,
|
enableTerrainRuler: this.dragRulerEnableTerrainRuler,
|
||||||
};
|
};
|
||||||
const distances = measureDistances(this.segments, this.draggedEntity, shape, options);
|
const distances = measureDistances(this.segments, this.draggedEntity, shape, options);
|
||||||
|
let totalDistance = 0;
|
||||||
for (const [i, d] of distances.entries()) {
|
for (const [i, d] of distances.entries()) {
|
||||||
|
let s = this.segments[i];
|
||||||
|
s.startDistance = totalDistance;
|
||||||
totalDistance += d;
|
totalDistance += d;
|
||||||
let s = this.segements[i];
|
s.last = i === this.segments.length - 1;
|
||||||
s.last = i === this.segements.length - 1;
|
|
||||||
s.distance = d;
|
s.distance = d;
|
||||||
s.text = this._getSegmentLabel(s, totalDistance);
|
s.text = this._getSegmentLabel(s, totalDistance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*if (!this.dragRulerEnableTerrainRuler) {
|
|
||||||
if (!this.dragRulerIgnoreGrid) {
|
|
||||||
gridSpaces = true;
|
|
||||||
}
|
|
||||||
super._computeDistance(gridSpaces);
|
|
||||||
} else {
|
|
||||||
const unsnappedSegments = this.dragRulerUnsnappedSegments;
|
|
||||||
const firstNewSegmentIndex = unsnappedSegments.findIndex(
|
|
||||||
segment => !segment.ray.dragRulerVisitedSpaces,
|
|
||||||
);
|
|
||||||
const previousSegments = unsnappedSegments.slice(0, firstNewSegmentIndex);
|
|
||||||
const newSegments = unsnappedSegments.slice(firstNewSegmentIndex);
|
|
||||||
const distances = previousSegments.map(
|
|
||||||
segment =>
|
|
||||||
segment.ray.dragRulerVisitedSpaces[segment.ray.dragRulerVisitedSpaces.length - 1]
|
|
||||||
.distance,
|
|
||||||
);
|
|
||||||
previousSegments.forEach(
|
|
||||||
segment =>
|
|
||||||
(segment.ray.terrainRulerVisitedSpaces = duplicate(segment.ray.dragRulerVisitedSpaces)),
|
|
||||||
);
|
|
||||||
const shape = isToken ? getTokenShape(this.draggedEntity) : null;
|
|
||||||
const options = {};
|
|
||||||
options.costFunction = buildCostFunction(this.draggedEntity, shape);
|
|
||||||
if (previousSegments.length > 0)
|
|
||||||
opts.terrainRulerInitialState =
|
|
||||||
previousSegments[previousSegments.length - 1].ray.dragRulerFinalState;
|
|
||||||
distances = distances.concat(terrainRuler.measureDistances(newSegments, options));
|
|
||||||
for (const [i, d] of distances.entries()) {
|
|
||||||
totalDistance += d;
|
|
||||||
let s = this.segements[i];
|
|
||||||
s.last = i === this.segements.length - 1;
|
|
||||||
s.distance = d;
|
|
||||||
s.text = this._getSegmentLabel(s, totalDistance);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
for (const [i, segment] of this.segments.entries()) {
|
for (const [i, segment] of this.segments.entries()) {
|
||||||
const unsnappedSegment = this.dragRulerUnsnappedSegments[i];
|
const unsnappedSegment = this.dragRulerUnsnappedSegments[i];
|
||||||
|
unsnappedSegment.startDistance = segment.startDistance;
|
||||||
unsnappedSegment.last = segment.last;
|
unsnappedSegment.last = segment.last;
|
||||||
unsnappedSegment.distance = segment.distance;
|
unsnappedSegment.distance = segment.distance;
|
||||||
unsnappedSegment.text = segment.text;
|
unsnappedSegment.text = segment.text;
|
||||||
|
|||||||
Reference in New Issue
Block a user