public EnderDyeButton copy() { EnderDyeButton newButton = new EnderDyeButton(); newButton.button = button; newButton.verts = new Vector3[8]; for (int i = 0; i < 8; i++) { newButton.verts[i] = verts[i].copy(); } return newButton; }
public static AxisAlignedBB cornersToAABB(Vector3[] corners) { Vector3 min = corners[0].copy(); Vector3 max = corners[0].copy(); for (int i = 1; i < corners.length; i++) { Vector3 vec = corners[i]; if (vec.x < min.x) { min.x = vec.x; } else if (vec.x > max.x) { max.x = vec.x; } if (vec.y < min.y) { min.y = vec.y; } else if (vec.y > max.y) { max.y = vec.y; } if (vec.z < min.z) { min.z = vec.z; } else if (vec.z > max.z) { max.z = vec.z; } } return new AxisAlignedBB(min.x, min.y, min.z, max.x, max.y, max.z); } }
public CCModel generateSideFace() { CCModel model = CCModel.newModel(7, 24); model.verts[0] = toVertex5(octoFace[0].copy(), 0); model.verts[1] = toVertex5(octoFace[1].copy(), 0); model.verts[2] = toVertex5(octoFace[2].copy(), 0); model.verts[3] = toVertex5(octoFace[3].copy(), 0); model.verts[4] = toVertex5(octoFace[4].copy(), 0); model.verts[5] = toVertex5(octoFace[5].copy(), 0); model.verts[6] = toVertex5(octoFace[6].copy(), 0); model.verts[7] = toVertex5(octoFace[7].copy(), 0); model.verts[8] = toVertex5(octoFace[0].copy(), 0); model.verts[9] = toVertex5(octoFace[3].copy(), 0); model.verts[10] = toVertex5(octoFace[4].copy(), 0); model.verts[11] = toVertex5(octoFace[7].copy(), 0); for (int i = 0; i < 12; i++) { model.verts[i].vec.y = -0.5 * (frameOnly ? 0.75 : 0.99); } CCModel.generateBackface(model, 0, model, 12, 12); return model; }
@Override public IBounds getBoundsInside(AxisAlignedBB boundingBox) { Cuboid6 c = null; for (Vertex5 v : model.verts) { if (boundingBox.contains(new Vec3d(v.vec.x, v.vec.y, v.vec.z))) { if (c == null) { c = new Cuboid6(v.vec.copy(), v.vec.copy()); } else { c.enclose(v.vec); } } } if(c == null) return null; return wrap(c); } }
private LinkedList<Vertex5> generateConnections(int i) { LinkedList<Vertex5> vecs = new LinkedList<>(); Cuboid6 cube; Vector3 a = axes[i]; Vector3 b = axes[orthogAxes[i][0]]; Vector3 c = axes[orthogAxes[i][1]]; for (int x = -1; x <= 1; x += 2) { for (int y = -1; y <= 1; y += 2) { cube = newCube(a.copy().multiply(s2).add(b.copy().multiply(s * x)).add(c.copy().multiply(s * y)), a.copy().multiply(h / 2).add(b.copy().multiply(s2 * x)).add(c.copy().multiply(s2 * y))); addSideFaces(vecs, cube, (1 << i) ^ 63); } } for (int j = 0; j < 6; j++) { if (i != j && (i ^ 1) != j) { a = axes[i]; b = axes[j]; int orthog = orthogonals[i][j]; c = axes[orthog]; cube = newCube(a.copy().multiply(h / 2 - (s2 - s)).add(b.copy().multiply(s)).add(c.copy().multiply(s)), a.copy().multiply(h / 2).add(b.copy().multiply(s2)).add(c.copy().multiply(-s))); addSideFaces(vecs, cube, (1 << orthog) | (1 << (orthog ^ 1))); } } return vecs; }
public CCModel generateConnection() { CCModel model = CCModel.newModel(7, 64); double v = 0.375 * TDProps.largeInnerModelScaling; double o = 1.01; for (int k = 0; k < 8; k++) { model.verts[k * 4] = new Vertex5(octoFace[k].copy().multiply(o, 1, o), 0.5 - innerSize, 0); model.verts[k * 4 + 1] = new Vertex5(octoFace[k].copy().multiply(o, 1, o).setSide(0, -v), 0.5 - innerSize, 0.5 - v); model.verts[k * 4 + 2] = new Vertex5(octoFace[(k + 1) % 8].copy().multiply(o, 1, o).setSide(0, -v), 0.5 + innerSize, 0.5 - v); model.verts[k * 4 + 3] = new Vertex5(octoFace[(k + 1) % 8].copy().multiply(o, 1, o), 0.5 + innerSize, 0); } CCModel.generateBackface(model, 0, model, 32, 32); return model; }
cube = newCube(a.copy().multiply(s2).add(b.copy().multiply(s * x)).add(c.copy().multiply(s * y)), a.copy().multiply(h / 2).add(b.copy().multiply(s2 * x)).add(c.copy().multiply(s2 * y))); addSideFaces(vecs, cube, (1 << i) | (1 << (i ^ 1))); int orthog = orthogonals[pair[0]][pair[1]]; c = axes[orthog]; cube = newCube(a.copy().multiply(s).add(b.copy().multiply(s)).add(c.copy().multiply(s)), a.copy().multiply(s2).add(b.copy().multiply(s2)).add(c.copy().multiply(-s))); b = axes[cr[1]]; c = axes[cr[2]]; cube = newCube(a.copy().multiply(s).add(b.copy().multiply(s)).add(c.copy().multiply(s)), a.copy().multiply(s2).add(b.copy().multiply(s2)).add(c.copy().multiply(s2)));
public Cuboid6 newCube(Vector3 min, Vector3 max) { double temp; if (min.x > max.x) { temp = min.x; min.x = max.x; max.x = temp; } if (min.y > max.y) { temp = min.y; min.y = max.y; max.y = temp; } if (min.z > max.z) { temp = min.z; min.z = max.z; max.z = temp; } if (h < 1) { Vector3 mid = min.copy().add(max).multiply(0.5); min.x = min.x <= -0.5 || min.x >= 0.5 ? min.x : (min.x - mid.x) * h + mid.x; min.y = min.y <= -0.5 || min.y >= 0.5 ? min.y : (min.y - mid.y) * h + mid.y; min.z = min.z <= -0.5 || min.z >= 0.5 ? min.z : (min.z - mid.z) * h + mid.z; max.x = max.x <= -0.5 || max.x >= 0.5 ? max.x : (max.x - mid.x) * h + mid.x; max.y = max.y <= -0.5 || max.y >= 0.5 ? max.y : (max.y - mid.y) * h + mid.y; max.z = max.z <= -0.5 || max.z >= 0.5 ? max.z : (max.z - mid.z) * h + mid.z; } return new Cuboid6(min, max); }
arm.add(toVertex5(octoFace[k].copy())); arm.add(toVertex5(octoFace[k].copy().setSide(0, -size))); arm.add(toVertex5(octoFace[(k + 1) % 8].copy().setSide(0, -size))); arm.add(toVertex5(octoFace[(k + 1) % 8].copy())); Vector3 v1 = axes[i].copy(); Vector3 v2 = axes[j].copy(); Vector3 v3 = v1.copy().crossProduct(v2); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(innerSize)).add(v3.copy().multiply(innerSize)), i)); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(innerSize)).add(v3.copy().multiply(-innerSize)), i)); v.add(toVertex5(v1.copy().multiply(innerSize).add(v2.copy().multiply(size)).add(v3.copy().multiply(-innerSize)), i)); v.add(toVertex5(v1.copy().multiply(innerSize).add(v2.copy().multiply(size)).add(v3.copy().multiply(innerSize)), i)); } else if (!a && b) { v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(innerSize)).add(v3.copy().multiply(innerSize)), i)); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(innerSize)).add(v3.copy().multiply(-innerSize)), i)); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(size)).add(v3.copy().multiply(-innerSize)), i)); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(size)).add(v3.copy().multiply(innerSize)), i)); } else if (a && !b) { v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(size)).add(v3.copy().multiply(innerSize)), j)); v.add(toVertex5(v1.copy().multiply(size).add(v2.copy().multiply(size)).add(v3.copy().multiply(-innerSize)), j)); v.add(toVertex5(v1.copy().multiply(innerSize).add(v2.copy().multiply(size)).add(v3.copy().multiply(-innerSize)), j)); v.add(toVertex5(v1.copy().multiply(innerSize).add(v2.copy().multiply(size)).add(v3.copy().multiply(innerSize)), j)); Vector3 a1 = v1.copy().multiply(size).add(v2.copy().multiply(size).add(v3.copy().multiply(innerSize))); Vector3 a2 = v1.copy().multiply(size).add(v2.copy().multiply(innerSize).add(v3.copy().multiply(size))); Vector3 a3 = v1.copy().multiply(innerSize).add(v2.copy().multiply(size).add(v3.copy().multiply(size))); Vector3 a1 = v1.copy().multiply(size).add(v2.copy().multiply(innerSize).add(v3.copy().multiply(innerSize)));
public static LinkedList<Vertex5> addSideFace(LinkedList<Vertex5> vecs, Cuboid6 bounds, int side) { face.loadCuboidFace(bounds.copy().add(Vector3.center), side); for (Vertex5 v : face.getVertices()) { vecs.add(new Vertex5(v.vec.copy().subtract(Vector3.center), v.uv.copy())); } return vecs; }
public boolean attemptToCombineUnflipped(Face other) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (equalVert(vec(i), vec(j)) && equalVert(vec(i + 1), vec(j - 1))) { Vector3 l1 = vec(i - 1).vec.copy().subtract(vec(i).vec).normalize(); Vector3 l2 = vec(i + 2).vec.copy().subtract(vec(i + 1).vec).normalize(); Vector3 l3 = other.vec(j).vec.copy().subtract(other.vec(j + 1).vec).normalize(); Vector3 l4 = other.vec(j - 1).vec.copy().subtract(other.vec(j - 2).vec).normalize(); if (l1.equalsT(l3) && l2.equalsT(l4)) { setVec(i, other.vec(j + 1)); setVec(i + 1, other.vec(j - 2)); return true; } } } } return false; } }
private static void generateModels() { Cuboid6 box = new Cuboid6(0.125, 0, 0.125, 0.875, 1, 0.875); double inset = 0.0625; modelFrame = CCModel.quadModel(48).generateBlock(0, box); CCModel.generateBackface(modelFrame, 0, modelFrame, 24, 24); modelFrame.computeNormals(); for (int i = 24; i < 48; i++) { modelFrame.verts[i].vec.add(modelFrame.normals()[i].copy().multiply(inset)); } modelFrame.shrinkUVs(RenderHelper.RENDER_OFFSET); }
@Override public List<BakedQuad> bakeItemQuads(EnumFacing face, ItemStack stack) { List<BakedQuad> quads = new ArrayList<>(); if (face == null) { CCRenderState ccrs = CCRenderState.instance(); BakingVertexBuffer buffer = BakingVertexBuffer.create(); buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); ccrs.reset(); ccrs.bind(buffer); Block blockFromItem = Block.getBlockFromItem(stack.getItem()); Duct ductType = TDDucts.getDuct(((BlockDuct) blockFromItem).offset + stack.getItemDamage()); RenderDuct.INSTANCE.renderBase(ccrs, true, ductType, RenderDuct.INV_CONNECTIONS, Translation.CENTER, ductType.getBaseTexture(stack)); RenderDuct.INSTANCE.renderWorldExtra(ccrs, true, ductType, RenderDuct.INV_CONNECTIONS, Vector3.center.copy().subtract(0, RenderHelper.RENDER_OFFSET, 0).translation()); buffer.finishDrawing(); quads.addAll(buffer.bake()); } return quads; }
consumer.setOffset(Vector3.center.copy().subtract(bounds.center()));
startLine(buffer, topRight.copy().add(shift.copy().negate())); endLine(buffer, bottomRight.copy().add(shift.copy().negate())); startLine(buffer, bottomLeft.copy().add(shift)); endLine(buffer, topLeft.copy().add(shift)); startLine(buffer, topLeft.copy().add(shiftVert.copy().negate())); endLine(buffer, topRight.copy().add(shiftVert.copy().negate())); startLine(buffer, bottomLeft.copy().add(shiftVert)); endLine(buffer, bottomRight.copy().add(shiftVert));