Browse Source

tsstatic aug cleanups
1- adds a hasNode method to see if a named node exists
2- cleans up getNodeTransform nomenclature and notes, and adds safeties

AzaezelX 3 years ago
parent
commit
a75c64fef3
1 changed files with 25 additions and 8 deletions
  1. 25 8
      Engine/source/T3D/tsStatic.cpp

+ 25 - 8
Engine/source/T3D/tsStatic.cpp

@@ -1865,28 +1865,45 @@ void TSStatic::setSelectionFlags(U8 flags)
    }
 }
 
+bool TSStatic::hasNode(const char* nodeName)
+{
+
+   S32 nodeIDx = getShapeResource()->findNode(nodeName);
+   return nodeIDx >= 0;
+}
+
 void TSStatic::getNodeTransform(const char *nodeName, const MatrixF &xfm, MatrixF *outMat)
 {
 
     S32 nodeIDx = getShapeResource()->findNode(nodeName);
 
-    MatrixF mountTransform = mShapeInstance->mNodeTransforms[nodeIDx];
-    mountTransform.mul(xfm);
-    const Point3F &scale = getScale();
+    MatrixF nodeTransform(xfm);
+    const Point3F& scale = getScale();
+    if (nodeIDx != -1)
+    {
+       nodeTransform = mShapeInstance->mNodeTransforms[nodeIDx];
+       nodeTransform.mul(xfm);
+    }
     // The position of the mount point needs to be scaled.
-    Point3F position = mountTransform.getPosition();
+    Point3F position = nodeTransform.getPosition();
     position.convolve(scale);
-    mountTransform.setPosition(position);
+    nodeTransform.setPosition(position);
     // Also we would like the object to be scaled to the model.
-    outMat->mul(mObjToWorld, mountTransform);
+    outMat->mul(mObjToWorld, nodeTransform);
     return;
 }
 
 
+DefineEngineMethod(TSStatic, hasNode, bool, (const char* nodeName), ,
+   "@brief Get if this model has this node name.\n\n")
+{
+   return object->hasNode(nodeName);
+}
+
 DefineEngineMethod(TSStatic, getNodeTransform, TransformF, (const char *nodeName), ,
-   "@brief Get the world transform of the specified mount slot.\n\n"
+   "@brief Get the world transform of the specified node name.\n\n"
 
-   "@param slot Image slot to query\n"
+   "@param node name query\n"
    "@return the mount transform\n\n")
 {
    MatrixF xf(true);