package org.dynmap.utils;
public class RoundVisibilityLimit implements VisibilityLimit {
public int x_center, z_center;
public double radius; //Using squared_radius instead of radius for tiny optimization
public RoundVisibilityLimit(int x_center, int z_center, double radius) {
this.x_center = x_center;
this.z_center = z_center;
this.radius = radius;
}
@Override
public boolean doIntersectChunk(int chunk_x, int chunk_z) {
int chunk_center_x = chunk_x * 16 + 8;
int chunk_center_z = chunk_z * 16 + 8;
int chunk_corner_x, chunk_corner_z;
if (chunk_center_x >= x_center)
chunk_corner_x = chunk_x * 16;
else
chunk_corner_x = chunk_x * 16 + 15;
if (chunk_center_z >= z_center)
chunk_corner_z = chunk_z * 16;
else
chunk_corner_z = chunk_z * 16 + 15;
return (chunk_corner_x - x_center) * (chunk_corner_x - x_center) + (chunk_corner_z - z_center) * (chunk_corner_z - z_center) < radius * radius;
}
@Override
public int xCenter() {
return x_center;
}
@Override
public int zCenter() {
return z_center;
}
}