From 7ddff94a30fc1ac5f4ba287512e29492d5d8bb62 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 23 Mar 2013 22:49:24 +0100 Subject: [PATCH] Added (move) assignement operator to Model Former-commit-id: eee1b92633656e47454218583f8e8bdabcddc157 --- include/Nazara/3D/Model.hpp | 8 ++++-- src/Nazara/3D/Model.cpp | 50 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/include/Nazara/3D/Model.hpp b/include/Nazara/3D/Model.hpp index 1eb9d96b3..b8cb11693 100644 --- a/include/Nazara/3D/Model.hpp +++ b/include/Nazara/3D/Model.hpp @@ -30,6 +30,7 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable public: NzModel(); NzModel(const NzModel& model); + NzModel(NzModel&& model); ~NzModel(); void AddToRenderQueue(NzRenderQueue& renderQueue) const; @@ -65,10 +66,13 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable void SetMaterial(unsigned int matIndex, NzMaterial* material); void SetMaterial(unsigned int skinIndex, unsigned int matIndex, NzMaterial* material); void SetMesh(NzMesh* mesh, const NzModelParameters& parameters = NzModelParameters()); - void SetSkin(unsigned int skin); - void SetSkinCount(unsigned int skinCount); bool SetSequence(const NzString& sequenceName); void SetSequence(unsigned int sequenceIndex); + void SetSkin(unsigned int skin); + void SetSkinCount(unsigned int skinCount); + + NzModel& operator=(const NzModel& node); + NzModel& operator=(NzModel&& node); private: void Invalidate() override; diff --git a/src/Nazara/3D/Model.cpp b/src/Nazara/3D/Model.cpp index 8f463db63..69141fa5e 100644 --- a/src/Nazara/3D/Model.cpp +++ b/src/Nazara/3D/Model.cpp @@ -533,6 +533,56 @@ void NzModel::SetSkinCount(unsigned int skinCount) m_skinCount = skinCount; } +NzModel& NzModel::operator=(const NzModel& node) +{ + NzSceneNode::operator=(node); + + m_animation = node.m_animation; + m_animationEnabled = node.m_animationEnabled; + m_boundingBox = node.m_boundingBox; + m_boundingBoxUpdated = node.m_boundingBoxUpdated; + m_currentFrame = node.m_currentFrame; + m_currentSequence = node.m_currentSequence; + m_drawEnabled = node.m_drawEnabled; + m_interpolation = node.m_interpolation; + m_matCount = node.m_matCount; + m_materials = node.m_materials; + m_mesh = node.m_mesh; + m_nextFrame = node.m_nextFrame; + m_skin = node.m_skin; + m_skinCount = node.m_skinCount; + + if (m_mesh->GetAnimationType() == nzAnimationType_Skeletal) + m_skeleton = node.m_skeleton; + + return *this; +} + +NzModel& NzModel::operator=(NzModel&& node) +{ + NzSceneNode::operator=(node); + + m_animation = std::move(node.m_animation); + m_animationEnabled = node.m_animationEnabled; + m_boundingBox = node.m_boundingBox; + m_boundingBoxUpdated = node.m_boundingBoxUpdated; + m_currentFrame = node.m_currentFrame; + m_currentSequence = node.m_currentSequence; + m_drawEnabled = node.m_drawEnabled; + m_interpolation = node.m_interpolation; + m_matCount = node.m_matCount; + m_materials = std::move(node.m_materials); + m_mesh = std::move(node.m_mesh); + m_nextFrame = node.m_nextFrame; + m_skin = node.m_skin; + m_skinCount = node.m_skinCount; + + if (m_mesh->GetAnimationType() == nzAnimationType_Skeletal) + m_skeleton = std::move(node.m_skeleton); + + return *this; +} + void NzModel::Invalidate() { NzSceneNode::Invalidate();