mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 15:44:36 +00:00
Merge pull request #989 from Azaezel/alpha41/nodeNosiness
get node utility methods by request
This commit is contained in:
commit
4db9d241bf
2 changed files with 75 additions and 0 deletions
|
|
@ -2019,6 +2019,41 @@ Point3F ShapeBase::getAIRepairPoint()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void ShapeBase::getNodeTransform(const char* nodeName, MatrixF* outMat)
|
||||||
|
{
|
||||||
|
S32 nodeIDx = mDataBlock->getShapeResource()->findNode(nodeName);
|
||||||
|
const MatrixF& xfm = isMounted() ? mMount.xfm : MatrixF::Identity;
|
||||||
|
|
||||||
|
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 = nodeTransform.getPosition();
|
||||||
|
position.convolve(scale);
|
||||||
|
nodeTransform.setPosition(position);
|
||||||
|
// Also we would like the object to be scaled to the model.
|
||||||
|
outMat->mul(mObjToWorld, nodeTransform);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShapeBase::getNodeVector(const char* nodeName, VectorF* vec)
|
||||||
|
{
|
||||||
|
MatrixF mat;
|
||||||
|
getNodeTransform(nodeName, &mat);
|
||||||
|
|
||||||
|
mat.getColumn(1, vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShapeBase::getNodePoint(const char* nodeName, Point3F* pos)
|
||||||
|
{
|
||||||
|
MatrixF mat;
|
||||||
|
getNodeTransform(nodeName, &mat);
|
||||||
|
mat.getColumn(3, pos);
|
||||||
|
}
|
||||||
|
|
||||||
void ShapeBase::getEyeTransform(MatrixF* mat)
|
void ShapeBase::getEyeTransform(MatrixF* mat)
|
||||||
{
|
{
|
||||||
|
|
@ -5352,3 +5387,37 @@ void ShapeBase::setSelectionFlags(U8 flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(ShapeBase, getNodeTransform, MatrixF, (const char* nodeName), ,
|
||||||
|
"@brief Get the node/bone transform.\n\n"
|
||||||
|
|
||||||
|
"@param node/bone name to query\n"
|
||||||
|
"@return the node position\n\n")
|
||||||
|
{
|
||||||
|
MatrixF mat;
|
||||||
|
object->getNodeTransform(nodeName, &mat);
|
||||||
|
return mat;
|
||||||
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(ShapeBase, getNodeVector, VectorF, (const char* nodeName), ,
|
||||||
|
"@brief Get the node/bone vector.\n\n"
|
||||||
|
|
||||||
|
"@param node/bone name to query\n"
|
||||||
|
"@return the node vector\n\n")
|
||||||
|
{
|
||||||
|
VectorF vec(0, 1, 0);
|
||||||
|
object->getNodeVector(nodeName, &vec);
|
||||||
|
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(ShapeBase, getNodePoint, Point3F, (const char* nodeName), ,
|
||||||
|
"@brief Get the node/bone position.\n\n"
|
||||||
|
|
||||||
|
"@param node/bone name to query\n"
|
||||||
|
"@return the node position\n\n")
|
||||||
|
{
|
||||||
|
Point3F pos(0, 0, 0);
|
||||||
|
object->getNodePoint(nodeName, &pos);
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1627,6 +1627,12 @@ public:
|
||||||
/// @name Object Transforms
|
/// @name Object Transforms
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
/// Returns a named node transform for a given shape
|
||||||
|
virtual void getNodeTransform(const char* nodeName, MatrixF* mat);
|
||||||
|
/// Returns a named node forwad vector for a given shape
|
||||||
|
virtual void getNodeVector(const char* nodeName, VectorF* vec);
|
||||||
|
/// Returns a named node position for a given shape
|
||||||
|
void getNodePoint(const char* nodeName, Point3F* pos);
|
||||||
/// Returns the eye transform of this shape, IE the eyes of a player
|
/// Returns the eye transform of this shape, IE the eyes of a player
|
||||||
/// @param mat Eye transform (out)
|
/// @param mat Eye transform (out)
|
||||||
virtual void getEyeTransform(MatrixF* mat);
|
virtual void getEyeTransform(MatrixF* mat);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue