use of buildcraft.lib.client.model.ModelUtil.UvFaceData in project BuildCraft by BuildCraft.
the class PipeWireRenderer method getQuads.
private static MutableQuad[] getQuads(EnumWirePart part) {
MutableQuad[] quads = new MutableQuad[6];
Tuple3f center = new //
Point3f(//
0.5f + (part.x.getOffset() * 4.51f / 16f), //
0.5f + (part.y.getOffset() * 4.51f / 16f), //
0.5f + (part.z.getOffset() * 4.51f / 16f));
Tuple3f radius = new Point3f(1 / 32f, 1 / 32f, 1 / 32f);
UvFaceData uvs = new UvFaceData();
int off = func(part.x) * 4 + func(part.y) * 2 + func(part.z);
uvs.minU = off / 16f;
uvs.maxU = (off + 1) / 16f;
uvs.minV = 0;
uvs.maxV = 1 / 16f;
for (EnumFacing face : EnumFacing.VALUES) {
quads[face.ordinal()] = ModelUtil.createFace(face, center, radius, uvs);
}
return quads;
}
use of buildcraft.lib.client.model.ModelUtil.UvFaceData in project BuildCraft by BuildCraft.
the class PipeWireRenderer method getQuads.
private static MutableQuad[] getQuads(EnumWireBetween between) {
// 4 rather than 6 -- don't render the end caps
MutableQuad[] quads = new MutableQuad[4];
int i = 0;
Vec3d center;
Vec3d radius;
boolean ax = between.mainAxis == Axis.X;
boolean ay = between.mainAxis == Axis.Y;
boolean az = between.mainAxis == Axis.Z;
if (between.to == null) {
double cL = 0.5f - 4.51f / 16f;
double cU = 0.5f + 4.51f / 16f;
center = new //
Vec3d(//
ax ? 0.5f : (between.xy ? cU : cL), //
ay ? 0.5f : ((ax ? between.xy : between.yz) ? cU : cL), //
az ? 0.5f : (between.yz ? cU : cL));
double rC = 4.01f / 16f;
double rN = 1f / 16f / 2;
radius = new //
Vec3d(//
ax ? rC : rN, //
ay ? rC : rN, //
az ? rC : rN);
} else {
// we are a connection
double cL = (8 - 4.51) / 16;
double cU = (8 + 4.51) / 16;
radius = new //
Vec3d(//
ax ? 2.99 / 32 : 1 / 32.0, //
ay ? 2.99 / 32 : 1 / 32.0, //
az ? 2.99 / 32 : 1 / 32.0);
center = new //
Vec3d(//
ax ? (0.5 + 6.505 / 16 * between.to.getFrontOffsetX()) : (between.xy ? cU : cL), //
ay ? (0.5 + 6.505 / 16 * between.to.getFrontOffsetY()) : ((ax ? between.xy : between.yz) ? cU : cL), //
az ? (0.5 + 6.505 / 16 * between.to.getFrontOffsetZ()) : (between.yz ? cU : cL));
}
UvFaceData uvBase = new UvFaceData();
uvBase.minU = (float) VecUtil.getValue(center.subtract(radius), between.mainAxis);
uvBase.maxU = (float) VecUtil.getValue(center.add(radius), between.mainAxis);
uvBase.minV = 0;
uvBase.maxV = 1 / 16f;
Tuple3f centerFloat = VecUtil.convertFloat(center);
Tuple3f radiusFloat = VecUtil.convertFloat(radius);
for (EnumFacing face : EnumFacing.VALUES) {
if (face.getAxis() == between.mainAxis) {
continue;
}
UvFaceData uvs = new UvFaceData(uvBase);
Axis aAxis = between.mainAxis;
Axis fAxis = face.getAxis();
boolean fPositive = face.getAxisDirection() == AxisDirection.POSITIVE;
int rotations = 0;
boolean swapU = false;
boolean swapV = false;
if (aAxis == Axis.X) {
swapV = fPositive;
} else if (aAxis == Axis.Y) {
rotations = 1;
swapU = (fAxis == Axis.X) != fPositive;
swapV = fAxis == Axis.Z;
} else {
// aAxis == Axis.Z
if (fAxis == Axis.Y) {
rotations = 1;
}
swapU = face == EnumFacing.DOWN;
swapV = face != EnumFacing.EAST;
}
if (swapU) {
float t = uvs.minU;
uvs.minU = uvs.maxU;
uvs.maxU = t;
}
if (swapV) {
float t = uvs.minV;
uvs.minV = uvs.maxV;
uvs.maxV = t;
}
MutableQuad quad = ModelUtil.createFace(face, centerFloat, radiusFloat, uvs);
if (rotations > 0)
quad.rotateTextureUp(rotations);
quads[i++] = quad;
}
return quads;
}
Aggregations