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

feat: better filtering for xmodels

This commit is contained in:
LJW-Dev
2026-04-30 16:06:44 +08:00
committed by Jan Laupetin
parent c227779ac4
commit 1031094242
+13 -11
View File
@@ -629,17 +629,19 @@ namespace
xmodel.name = node.extras->at("xmodel"); xmodel.name = node.extras->at("xmodel");
xmodel.doesCastShadow = true; int surfaceFlags = 0;
if (node.extras->contains("flags")) int contentFlags = 0;
{ if (node.extras && node.extras->contains("flags"))
std::vector<std::string> flagStrVec = utils::StringSplit(node.extras->at("flags"), ','); getSurfaceAndContentFlags(node.extras->at("flags"), surfaceFlags, contentFlags);
for (std::string& flag : flagStrVec)
if (!flag.compare(surfaceTypeToNameMap[SURF_TYPE_NOCASTSHADOW])) bool isNoDraw = (surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NODRAW].surfaceFlags) != 0;
{ bool isNoCastShadow = (surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NOCASTSHADOW].surfaceFlags) != 0;
xmodel.doesCastShadow = false; bool isNonSolid = (surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NONSOLID].surfaceFlags) != 0;
break; if (m_is_world_gfx && isNoDraw)
} return true;
} if (!m_is_world_gfx && isNonSolid)
return true;
xmodel.doesCastShadow = !isNoCastShadow;
Eigen::Vector4f position(0, 0, 0, 1.0f); Eigen::Vector4f position(0, 0, 0, 1.0f);
Eigen::Vector4f transformedPosition = nodeMatrix * position; Eigen::Vector4f transformedPosition = nodeMatrix * position;