mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
feat(ugc): one shape per transparent brick, as LU Toolbox leaves them
LU Toolbox's Combine Transparent is off by default, so each transparent brick is its own object and shape (the client can sort them). combine_transparent=1 joins them as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -375,6 +375,7 @@ TEST(UgcModel, ColorsLikeLuToolbox) {
|
||||
plain.colorVariation = 0.0f;
|
||||
const auto flat = UgcModel::Build(parts, library, plain);
|
||||
EXPECT_EQ(flat.transparent.TriangleCount(), 12u); // only the all-transparent brick
|
||||
EXPECT_EQ(flat.transparentBricks, std::vector<size_t>{ 0 });
|
||||
EXPECT_EQ(flat.opaque.TriangleCount(), 60u);
|
||||
EXPECT_NEAR(flat.opaque.colors[0].r * 255.0f, 222.0f, 0.5f);
|
||||
EXPECT_FLOAT_EQ(flat.opaque.colors[0].a, 1.0f);
|
||||
@@ -447,6 +448,22 @@ TEST(UgcModel, DividesAlongTheLongestSide) {
|
||||
EXPECT_EQ(UgcModel::Divide(mesh, 100, 1000).size(), 1u);
|
||||
}
|
||||
|
||||
TEST(UgcModel, SplitsTransparentBricksApart) {
|
||||
// Two boxes in one mesh, one shape each (LU Toolbox leaves transparent bricks uncombined)
|
||||
UgcBricks::BrickLibrary library(MakeRes(), 0);
|
||||
std::string error;
|
||||
const auto model = UgcModel::Build(UgcModel::ParseLxfml(R"(<LXFML versionMajor="5"><Bricks>
|
||||
<Brick><Part designID="3001" materials="40"><Bone transformation="1,0,0,0,1,0,0,0,1,0,0,0"/></Part></Brick>
|
||||
<Brick><Part designID="3001" materials="43"><Bone transformation="1,0,0,0,1,0,0,0,1,5,0,0"/></Part></Brick>
|
||||
</Bricks></LXFML>)", error), library);
|
||||
ASSERT_EQ(model.transparentBricks.size(), 2u);
|
||||
const auto pieces = UgcModel::SplitAt(model.transparent, model.transparentBricks);
|
||||
ASSERT_EQ(pieces.size(), 2u);
|
||||
EXPECT_EQ(pieces[0].positions.size(), 8u);
|
||||
EXPECT_EQ(pieces[1].TriangleCount(), 12u);
|
||||
EXPECT_NEAR(pieces[1].positions[0].x, 5.0f, 1e-5f);
|
||||
}
|
||||
|
||||
TEST(UgcFormats, LodNifReadsBack) {
|
||||
UgcModel::Mesh near, far;
|
||||
near.positions = { { 0, 0, 0 }, { 1, 0, 0 }, { 0, 1, 0 }, { 1, 1, 0 } };
|
||||
|
||||
Reference in New Issue
Block a user