32SNode::SNode() : SData(
""), type(SNode::NODE_TYPE_ID)
37SNode::SNode(
SScene* parent,
const std::string& nodeName,
const bool& isRootNode) :
SData(nodeName), currentScene(parent), type(
SNode::NODE_TYPE_ID)
42 staticVisibility =
true;
46 mouseFlags = SO3_OBJECT_MOUSE_ENABLE;
49 mPhysicsOverride =
false;
55 autoTrackTargetNode = 0;
70#if OGRE_VERSION < ((1 << 16) | (7 << 8) | 0)
75 O3SceneNode->getUserObjectBindings().setUserAny(
"SNode", Ogre::Any(
this));
79SNode::SNode(
SScene* parent,
const std::string& nodeName,
const NodeType& nodeType) :
SData(nodeName), currentScene(parent), type(nodeType)
84 staticVisibility =
true;
87 mouseFlags = SO3_OBJECT_MOUSE_ENABLE;
94 autoTrackTargetNode = 0;
110 #if OGRE_VERSION < ((1 << 16) | (7 << 8) | 0)
115 O3SceneNode->getUserObjectBindings().setUserAny(
"SNode", Ogre::Any(
this));
129 SNodeMap childNodeListCopy = childNodeList;
130 SNodeMap::iterator iChildNodeListCopy = childNodeListCopy.begin();
131 while (iChildNodeListCopy != childNodeListCopy.end())
133 iChildNodeListCopy->second->DetachFromParent();
134 iChildNodeListCopy++;
139 SAnimMap::const_iterator iAnimation = animationListCopy.begin();
140 while(iAnimation != animationListCopy.end())
190 isForeGround = mForeground;
200 isMouseClick = mClickable;
268 SNodeMap::iterator iNodeChildList = childNodeList.begin();
269 while (iNodeChildList != childNodeList.end())
271 iNodeChildList->second->UpdateNodeBody(bScale);
281 SNode* currentNode = iNodeList->second;
311 if (newParentNode ==
this)
316 SNodeMap::iterator iNodeSearched = childNodeList.find(newParentNode->
GetName());
317 if (iNodeSearched != childNodeList.end())
319 iNodeSearched->second->DetachFromParent();
326 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
330 newParentNode->AddChildNode(
this);
331 nodeFather = newParentNode;
343 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
347 nodeFather->RemoveChildNode(
this);
359 return childNodeList;
369 const SNodeMap childNodeListCopy = childNodeList;
370 SNodeMap::const_iterator iChildNodeList = childNodeListCopy.begin();
371 while (iChildNodeList != childNodeListCopy.end())
373 iChildNodeList->second->DetachFromParent();
378void SNode::AddChildNode(
SNode* newChild)
380 string nodeName = newChild->
GetName();
381 SNodeMap::iterator iNodeSearched = childNodeList.find(nodeName);
382 if (iNodeSearched == childNodeList.end())
385 if (ogreNewChild->getParentSceneNode() !=
O3SceneNode)
388 childNodeList.insert(SNodeMap::value_type(nodeName, newChild));
393 OGRE_EXCEPT(Ogre::Exception::ERR_DUPLICATE_ITEM,
"Can not add node named \""+ nodeName +
"\", an element with the same name already exist!",
"SNode::AddChildNode");
397void SNode::RemoveChildNode(SNode* existingChild)
399 string nodeName = existingChild->GetName();
400 SNodeMap::iterator iNodeSearched = childNodeList.find(nodeName);
401 if (iNodeSearched != childNodeList.end())
408 O3SceneNode->removeChild(existingChild->GetOgreSceneNodePointer());
410 catch(Ogre::Exception &)
416 childNodeList.erase(iNodeSearched);
421 OGRE_EXCEPT(Ogre::Exception::ERR_ITEM_NOT_FOUND,
"Can not remove Node named \""+ nodeName +
"\", element not found!",
"SNode::RemoveChildNode");
427 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"This SNode object do not manage Shadow Casting!",
"SNode::SetCastShadows");
432 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"This SNode object do not manage Shadow Casting!",
"SNode::GetCastShadows");
438 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"This SNode object do not manage Rendering distance!",
"SNode::SetRenderingDistance");
443 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"This SNode object do not manage Rendering distance!",
"SNode::GetRenderingDistance");
452 throw std::logic_error(
"SNode::GetBoundingBoxSize : This SNode object do not manage any bounding box!");
453 return Ogre::Vector3::ZERO;
458 throw std::logic_error(
"SNode::GetBoundingBoxSize : This SNode object do not manage any bounding box!");
459 return Ogre::Vector3::ZERO;
467 throw std::logic_error(
"SNode::GetWorldBoundingBoxSize : This SNode object do not manage any bounding box!");
468 return Ogre::Vector3::ZERO;
473 throw std::logic_error(
"SNode::GetWorldBoundingBoxCenter : This SNode object do not manage any bounding box!");
474 return Ogre::Vector3::ZERO;
479 Ogre::Vector3 bbox(Ogre::Vector3::ZERO);
484 catch (std::exception)
486 bbox = Ogre::Vector3::ZERO;
489 Ogre::Vector3 tbox(Ogre::Vector3::ZERO);
491 SNodeMap::iterator iChildNodeList = childNodeList.begin();
492 while (iChildNodeList != childNodeList.end())
494 tbox = iChildNodeList->second->GetSonsBoundingBox();
510 Ogre::Vector3 bbox(Ogre::Vector3::ZERO);
515 catch (std::exception)
517 bbox = Ogre::Vector3::ZERO;
520 Ogre::Vector3 tbox(Ogre::Vector3::ZERO);
522 SNodeMap::iterator iChildNodeList = childNodeList.begin();
523 while (iChildNodeList != childNodeList.end())
525 tbox = iChildNodeList->second->GetSonsWorldBoundingBox();
557 O3SceneNode->setPosition(Ogre::Vector3(0, 0.0, 0.15));
565 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
584 return O3SceneNode->getOrientation() * Ogre::Quaternion(0.0f, 0.0f, 1.0f, 0.0f);
598 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
606 O3SceneNode->setOrientation(quat * Ogre::Quaternion(0.0f, 0.0f, 1.0f, 0.0f));
619 Ogre::Quaternion tmpQuat(quat);
621 if (tmpQuat != Ogre::Quaternion::ZERO)
635 Ogre::Vector3 nscale = scale;
636 if (fabs(nscale.x) < 0.000001f)
637 nscale.x = 0.000001f;
638 if (fabs(nscale.y) < 0.000001f)
640 if (fabs(nscale.z) < 0.000001f)
641 nscale.z = 0.000001f;
669 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
684 Ogre::Node* m_nodeParent =
O3SceneNode->getParent();
689 m_nodeParent->_update(
false,
true);
693 Ogre::Vector3 gscale = m_nodeParent->_getDerivedScale();
695 if (gscale.x == 0.0f || gscale.y == 0.0f || gscale.z == 0.0f)
697 O3SceneNode->setPosition((m_nodeParent->_getDerivedOrientation().Inverse() * (pos - m_nodeParent->_getDerivedPosition()) / gscale));
718 return O3SceneNode->_getDerivedOrientation() * Ogre::Quaternion(0.0f, 0.0f, 1.0f, 0.0f);
732 SBone* boneFather =
static_cast <SBone*
> (nodeFather);
747 Ogre::Node* m_nodeParent =
O3SceneNode->getParent();
752 m_nodeParent->_update(
false,
true);
756 O3SceneNode->setOrientation((m_nodeParent->_getDerivedOrientation()).Inverse() * quat * Ogre::Quaternion(0.0f, 0.0f, 1.0f, 0.0f));
759 O3SceneNode->setOrientation(quat * Ogre::Quaternion(0.0f, 0.0f, 1.0f, 0.0f));
763 Ogre::Node* m_nodeParent =
O3SceneNode->getParent();
768 m_nodeParent->_update(
false,
true);
772 O3SceneNode->setOrientation((m_nodeParent->_getDerivedOrientation()).Inverse() * quat);
800 Ogre::Vector3 nscale = scale;
801 if (fabs(nscale.x) < 0.000001f)
802 nscale.x = 0.000001f;
803 if (fabs(nscale.y) < 0.000001f)
805 if (fabs(nscale.z) < 0.000001f)
806 nscale.z = 0.000001f;
808 Ogre::Node* m_nodeParent =
O3SceneNode->getParent();
813 m_nodeParent->_update(
false,
true);
817 Ogre::Vector3 gscale = m_nodeParent->_getDerivedScale();
819 if (gscale.x == 0.0f || gscale.y == 0.0f || gscale.z == 0.0f)
845 autoTrackTargetNode = targetNode;
846 if (autoTrackTargetNode != 0)
854 return autoTrackTargetNode;
859 O3SceneNode->pitch(Ogre::Radian(radianAngle),
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)));
866 O3SceneNode->yaw(Ogre::Radian(radianAngle),
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)));
873 O3SceneNode->roll(Ogre::Radian(radianAngle),
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)));
880 O3SceneNode->rotate(axis, Ogre::Radian(radianAngle),
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)));
887 O3SceneNode->translate(d,
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)));
894 O3SceneNode->setDirection(vec,
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)), localDirectionVector);
902 return O3SceneNode->_getDerivedOrientation() * axis;
909 O3SceneNode->lookAt(targetPoint,
static_cast <Ogre::Node::TransformSpace
> (
static_cast<int>(relativeTo)), localDirectionVector);
939 SNode* father = nodeFather;
940 Ogre::StaticGeometry* staticGeom = staticGeometry;
941 while ((father != 0) && (staticGeom == 0))
947 staticVisibility = visible;
950 staticGeom->setVisible(visible);
962 SNodeMap::iterator iChildNodeList = childNodeList.begin();
963 while (iChildNodeList != childNodeList.end())
965 iChildNodeList->second->SetVisible(visible, cascade);
990 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"Not implemented in Ogre 1.6!",
"SNode::ResetToInitialPosition");
1002 OGRE_EXCEPT(Ogre::Exception::ERR_NOT_IMPLEMENTED,
"Not implemented in Ogre 1.6!",
"SNode::ResetToInitialScale");
1018 SBoneMap::iterator iRootBones = rootBoneList.begin();
1019 while (iRootBones != rootBoneList.end())
1021 iRootBones->second->ResetNode();
1027 SNodeMap::iterator iChildNodeList = childNodeList.begin();
1028 while (iChildNodeList != childNodeList.end())
1030 iChildNodeList->second->ResetNode();
1061 assert(existingAnimation != 0);
1063 OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS,
"Cannot destroy an animation that is not handled by this node",
"SNode::DeleteAnimation");
1067 SO3_SAFE_DELETE(existingAnimation);
1072 return animationList.size();
1077 SAnimMap::iterator iAnimationSearched = animationList.find(animationName);
1078 if (iAnimationSearched != animationList.end())
1079 return iAnimationSearched->second;
1086 SAnimIndexMap::iterator iAnimationSearched = animationListByIndex.find(animationIndex);
1087 if (iAnimationSearched != animationListByIndex.end())
1088 return iAnimationSearched->second;
1095 return animationList;
1100 bool animated =
false;
1109 animList = animationList;
1111 if(animList.size() > 0)
1113 SAnimMap::const_iterator iAnimList = animList.begin();
1114 while(iAnimList != animList.end() && !animated)
1116 SAnim* curAnim = iAnimList->second;
1129 string animationName = existingAnimation->
GetName();
1130 SAnimMap::iterator iAnimationSearched = animationList.find(animationName);
1131 if (iAnimationSearched == animationList.end())
1133 animationList.insert(SAnimMap::value_type(animationName, existingAnimation));
1134 animationListByIndex.insert(SAnimIndexMap::value_type(existingAnimation->
GetIndex(), existingAnimation));
1139 OGRE_EXCEPT(Ogre::Exception::ERR_DUPLICATE_ITEM,
"Can not add animation named \""+ animationName +
"\", an element with the same name already exist!",
"SNode::AddAnimation");
1154 SAnimMap::iterator iAnimationSearched = animationList.find(animationName);
1155 if (iAnimationSearched != animationList.end())
1157 SAnim* findedAnimation = iAnimationSearched->second;
1158 animationList.erase(iAnimationSearched);
1161 SAnimIndexMap::iterator iAnimationIndexSearched = animationListByIndex.find(findedAnimation->
GetIndex());
1162 animationListByIndex.erase(iAnimationIndexSearched);
1167 OGRE_EXCEPT(Ogre::Exception::ERR_ITEM_NOT_FOUND,
"Can not remove Animation named \""+ animationName +
"\", element not found!",
"SNode::RemoveAnimation");
1183 return mat.getTrans();
1197 return Ogre::Quaternion(mat.linear());
1202 Ogre::Vector3 scaleParent;
1203 Ogre::Vector3 scaleResult(1.0,1.0,1.0);
1207 if(scaleParent.x != 0.0 && scaleParent.y != 0.0 && scaleParent.z != 0.0)
1237 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1252 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1267 if ((height == 0.0f) || (radius == 0.0f))
1282 if ((height == 0.0f) || (radius == 0.0f))
1297 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1312 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1327 if ((height == 0.0f) || (radius == 0.0f))
1342 if ((height == 0.0f) || (radius == 0.0f))
1357 if ((height == 0.0f) || (radius == 0.0f))
1372 if ((height == 0.0f) || (radius == 0.0f))
1387 if ((height == 0.0f) || (radius == 0.0f))
1402 if ((height == 0.0f) || (radius == 0.0f))
1417 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1432 if ((size.x == 0.0f) || (size.y == 0.0f) || (size.z == 0.0f))
1455 bool isTriangleList =
false;
1456 size_t sub = mesh->getNumSubMeshes();
1457 for (
size_t cs = 0; cs < sub && !isTriangleList; cs++)
1459 Ogre::SubMesh* sub_mesh = mesh->getSubMesh(cs);
1460 isTriangleList = (sub_mesh->operationType == Ogre::RenderOperation::OT_TRIANGLE_LIST) ?
true :
false;
1463 if (!isTriangleList)
1468 if ((convexTest.x == 0.0f) || (convexTest.y == 0.0f) || (convexTest.z == 0.0f))
1497 bool isTriangleList =
false;
1498 size_t sub = mesh->getNumSubMeshes();
1499 for (
size_t cs = 0; cs < sub && !isTriangleList; cs++)
1501 Ogre::SubMesh* sub_mesh = mesh->getSubMesh(cs);
1502 isTriangleList = (sub_mesh->operationType == Ogre::RenderOperation::OT_TRIANGLE_LIST) ?
true :
false;
1505 if (!isTriangleList)
1510 if ((convexTest.x == 0.0f) || (convexTest.y == 0.0f) || (convexTest.z == 0.0f))
1542 bool isTriangleList =
false;
1543 size_t sub = mesh->getNumSubMeshes();
1544 for (
size_t cs = 0; cs < sub && !isTriangleList; cs++)
1546 Ogre::SubMesh* sub_mesh = mesh->getSubMesh(cs);
1547 isTriangleList = (sub_mesh->operationType == Ogre::RenderOperation::OT_TRIANGLE_LIST) ?
true :
false;
1550 if (!isTriangleList)
1587 catch(Ogre::Exception &)
1593 SNodeMap::iterator iChildNodeList = childNodeList.begin();
1594 while (iChildNodeList != childNodeList.end())
1596 iChildNodeList->second->RestoreStaticGraph();
1603 if (staticGeometry != 0)
1615 SNode* father = nodeFather;
1616 bool alreadySet =
false;
1618 while ((father != 0) && !alreadySet)
1629 SNodeMap::iterator iChildNodeList = childNodeList.begin();
1630 while (iChildNodeList != childNodeList.end())
1632 iChildNodeList->second->SetAsStaticGeometry(
false);
1637 staticGeometry->destroy();
1647 staticGeometry->setCastShadows(
true);
1650 staticGeometry->build();
1651 staticGeometry->setVisible(staticVisibility);
1663 if (staticGeometry != 0)
1671 return staticGeometry;
1685 SNodeMap::iterator iChildNodeList = childNodeList.begin();
1686 while (iChildNodeList != childNodeList.end())
1688 iChildNodeList->second->SetDirty(state);
1727 SBoneMap::iterator iRootBones = rootBoneList.begin();
1728 while (iRootBones != rootBoneList.end())
1730 iRootBones->second->UpdateNodeFromBody();
1736 SNodeMap::iterator iChildNodeList = childNodeList.begin();
1737 while (iChildNodeList != childNodeList.end())
1739 iChildNodeList->second->UpdateNodeFromBody();
1747 mPhysicsOverride = state;
1753 return mPhysicsOverride;
unsigned short GetIndex()
void SetScale(const Ogre::Vector3 &mDerivedScale)
OgreNewt::Body * getOgreNewtBodyPointer()
void SetVelocity(const Ogre::Vector3 &velocity)
void UpdatePositionOrientation()
void BodyUpdateCallback(OgreNewt::Body *body)
void SetOmega(const Ogre::Vector3 &omega)
SSkeleton * GetSkeleton()
void AttachToBone(Ogre::MovableObject *ogreObject)
void DetachFromBone(Ogre::MovableObject *ogreObject)
virtual Ogre::Quaternion GetGlobalOrientation()
virtual Ogre::Vector3 GetGlobalPosition()
virtual Ogre::Vector3 GetGlobalScale()
std::string GetName() const
SSkeleton * GetSkeleton()
virtual Ogre::Vector3 GetBoundingBoxSize(const bool &childs=false)
virtual bool GetCastShadows()
Ogre::Entity * getOgreEntityPointer()
void SetVisible(const bool &isVisible)
virtual Ogre::Quaternion GetGlobalOrientation()
SBody * CreateCapsuleBody(const Ogre::Real &radius, const Ogre::Real &height)
const SNodeMap GetChildrenNodes() const
bool GetPhysicsOverride()
void AddAnimation(SAnim *existingAnimation)
Ogre::Vector3 GetSonsWorldBoundingBox()
void UpdateNodeBody(const bool &bScale)
SBody * CreateCylinderBody(const Ogre::Real &radius, const Ogre::Real &height)
void SetFlags(const int &flags)
bool GetSceneNodeHasBody()
bool GetSceneNodeIsMouseClick()
void SetAutoTracking(const bool &autoTrack, SNode *targetNode=0, const Ogre::Vector3 &localDirectionVector=Ogre::Vector3::NEGATIVE_UNIT_Z, const Ogre::Vector3 &offset=Ogre::Vector3::ZERO)
void RestoreStaticGraph()
virtual void SetInheritOrientation(const bool &state)
size_t GetNumAnimations()
virtual Ogre::Vector3 GetPosition()
void SetDirection(const Ogre::Vector3 &vec, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_LOCAL_TS, const Ogre::Vector3 &localDirectionVector=Ogre::Vector3::NEGATIVE_UNIT_Z)
Ogre::SceneNode * O3SceneNode
Ogre::Quaternion GetOrientationFromNode(SNode *nodeRef)
virtual Ogre::Vector3 GetBoundingBoxCenter(const bool &childs=false)
Ogre::Vector3 initialPosition
virtual void Yaw(const float &radianAngle, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_LOCAL_TS)
virtual void SetScale(const Ogre::Vector3 &scale)
void UpdateNodeFromBody()
void RemoveAnimation(SAnim *existingAnimation)
void LookAt(const Ogre::Vector3 &targetPoint, const SNode::NodeTransformSpace &relativeTo, const Ogre::Vector3 &localDirectionVector=Ogre::Vector3::NEGATIVE_UNIT_Z)
SScene * GetParentScene()
virtual void SetGlobalPosition(const Ogre::Vector3 &pos, bool updateBody=true)
virtual Ogre::Vector3 GetScale()
virtual bool GetInheritOrientation()
void SetSceneNodeIsMouseForeground(const bool &mForeground)
SBody * CreateConcaveHullBody(const Ogre::Real &tolerance)
virtual void SetGlobalOrientation(const Ogre::Quaternion &quat, bool updateBody=true)
virtual float GetRenderingDistance()
SNodeAnimation * CreateNodeAnimation(const std::string &animationName, const float &animationLength)
virtual void SetRenderingDistance(const float &distance)
void SetDirty(bool state)
SBody * CreateConvexHullBody(const Ogre::Real &tolerance)
SBody * CreateEllipsoidBody(const Ogre::Vector3 &size)
virtual void Pitch(const float &radianAngle, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_LOCAL_TS)
void ResetToInitialScale()
virtual void AddOrientation(const Ogre::Quaternion &quat)
void SetAsStaticGeometry(const bool &state)
int GetSceneNodeMouseFlags()
void SetSceneNodeIsMouseClick(const bool &mClickable)
virtual void SetCastShadows(const bool &castShadows)
virtual void SetGlobalScale(const Ogre::Vector3 &scale, bool updateBody=true)
void SetShowBoundingBox(const bool &showBounding)
Ogre::Vector3 GetScaleFromNode(SNode *nodeRef)
virtual void SetOrientation(const Ogre::Quaternion &quat)
SBody * GetSceneNodeBody()
Ogre::Vector3 GetPositionFromNode(SNode *nodeRef)
SBody * CreateTreeBody(const bool &optimize)
virtual void SetPosition(const Ogre::Vector3 &pos)
virtual Ogre::Vector3 GetWorldBoundingBoxSize(const bool &childs=false)
SBody * CreateChamferCylinderBody(const Ogre::Real &radius, const Ogre::Real &height)
virtual void ResetOrientation()
virtual Ogre::Vector3 GetGlobalPosition()
unsigned short animationCounter
virtual Ogre::Quaternion GetInitialOrientation()
bool GetAsStaticGeometry()
virtual Ogre::Vector3 GetInitialScale()
SBody * CreatePyramidBody(const Ogre::Vector3 &size)
Ogre::StaticGeometry * GetStaticGeometry()
Ogre::MovableObject * GetMovableObjectPointer()
virtual void Roll(const float &radianAngle, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_LOCAL_TS)
bool GetShowBoundingBox()
virtual Ogre::Vector3 GetGlobalScale()
SAnim * GetAnimation(const std::string &animationName)
Ogre::MovableObject * ogreMovableObject
virtual Ogre::Quaternion GetOrientation()
void SetSceneNodeMouseFlags(const int &flags)
Ogre::Vector3 GetDirection(bool derived=false, Ogre::Vector3 axis=Ogre::Vector3::NEGATIVE_UNIT_Z)
virtual void StoreInitialPRS()
SBody * CreateBoxBody(const Ogre::Vector3 &boxsetting)
virtual void ResetToInitialOrientation()
void ResetToInitialPosition()
void SetPhysicsOverride(bool state)
virtual bool GetCastShadows()
virtual void Rotate(const Ogre::Vector3 &axis, const float &radianAngle, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_LOCAL_TS)
virtual Ogre::Vector3 GetBoundingBoxSize(const bool &childs=false)
void DeleteAnimation(SAnim *existingAnimation)
void SetVisible(const bool &visible, const bool &cascade=true)
virtual int GetNumChildren()
virtual Ogre::Vector3 GetInitialPosition()
virtual Ogre::Matrix4 GetTransformationMatrix()
Ogre::Quaternion initialOrientation
virtual Ogre::Vector3 GetWorldBoundingBoxCenter(const bool &childs=false)
SNode * GetParentSceneNode()
SAnimMap GetAnimations() const
SBody * CreateConeBody(const Ogre::Real &radius, const Ogre::Real &height)
bool GetSceneNodeIsMouseForeground()
virtual void Translate(const Ogre::Vector3 &d, const SNode::NodeTransformSpace &relativeTo=SNode::SO3_PARENT_TS)
Ogre::Vector3 initialScale
SNode * GetAutoTrackingTarget()
virtual void ResetToInitialPRS()
Ogre::SceneNode * GetOgreSceneNodePointer()
void AttachToParent(SNode *newParentNode)
Ogre::Vector3 GetSonsBoundingBox()
void AddAnimation(SAnim *existingAnimation)
Ogre::SceneManager * O3SceneManager
const SNodeMap & GetNodeList() const
Ogre::SceneManager * GetOgreScenePointer()
void RemoveAnimation(SAnim *existingAnimation)
std::unordered_map< std::string, SBone * > SBoneMap
std::unordered_map< std::string, SNode * > SNodeMap
std::unordered_map< std::string, SAnim * > SAnimMap
STBI_EXTERN unsigned long flags