From 9da6e2ef8c80f4c69c8fc65db45ada4c8ad2a94e Mon Sep 17 00:00:00 2001 From: SirLynix Date: Tue, 26 Dec 2023 12:42:08 +0100 Subject: [PATCH] ChipmunkPhysics2D: Fix kinematic body handling --- src/Nazara/ChipmunkPhysics2D/ChipmunkRigidBody2D.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Nazara/ChipmunkPhysics2D/ChipmunkRigidBody2D.cpp b/src/Nazara/ChipmunkPhysics2D/ChipmunkRigidBody2D.cpp index 189c8f640..729d53122 100644 --- a/src/Nazara/ChipmunkPhysics2D/ChipmunkRigidBody2D.cpp +++ b/src/Nazara/ChipmunkPhysics2D/ChipmunkRigidBody2D.cpp @@ -296,11 +296,17 @@ namespace Nz cpFloat mass = cpBodyGetMass(m_handle); cpFloat moment = cpBodyGetMoment(m_handle); - cpBody* newHandle = cpBodyNew(static_cast(mass), static_cast(moment)); + cpBody* newHandle = cpBodyNew(1.f, 0.f); cpBodySetUserData(newHandle, this); CopyBodyData(m_handle, newHandle); + if (cpBodyGetType(m_handle) == CP_BODY_TYPE_DYNAMIC) + { + cpBodySetMass(m_handle, mass); + cpBodySetMoment(m_handle, moment); + } + DestroyBody(); m_handle = newHandle; @@ -575,10 +581,8 @@ namespace Nz m_bodyIndex = m_world->RegisterBody(*this); - m_handle = cpBodyNew(m_mass, 0.f); // moment will be recomputed by SetGeom + m_handle = (m_mass > 0.f) ? cpBodyNew(m_mass, 0.f) : cpBodyNewKinematic(); // moment will be recomputed by SetGeom cpBodySetUserData(m_handle, this); - if (m_mass <= 0.f) - cpBodySetType(m_handle, CP_BODY_TYPE_KINEMATIC); SetGeom(settings.geom); SetAngularVelocity(settings.angularVelocity);