aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Cube.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Cube.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Cube.cpp')
-rw-r--r--Minecraft.Client/Cube.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/Minecraft.Client/Cube.cpp b/Minecraft.Client/Cube.cpp
new file mode 100644
index 00000000..813a6959
--- /dev/null
+++ b/Minecraft.Client/Cube.cpp
@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "Model.h"
+#include "ModelPart.h"
+#include "Cube.h"
+
+
+
+// 4J - added - helper function to set up vertex arrays
+VertexArray Cube::VertexArray4(Vertex *v0, Vertex *v1, Vertex *v2, Vertex *v3)
+{
+ VertexArray ret = VertexArray(4);
+ ret[0] = v0;
+ ret[1] = v1;
+ ret[2] = v2;
+ ret[3] = v3;
+
+ return ret;
+}
+
+//void Cube::addBox(float x0, float y0, float z0, int w, int h, int d, float g)
+Cube::Cube(ModelPart *modelPart, int xTexOffs, int yTexOffs, float x0, float y0, float z0, int w, int h, int d, float g, int faceMask /* = 63 */, bool bFlipPoly3UVs) : // 4J - added faceMask, added bFlipPoly3UVs to reverse the uvs back so player skins display right
+ x0(x0),
+ y0(y0),
+ z0(z0),
+ x1(x0 + w),
+ y1(y0 + h),
+ z1(z0 + d)
+{
+// this->x0 = x0;
+// this->y0 = y0;
+// this->z0 = z0;
+// this->x1 = x0 + w;
+// this->y1 = y0 + h;
+// this->z1 = z0 + d;
+
+ vertices = VertexArray(8);
+ polygons = PolygonArray(6);
+
+ float x1 = x0 + w;
+ float y1 = y0 + h;
+ float z1 = z0 + d;
+
+ x0 -= g;
+ y0 -= g;
+ z0 -= g;
+ x1 += g;
+ y1 += g;
+ z1 += g;
+
+ if (modelPart->bMirror)
+ {
+ float tmp = x1;
+ x1 = x0;
+ x0 = tmp;
+ }
+
+ Vertex *u0 = new Vertex(x0, y0, z0, 0, 0);
+ Vertex *u1 = new Vertex(x1, y0, z0, 0, 8);
+ Vertex *u2 = new Vertex(x1, y1, z0, 8, 8);
+ Vertex *u3 = new Vertex(x0, y1, z0, 8, 0);
+
+ Vertex *l0 = new Vertex(x0, y0, z1, 0, 0);
+ Vertex *l1 = new Vertex(x1, y0, z1, 0, 8);
+ Vertex *l2 = new Vertex(x1, y1, z1, 8, 8);
+ Vertex *l3 = new Vertex(x0, y1, z1, 8, 0);
+
+ vertices[0] = u0;
+ vertices[1] = u1;
+ vertices[2] = u2;
+ vertices[3] = u3;
+ vertices[4] = l0;
+ vertices[5] = l1;
+ vertices[6] = l2;
+ vertices[7] = l3;
+
+ // 4J - added ability to mask individual faces
+ int faceCount = 0;
+ if( faceMask & 1 ) polygons[faceCount++] = new _Polygon(VertexArray4(l1, u1, u2, l2), xTexOffs + d + w, yTexOffs + d, xTexOffs + d + w + d, yTexOffs + d + h, modelPart->xTexSize, modelPart->yTexSize); // Right
+ if( faceMask & 2 ) polygons[faceCount++] = new _Polygon(VertexArray4(u0, l0, l3, u3), xTexOffs + 0, yTexOffs + d, xTexOffs + d, yTexOffs + d + h, modelPart->xTexSize, modelPart->yTexSize); // Left
+ if( faceMask & 4 ) polygons[faceCount++] = new _Polygon(VertexArray4(l1, l0, u0, u1), xTexOffs + d, yTexOffs + 0, xTexOffs + d + w, yTexOffs + d, modelPart->xTexSize, modelPart->yTexSize); // Up
+ if(bFlipPoly3UVs)
+ {
+ if( faceMask & 8 ) polygons[faceCount++] = new _Polygon(VertexArray4(u2, u3, l3, l2), xTexOffs + d + w, yTexOffs + 0, xTexOffs + d + w + w, yTexOffs + d, modelPart->xTexSize, modelPart->yTexSize); // Down
+ }
+ else
+ {
+ if( faceMask & 8 ) polygons[faceCount++] = new _Polygon(VertexArray4(u2, u3, l3, l2), xTexOffs + d + w, yTexOffs + d, xTexOffs + d + w + w, yTexOffs + 0, modelPart->xTexSize, modelPart->yTexSize); // Down
+ }
+ if( faceMask & 16 ) polygons[faceCount++] = new _Polygon(VertexArray4(u1, u0, u3, u2), xTexOffs + d, yTexOffs + d, xTexOffs + d + w, yTexOffs + d + h, modelPart->xTexSize, modelPart->yTexSize); // Front
+ if( faceMask & 32 ) polygons[faceCount++] = new _Polygon(VertexArray4(l0, l1, l2, l3), xTexOffs + d + w + d, yTexOffs + d, xTexOffs + d + w + d + w, yTexOffs + d + h, modelPart->xTexSize, modelPart->yTexSize); // Back
+ polygons.length = faceCount;
+
+ if (modelPart->bMirror)
+ {
+ for (unsigned int i = 0; i < polygons.length; i++)
+ polygons[i]->mirror();
+ }
+}
+
+
+void Cube::render(Tesselator *t,float scale)
+{
+ for (int i = 0; i < polygons.length; i++)
+ {
+ polygons[i]->render(t, scale);
+ }
+}
+
+Cube *Cube::setId(const wstring &id)
+{
+ this->id = id;
+ return this;
+}