diff --git a/include/Nazara/Physics/PhysObject.hpp b/include/Nazara/Physics/PhysObject.hpp index e4fd64735..92c71a2bb 100644 --- a/include/Nazara/Physics/PhysObject.hpp +++ b/include/Nazara/Physics/PhysObject.hpp @@ -56,7 +56,7 @@ class NAZARA_API NzPhysObject : NzNonCopyable void SetPosition(const NzVector3f& position); void SetRotation(const NzQuaternionf& rotation); - NzPhysObject& operator=(NzPhysObject object); + NzPhysObject& operator=(const NzPhysObject& object); NzPhysObject& operator=(NzPhysObject&& object); private: diff --git a/src/Nazara/Physics/PhysObject.cpp b/src/Nazara/Physics/PhysObject.cpp index 56ff5b080..038a7062d 100644 --- a/src/Nazara/Physics/PhysObject.cpp +++ b/src/Nazara/Physics/PhysObject.cpp @@ -269,11 +269,8 @@ void NzPhysObject::SetRotation(const NzQuaternionf& rotation) UpdateBody(); } -NzPhysObject& NzPhysObject::operator=(NzPhysObject object) +NzPhysObject& NzPhysObject::operator=(const NzPhysObject& object) { - std::swap(*this, object); - - return *this; } void NzPhysObject::UpdateBody() @@ -282,10 +279,15 @@ void NzPhysObject::UpdateBody() /*for (std::set::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it) (*it)->PhysObjectOnUpdate(this);*/ + NzPhysObject physObj(object); + return operator=(std::move(physObj)); } NzPhysObject& NzPhysObject::operator=(NzPhysObject&& object) { + if (m_body) + NewtonDestroyBody(m_world->GetHandle(), m_body); + m_body = object.m_body; m_forceAccumulator = std::move(object.m_forceAccumulator); m_geom = std::move(object.m_geom);