Commit 6fdfa14d authored by hybrid's avatar hybrid

Clone method implementation for Animated Mesh Scenenode, by rogerborg.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1620 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 07b9bc8a
...@@ -220,6 +220,12 @@ namespace scene ...@@ -220,6 +220,12 @@ namespace scene
return Container[index]; return Container[index];
} }
SMD3QuaterionTagList & operator = (const SMD3QuaterionTagList & copyMe)
{
Container = copyMe.Container;
return *this;
}
core::array < SMD3QuaterionTag > Container; core::array < SMD3QuaterionTag > Container;
}; };
......
...@@ -211,6 +211,13 @@ namespace scene ...@@ -211,6 +211,13 @@ namespace scene
//! render mesh ignoring it's transformation. //! render mesh ignoring it's transformation.
/** Used with ragdolls. Culling is unaffected. */ /** Used with ragdolls. Culling is unaffected. */
virtual void setRenderFromIdentity( bool On )=0; virtual void setRenderFromIdentity( bool On )=0;
//! Creates a clone of this scene node and its children.
/** \param newParent An optional new parent.
\param newManager An optional new scene manager.
\return The newly created clone of this node. */
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
}; };
} // end namespace scene } // end namespace scene
......
...@@ -1021,6 +1021,45 @@ void CAnimatedMeshSceneNode::beginTransition() ...@@ -1021,6 +1021,45 @@ void CAnimatedMeshSceneNode::beginTransition()
TransitingBlend = 0.f; TransitingBlend = 0.f;
} }
ISceneNode* CAnimatedMeshSceneNode::clone(ISceneNode* newParent, ISceneManager* newManager)
{
if (!newParent) newParent = Parent;
if (!newManager) newManager = SceneManager;
CAnimatedMeshSceneNode * newNode =
new CAnimatedMeshSceneNode(Mesh, newParent, newManager, ID, RelativeTranslation,
RelativeRotation, RelativeScale);
newNode->cloneMembers(this, newManager);
newNode->Materials = Materials;
newNode->Box = Box;
newNode->Mesh = Mesh;
newNode->BeginFrameTime = BeginFrameTime;
newNode->StartFrame = StartFrame;
newNode->EndFrame = EndFrame;
newNode->FramesPerSecond = FramesPerSecond;
newNode->CurrentFrameNr = CurrentFrameNr;
newNode->JointMode = JointMode;
newNode->JointsUsed = JointsUsed;
newNode->TransitionTime = TransitionTime;
newNode->Transiting = Transiting;
newNode->TransitingBlend = TransitingBlend;
newNode->Looping = Looping;
newNode->ReadOnlyMaterials = ReadOnlyMaterials;
newNode->LoopCallBack = LoopCallBack;
newNode->PassCount = PassCount;
newNode->Shadow = Shadow;
newNode->JointChildSceneNodes = JointChildSceneNodes;
newNode->PretransitingSave = PretransitingSave;
newNode->RenderFromIdentity = RenderFromIdentity;
newNode->MD3Special = MD3Special;
(void)newNode->drop();
return newNode;
}
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
......
...@@ -153,6 +153,12 @@ namespace scene ...@@ -153,6 +153,12 @@ namespace scene
//! render mesh ignoring it's transformation. Used with ragdolls. (culling is unaffected) //! render mesh ignoring it's transformation. Used with ragdolls. (culling is unaffected)
virtual void setRenderFromIdentity( bool On ); virtual void setRenderFromIdentity( bool On );
//! Creates a clone of this scene node and its children.
/** \param newParent An optional new parent.
\param newManager An optional new scene manager.
\return The newly created clone of this node. */
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0);
private: private:
f32 buildFrameNr( u32 timeMs); f32 buildFrameNr( u32 timeMs);
...@@ -194,6 +200,13 @@ namespace scene ...@@ -194,6 +200,13 @@ namespace scene
{ {
core::stringc Tagname; core::stringc Tagname;
SMD3QuaterionTagList AbsoluteTagList; SMD3QuaterionTagList AbsoluteTagList;
SMD3Special & operator = (const SMD3Special & copyMe)
{
Tagname = copyMe.Tagname;
AbsoluteTagList = copyMe.AbsoluteTagList;
return *this;
}
}; };
SMD3Special MD3Special; SMD3Special MD3Special;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment