Ellipsoid-based region selectors no longer starts primary at (0, 0, 0).

Fixes WORLDEDIT-2968.
This commit is contained in:
sk89q 2014-07-10 00:47:36 -07:00
parent 7283526123
commit 66a51636a3
2 changed files with 12 additions and 1 deletions

View File

@ -41,6 +41,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class EllipsoidRegionSelector extends com.sk89q.worldedit.regions.EllipsoidRegionSelector implements RegionSelector, CUIRegion {
protected EllipsoidRegion region;
protected boolean started = false;
/**
* Create a new selector.
@ -113,11 +114,17 @@ public class EllipsoidRegionSelector extends com.sk89q.worldedit.regions.Ellipso
region.setCenter(pos.toBlockVector());
region.setRadius(new Vector());
started = true;
return true;
}
@Override
public boolean selectSecondary(Vector pos) {
if (!started) {
return false;
}
final Vector diff = pos.subtract(region.getCenter());
final Vector minRadius = Vector.getMaximum(diff, diff.multiply(-1.0));
region.extendRadius(minRadius);
@ -153,7 +160,7 @@ public class EllipsoidRegionSelector extends com.sk89q.worldedit.regions.Ellipso
@Override
public boolean isDefined() {
return region.getRadius().lengthSq() > 0;
return started && region.getRadius().lengthSq() > 0;
}
@Override

View File

@ -80,6 +80,10 @@ public class SphereRegionSelector extends EllipsoidRegionSelector {
@Override
public boolean selectSecondary(Vector pos) {
if (!started) {
return false;
}
final double radiusScalar = Math.ceil(pos.distance(region.getCenter()));
region.setRadius(new Vector(radiusScalar, radiusScalar, radiusScalar));