Address feedback form Emo in doscord

This commit is contained in:
Aaron Kimbrell
2025-10-04 23:02:28 -05:00
parent 1171d20333
commit b3b8362f53
4 changed files with 10 additions and 19 deletions

View File

@@ -244,17 +244,6 @@ std::vector<Lxfml::Result> Lxfml::Split(const std::string_view data, const NiPoi
std::unordered_set<std::string> usedBrickRefs; std::unordered_set<std::string> usedBrickRefs;
std::unordered_set<tinyxml2::XMLElement*> usedRigidSystems; std::unordered_set<tinyxml2::XMLElement*> usedRigidSystems;
auto splitListAttr = [](const char* attr) {
std::vector<std::string> out;
if (!attr) return out;
std::stringstream ss(attr);
std::string token;
while (std::getline(ss, token, ',')) {
if (!token.empty()) out.push_back(token);
}
return out;
};
// Helper to create output document from sets of brick refs and rigidsystem pointers // Helper to create output document from sets of brick refs and rigidsystem pointers
auto makeOutput = [&](const std::unordered_set<std::string>& bricksToInclude, const std::vector<tinyxml2::XMLElement*>& rigidSystemsToInclude, const std::vector<tinyxml2::XMLElement*>& groupsToInclude = {}) { auto makeOutput = [&](const std::unordered_set<std::string>& bricksToInclude, const std::vector<tinyxml2::XMLElement*>& rigidSystemsToInclude, const std::vector<tinyxml2::XMLElement*>& groupsToInclude = {}) {
tinyxml2::XMLDocument outDoc; tinyxml2::XMLDocument outDoc;
@@ -307,7 +296,7 @@ std::vector<Lxfml::Result> Lxfml::Split(const std::string_view data, const NiPoi
if (!g) return; if (!g) return;
const char* partAttr = g->Attribute("partRefs"); const char* partAttr = g->Attribute("partRefs");
if (partAttr) { if (partAttr) {
for (auto& tok : splitListAttr(partAttr)) partRefs.insert(tok); for (auto& tok : GeneralUtils::SplitString(partAttr, ',')) partRefs.insert(tok);
} }
for (auto* child = g->FirstChildElement("Group"); child; child = child->NextSiblingElement("Group")) collectParts(child); for (auto* child = g->FirstChildElement("Group"); child; child = child->NextSiblingElement("Group")) collectParts(child);
}; };
@@ -345,7 +334,7 @@ std::vector<Lxfml::Result> Lxfml::Split(const std::string_view data, const NiPoi
for (auto* rigid = rs->FirstChildElement("Rigid"); rigid; rigid = rigid->NextSiblingElement("Rigid")) { for (auto* rigid = rs->FirstChildElement("Rigid"); rigid; rigid = rigid->NextSiblingElement("Rigid")) {
const char* battr = rigid->Attribute("boneRefs"); const char* battr = rigid->Attribute("boneRefs");
if (!battr) continue; if (!battr) continue;
for (auto& tok : splitListAttr(battr)) { for (auto& tok : GeneralUtils::SplitString(battr, ',')) {
rsBoneRefs.push_back(tok); rsBoneRefs.push_back(tok);
if (boneRefsIncluded.find(tok) != boneRefsIncluded.end()) intersects = true; if (boneRefsIncluded.find(tok) != boneRefsIncluded.end()) intersects = true;
} }
@@ -366,7 +355,6 @@ std::vector<Lxfml::Result> Lxfml::Split(const std::string_view data, const NiPoi
} }
} }
} }
// also include bricks for any newly discovered parts
} }
} }
@@ -387,7 +375,7 @@ std::vector<Lxfml::Result> Lxfml::Split(const std::string_view data, const NiPoi
for (auto* rigid = rs->FirstChildElement("Rigid"); rigid; rigid = rigid->NextSiblingElement("Rigid")) { for (auto* rigid = rs->FirstChildElement("Rigid"); rigid; rigid = rigid->NextSiblingElement("Rigid")) {
const char* battr = rigid->Attribute("boneRefs"); const char* battr = rigid->Attribute("boneRefs");
if (!battr) continue; if (!battr) continue;
for (auto& tok : splitListAttr(battr)) { for (auto& tok : GeneralUtils::SplitString(battr, ',')) {
auto bpIt = boneRefToPartRef.find(tok); auto bpIt = boneRefToPartRef.find(tok);
if (bpIt != boneRefToPartRef.end()) { if (bpIt != boneRefToPartRef.end()) {
auto partRef = bpIt->second; auto partRef = bpIt->second;

View File

@@ -2640,7 +2640,7 @@ void GameMessages::HandleBBBSaveRequest(RakNet::BitStream& inStream, Entity* ent
model.id = newID; model.id = newID;
model.ugcId = blueprintID; model.ugcId = blueprintID;
model.position = splitLxfmls[i].center; model.position = splitLxfmls[i].center;
model.rotation = NiQuaternion(0.0f, 0.0f, 0.0f, 0.0f); model.rotation = QuatUtils::IDENTITY;
model.lot = 14; model.lot = 14;
Database::Get()->InsertNewPropertyModel(propertyId, model, "Objects_14_name"); Database::Get()->InsertNewPropertyModel(propertyId, model, "Objects_14_name");
@@ -2681,7 +2681,7 @@ void GameMessages::HandleBBBSaveRequest(RakNet::BitStream& inStream, Entity* ent
EntityInfo info; EntityInfo info;
info.lot = 14; info.lot = 14;
info.pos = splitLxfmls[i].center; info.pos = splitLxfmls[i].center;
info.rot = {}; info.rot = QuatUtils::IDENTITY;
info.spawner = nullptr; info.spawner = nullptr;
info.spawnerID = entity->GetObjectID(); info.spawnerID = entity->GetObjectID();
info.spawnerNodeID = 0; info.spawnerNodeID = 0;

View File

@@ -10,7 +10,7 @@ set(DCOMMONTEST_SOURCES
"TestLUString.cpp" "TestLUString.cpp"
"TestLUWString.cpp" "TestLUWString.cpp"
"dCommonDependencies.cpp" "dCommonDependencies.cpp"
"lxfml_split_tests.cpp" "LxfmlSplitTests.cpp"
) )
add_subdirectory(dEnumsTests) add_subdirectory(dEnumsTests)

View File

@@ -21,7 +21,10 @@ TEST(LxfmlSplitTests, SplitUsesAllBricksAndNoDuplicates) {
// Read the sample test.lxfml included in tests. Resolve path relative to this source file. // Read the sample test.lxfml included in tests. Resolve path relative to this source file.
std::filesystem::path srcDir = std::filesystem::path(__FILE__).parent_path(); std::filesystem::path srcDir = std::filesystem::path(__FILE__).parent_path();
std::filesystem::path filePath = srcDir / "test.lxfml"; std::filesystem::path filePath = srcDir / "test.lxfml";
std::string data = ReadFile(filePath.string()); std::ifstream in(filePath, std::ios::in | std::ios::binary);
std::ostringstream ss;
ss << in.rdbuf();
std::string data = ss.str();
ASSERT_FALSE(data.empty()) << "Failed to read " << filePath.string(); ASSERT_FALSE(data.empty()) << "Failed to read " << filePath.string();