package buildcraft.core.lib.utils;
import java.util.Iterator;
import buildcraft.api.core.BlockIndex;
public class BlockScannerExpanding implements Iterable<BlockIndex> {
private int searchRadius;
private int searchX;
private int searchY;
private int searchZ;
class BlockIt implements Iterator<BlockIndex> {
@Override
public boolean hasNext() {
return searchRadius < 64;
}
@Override
public BlockIndex next() {
// Step through each block in a hollow cube of size (searchRadius * 2 -1), if done
// add 1 to the radius and start over.
BlockIndex next = new BlockIndex(searchX, searchY, searchZ);
// Step to the next Y
if (Math.abs(searchX) == searchRadius || Math.abs(searchZ) == searchRadius) {
searchY += 1;
} else {
searchY += searchRadius * 2;
}
if (searchY > searchRadius) {
// Step to the next Z
searchY = -searchRadius;
searchZ += 1;
if (searchZ > searchRadius) {
// Step to the next X
searchZ = -searchRadius;
searchX += 1;
if (searchX > searchRadius) {
// Step to the next radius
searchRadius += 1;
searchX = -searchRadius;
searchY = -searchRadius;
searchZ = -searchRadius;
}
}
}
return next;
}
@Override
public void remove() {
}
}
public BlockScannerExpanding() {
searchRadius = 1;
searchX = -1;
searchY = -1;
searchZ = -1;
}
@Override
public Iterator<BlockIndex> iterator() {
return new BlockIt();
}
}