2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-06-06 08:42:35 +00:00

chore: refactored node filtering

This commit is contained in:
LJW-Dev
2026-04-30 16:09:36 +08:00
committed by Jan Laupetin
parent 1031094242
commit 22820f0443
+23 -16
View File
@@ -626,7 +626,6 @@ namespace
assert(node.extras->contains("xmodel")); assert(node.extras->contains("xmodel"));
BSPXModel xmodel; BSPXModel xmodel;
xmodel.name = node.extras->at("xmodel"); xmodel.name = node.extras->at("xmodel");
int surfaceFlags = 0; int surfaceFlags = 0;
@@ -990,36 +989,42 @@ namespace
if (node.extras) if (node.extras)
{ {
if (node.extras->contains("classname")) bool hasSpawnpoint = node.extras->contains("spawnpoint");
bool hasZone = node.extras->contains("zone");
bool hasSpawner = node.extras->contains("spawner");
bool hasXmodel = node.extras->contains("xmodel");
bool hasClassname = node.extras->contains("classname");
if (m_is_world_gfx && (hasSpawnpoint || hasZone || hasSpawner))
return true;
if (hasClassname)
{ {
std::string classnameVal = node.extras->at("classname"); std::string classnameVal = node.extras->at("classname");
if (m_is_world_gfx && classnameVal.compare("script_brushmodel_gfx"))
if ((!m_is_world_gfx && !classnameVal.compare("script_brushmodel_gfx")) // skip GFX brush in collision return true; // skip any gfx node with classname not script_brushmodel_gfx
|| (m_is_world_gfx && classnameVal.compare("script_brushmodel_gfx"))) // include GFX brush in graphics if (!m_is_world_gfx && !classnameVal.compare("script_brushmodel_gfx"))
return false; return true; // skip any col node with classname script_brushmodel_gfx
return addClassNode(jRoot, node, nodeMatrix); return addClassNode(jRoot, node, nodeMatrix);
} }
if (!m_is_world_gfx) if (hasXmodel)
{ return addXModelNode(jRoot, node, nodeMatrix);
if (node.extras->contains("spawnpoint"))
if (hasSpawnpoint)
return addSpawnPointNode(node, nodeMatrix); return addSpawnPointNode(node, nodeMatrix);
if (m_bsp->isZombiesMap) if (m_bsp->isZombiesMap)
{ {
if (node.extras->contains("zone")) if (hasZone)
return addZoneNode(jRoot, node, nodeMatrix); return addZoneNode(jRoot, node, nodeMatrix);
if (node.extras->contains("spawner")) if (hasSpawner)
return addZSpawnerNode(node, nodeMatrix); return addZSpawnerNode(node, nodeMatrix);
} }
} }
if (node.extras->contains("xmodel"))
return addXModelNode(jRoot, node, nodeMatrix);
}
if (node.mesh) if (node.mesh)
{ {
int surfaceFlags = 0; int surfaceFlags = 0;
@@ -1028,7 +1033,9 @@ namespace
getSurfaceAndContentFlags(node.extras->at("flags"), surfaceFlags, contentFlags); getSurfaceAndContentFlags(node.extras->at("flags"), surfaceFlags, contentFlags);
bool isNoDraw = (surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NODRAW].surfaceFlags) != 0; bool isNoDraw = (surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NODRAW].surfaceFlags) != 0;
if (!m_is_world_gfx || (m_is_world_gfx && !isNoDraw)) // nodraw flag doesn't set faces to invisible, so remove it from the draw data if (m_is_world_gfx && isNoDraw)
return true;
return addMeshNode(jRoot, node, nodeMatrix); return addMeshNode(jRoot, node, nodeMatrix);
} }