refactor: remove PolygonArray

This commit is contained in:
orng 2026-03-28 13:34:20 -05:00
parent 5ba20b155c
commit f614e661d2
4 changed files with 15 additions and 24 deletions

View file

@ -20,16 +20,8 @@ Cube::Cube(ModelPart* modelPart, int xTexOffs, int yTexOffs, float x0, float y0,
vertices({Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}, vertices({Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0},
Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0},
Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0},
Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}}) { Vertex{0, 0, 0, 0, 0}, Vertex{0, 0, 0, 0, 0}}),
// this->x0 = x0; polygons({}) {
// this->y0 = y0;
// this->z0 = z0;
// this->x1 = x0 + w;
// this->y1 = y0 + h;
// this->z1 = z0 + d;
polygons = PolygonArray(6);
float x1 = x0 + w; float x1 = x0 + w;
float y1 = y0 + h; float y1 = y0 + h;
float z1 = z0 + d; float z1 = z0 + d;
@ -69,55 +61,54 @@ Cube::Cube(ModelPart* modelPart, int xTexOffs, int yTexOffs, float x0, float y0,
// 4J - added ability to mask individual faces // 4J - added ability to mask individual faces
int faceCount = 0; int faceCount = 0;
if (faceMask & 1) if (faceMask & 1)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{l1, u1, u2, l2}, xTexOffs + d + w, std::array<const Vertex, 4>{l1, u1, u2, l2}, xTexOffs + d + w,
yTexOffs + d, xTexOffs + d + w + d, yTexOffs + d + h, yTexOffs + d, xTexOffs + d + w + d, yTexOffs + d + h,
modelPart->xTexSize, modelPart->yTexSize); // Right modelPart->xTexSize, modelPart->yTexSize); // Right
if (faceMask & 2) if (faceMask & 2)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{u0, l0, l3, u3}, xTexOffs + 0, std::array<const Vertex, 4>{u0, l0, l3, u3}, xTexOffs + 0,
yTexOffs + d, xTexOffs + d, yTexOffs + d + h, modelPart->xTexSize, yTexOffs + d, xTexOffs + d, yTexOffs + d + h, modelPart->xTexSize,
modelPart->yTexSize); // Left modelPart->yTexSize); // Left
if (faceMask & 4) if (faceMask & 4)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{l1, l0, u0, u1}, xTexOffs + d, std::array<const Vertex, 4>{l1, l0, u0, u1}, xTexOffs + d,
yTexOffs + 0, xTexOffs + d + w, yTexOffs + d, modelPart->xTexSize, yTexOffs + 0, xTexOffs + d + w, yTexOffs + d, modelPart->xTexSize,
modelPart->yTexSize); // Up modelPart->yTexSize); // Up
if (bFlipPoly3UVs) { if (bFlipPoly3UVs) {
if (faceMask & 8) if (faceMask & 8)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{u2, u3, l3, l2}, xTexOffs + d + w, std::array<const Vertex, 4>{u2, u3, l3, l2}, xTexOffs + d + w,
yTexOffs + 0, xTexOffs + d + w + w, yTexOffs + d, yTexOffs + 0, xTexOffs + d + w + w, yTexOffs + d,
modelPart->xTexSize, modelPart->yTexSize); // Down modelPart->xTexSize, modelPart->yTexSize); // Down
} else { } else {
if (faceMask & 8) if (faceMask & 8)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{u2, u3, l3, l2}, xTexOffs + d + w, std::array<const Vertex, 4>{u2, u3, l3, l2}, xTexOffs + d + w,
yTexOffs + d, xTexOffs + d + w + w, yTexOffs + 0, yTexOffs + d, xTexOffs + d + w + w, yTexOffs + 0,
modelPart->xTexSize, modelPart->yTexSize); // Down modelPart->xTexSize, modelPart->yTexSize); // Down
} }
if (faceMask & 16) if (faceMask & 16)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{u1, u0, u3, u2}, xTexOffs + d, std::array<const Vertex, 4>{u1, u0, u3, u2}, xTexOffs + d,
yTexOffs + d, xTexOffs + d + w, yTexOffs + d + h, yTexOffs + d, xTexOffs + d + w, yTexOffs + d + h,
modelPart->xTexSize, modelPart->yTexSize); // Front modelPart->xTexSize, modelPart->yTexSize); // Front
if (faceMask & 32) if (faceMask & 32)
polygons[faceCount++] = new _Polygon( polygons[faceCount++] = _Polygon(
std::array<const Vertex, 4>{l0, l1, l2, l3}, xTexOffs + d + w + d, std::array<const Vertex, 4>{l0, l1, l2, l3}, xTexOffs + d + w + d,
yTexOffs + d, xTexOffs + d + w + d + w, yTexOffs + d + h, yTexOffs + d, xTexOffs + d + w + d + w, yTexOffs + d + h,
modelPart->xTexSize, modelPart->xTexSize,
modelPart->yTexSize); // Back modelPart->yTexSize); // Back
polygons.length = faceCount;
if (modelPart->bMirror) { if (modelPart->bMirror) {
for (unsigned int i = 0; i < polygons.length; i++) for (unsigned int i = 0; i < polygons.size(); i++)
polygons[i]->mirror(); polygons[i].mirror();
} }
} }
void Cube::render(Tesselator* t, float scale) { void Cube::render(Tesselator* t, float scale) {
for (int i = 0; i < polygons.length; i++) { for (int i = 0; i < polygons.size(); i++) {
polygons[i]->render(t, scale); polygons[i].render(t, scale);
} }
} }

View file

@ -9,7 +9,7 @@ class Model;
class Cube { class Cube {
private: private:
std::array<Vertex, 8> vertices; std::array<Vertex, 8> vertices;
PolygonArray polygons; std::array<_Polygon, 6> polygons;
public: public:
const float x0, y0, z0, x1, y1, z1; const float x0, y0, z0, x1, y1, z1;

View file

@ -15,6 +15,7 @@ private:
bool _flipNormal; bool _flipNormal;
public: public:
_Polygon() = default;
_Polygon(std::span<const Vertex> vertices); _Polygon(std::span<const Vertex> vertices);
_Polygon(std::span<const Vertex, 4> vertices, int u0, int v0, int u1, _Polygon(std::span<const Vertex, 4> vertices, int u0, int v0, int u1,
int v1, float xTexSize, float yTexSize); int v1, float xTexSize, float yTexSize);

View file

@ -114,7 +114,6 @@ typedef arrayWithLength<Tile*> TileArray;
typedef arrayWithLength<Stat*> StatArray; typedef arrayWithLength<Stat*> StatArray;
typedef arrayWithLength<MobCategory*> MobCategoryArray; typedef arrayWithLength<MobCategory*> MobCategoryArray;
typedef arrayWithLength<File*> FileArray; typedef arrayWithLength<File*> FileArray;
typedef arrayWithLength<_Polygon*> PolygonArray;
typedef arrayWithLength<ServerLevel*> ServerLevelArray; typedef arrayWithLength<ServerLevel*> ServerLevelArray;
typedef arrayWithLength<MultiPlayerLevel*> MultiPlayerLevelArray; typedef arrayWithLength<MultiPlayerLevel*> MultiPlayerLevelArray;
typedef arrayWithLength<Level*> LevelArray; typedef arrayWithLength<Level*> LevelArray;