/**
* Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
* <p/>
* 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.core.builders.patterns;
import net.minecraft.world.World;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.core.Box;
import buildcraft.core.blueprints.Template;
public class PatternStairs extends FillerPattern {
public PatternStairs() {
super("stairs");
}
@Override
public int maxParameters() {
return 2;
}
@Override
public int minParameters() {
return 2;
}
@Override
public IStatementParameter createParameter(int index) {
return index == 1 ? new PatternParameterXZDir(0) : new PatternParameterYDir(true);
}
@Override
public Template getTemplate(Box box, World world, IStatementParameter[] parameters) {
int xMin = 0;
int yMin = 0;
int zMin = 0;
int xMax = box.sizeX() - 1;
int yMax = box.sizeY() - 1;
int zMax = box.sizeZ() - 1;
int sizeX = xMax - xMin + 1;
int sizeZ = zMax - zMin + 1;
Template template = new Template(box.sizeX(), box.sizeY(), box.sizeZ());
int height, heightStep;
if (parameters.length >= 1 && parameters[0] != null && !(((PatternParameterYDir) parameters[0]).up)) {
height = Math.max(yMin, yMax - Math.max(xMax, zMax));
heightStep = 1;
} else {
height = Math.min(yMax, Math.max(xMax, zMax));
heightStep = -1;
}
int param2 = 0;
if (parameters.length >= 2 && parameters[1] != null) {
param2 = ((PatternParameterXZDir) parameters[1]).getDirection();
}
int[] steps = new int[]{0, 0, 0, 0};
if (param2 == 0) {
steps[0] = 1;
} else if (param2 == 1) {
steps[1] = 1;
} else if (param2 == 2) {
steps[2] = 1;
} else if (param2 == 3) {
steps[3] = 1;
}
int x1 = xMin, x2 = xMax, z1 = zMin, z2 = zMax;
if (steps[0] == 1) {
x1 = xMax - sizeX + 1;
x2 = x1;
}
if (steps[1] == 1) {
x2 = xMin + sizeX - 1;
x1 = x2;
}
if (steps[2] == 1) {
z1 = zMax - sizeZ + 1;
z2 = z1;
}
if (steps[3] == 1) {
z2 = zMin + sizeZ - 1;
z1 = z2;
}
while (x2 - x1 + 1 > 0 && z2 - z1 + 1 > 0 && x2 - x1 < sizeX && z2 - z1 < sizeZ && height >= yMin && height <= yMax) {
fill(x1, height, z1, x2, height, z2, template);
x2 += steps[0];
x1 -= steps[1];
z2 += steps[2];
z1 -= steps[3];
height += heightStep;
}
return template;
}
}