Added cylinder pattern for the filler.
This commit is contained in:
parent
78f62ffffb
commit
09e32da2c7
3 changed files with 123 additions and 0 deletions
Binary file not shown.
After Width: | Height: | Size: 497 B |
|
@ -42,6 +42,7 @@ import buildcraft.builders.filler.pattern.PatternStairs;
|
|||
import buildcraft.builders.filler.pattern.PatternBox;
|
||||
import buildcraft.builders.filler.pattern.PatternFlatten;
|
||||
import buildcraft.builders.filler.pattern.PatternHorizon;
|
||||
import buildcraft.builders.filler.pattern.PatternCylinder;
|
||||
import buildcraft.builders.filler.FillerRegistry;
|
||||
import buildcraft.builders.filler.pattern.PatternClear;
|
||||
import buildcraft.builders.GuiHandler;
|
||||
|
@ -298,6 +299,7 @@ public class BuildCraftBuilders {
|
|||
FillerManager.registry.addPattern(new PatternBox());
|
||||
FillerManager.registry.addPattern(new PatternPyramid());
|
||||
FillerManager.registry.addPattern(new PatternStairs());
|
||||
FillerManager.registry.addPattern(new PatternCylinder());
|
||||
} catch (Error error) {
|
||||
BCLog.logErrorAPI("Buildcraft", error, IFillerPattern.class);
|
||||
throw error;
|
||||
|
|
121
common/buildcraft/builders/filler/pattern/PatternCylinder.java
Normal file
121
common/buildcraft/builders/filler/pattern/PatternCylinder.java
Normal file
|
@ -0,0 +1,121 @@
|
|||
/**
|
||||
* Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public License
|
||||
* 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.builders.filler.pattern;
|
||||
|
||||
import buildcraft.api.core.IBox;
|
||||
import buildcraft.api.core.Position;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class PatternCylinder extends FillerPattern {
|
||||
|
||||
public PatternCylinder() {
|
||||
super("cylinder");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean iteratePattern(TileEntity tile, IBox box, ItemStack stackToPlace) {
|
||||
int xMin = (int)box.pMin().x;
|
||||
int yMin = (int)box.pMin().y;
|
||||
int zMin = (int)box.pMin().z;
|
||||
|
||||
int xMax = (int)box.pMax().x;
|
||||
int yMax = (int)box.pMax().y;
|
||||
int zMax = (int)box.pMax().z;
|
||||
|
||||
int xFix = (xMax-xMin)%2;
|
||||
int zFix = (zMax-zMin)%2;
|
||||
|
||||
int xCenter = (xMax+xMin)/2 + (xMax+xMin<0 && xFix==1 ? -1 : 0);
|
||||
int zCenter = (zMax+zMin)/2 + (zMax+zMin<0 && zFix==1 ? -1 : 0);
|
||||
|
||||
int xRadius = (xMax-xMin)/2;
|
||||
int zRadius = (zMax-zMin)/2;
|
||||
|
||||
if(xRadius == 0 || zRadius == 0) {
|
||||
return !fill(xMin, yMin, zMin, xMax, yMax, zMax, stackToPlace, tile.worldObj);
|
||||
}
|
||||
|
||||
int dx = xRadius, dz = 0;
|
||||
int xChange = zRadius*zRadius*(1-2*xRadius);
|
||||
int zChange = xRadius*xRadius;
|
||||
int ellipseError = 0;
|
||||
int twoASquare = 2*xRadius*xRadius;
|
||||
int twoBSquare = 2*zRadius*zRadius;
|
||||
int stoppingX = twoBSquare*xRadius;
|
||||
int stoppingZ = 0;
|
||||
|
||||
while(stoppingX >= stoppingZ) {
|
||||
if(!fillFourColumns(xCenter,zCenter,dx,dz,xFix,zFix,yMin,yMax,stackToPlace,tile.worldObj))
|
||||
return false;
|
||||
++dz;
|
||||
stoppingZ += twoASquare;
|
||||
ellipseError += zChange;
|
||||
zChange += twoASquare;
|
||||
if(2*ellipseError + xChange > 0) {
|
||||
--dx;
|
||||
stoppingX -= twoBSquare;
|
||||
ellipseError += xChange;
|
||||
xChange += twoBSquare;
|
||||
}
|
||||
}
|
||||
|
||||
dx = 0;
|
||||
dz = zRadius;
|
||||
xChange = zRadius*zRadius;
|
||||
zChange = xRadius*xRadius*(1-2*zRadius);
|
||||
ellipseError = 0;
|
||||
stoppingX = 0;
|
||||
stoppingZ = twoASquare*zRadius;
|
||||
|
||||
while(stoppingX <= stoppingZ) {
|
||||
if(!fillFourColumns(xCenter,zCenter,dx,dz,xFix,zFix,yMin,yMax,stackToPlace,tile.worldObj))
|
||||
return false;
|
||||
++dx;
|
||||
stoppingX += twoBSquare;
|
||||
ellipseError += xChange;
|
||||
xChange += twoBSquare;
|
||||
if(2*ellipseError + zChange > 0) {
|
||||
--dz;
|
||||
stoppingZ -= twoASquare;
|
||||
ellipseError += zChange;
|
||||
zChange += twoASquare;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean fillFourColumns(int xCenter, int zCenter, int dx, int dz, int xFix, int zFix, int yMin, int yMax, ItemStack stackToPlace, World world) {
|
||||
int x,z;
|
||||
|
||||
x = xCenter + dx + xFix;
|
||||
z = zCenter + dz + zFix;
|
||||
if(fill(x,yMin,z,x,yMax,z,stackToPlace,world))
|
||||
return false;
|
||||
|
||||
x = xCenter - dx;
|
||||
z = zCenter + dz + zFix;
|
||||
if(fill(x,yMin,z,x,yMax,z,stackToPlace,world))
|
||||
return false;
|
||||
|
||||
x = xCenter - dx;
|
||||
z = zCenter - dz;
|
||||
if(fill(x,yMin,z,x,yMax,z,stackToPlace,world))
|
||||
return false;
|
||||
|
||||
x = xCenter + dx + xFix;
|
||||
z = zCenter - dz;
|
||||
if(fill(x,yMin,z,x,yMax,z,stackToPlace,world))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue