From fec5105e1800f048a1a2d9c67c76935a1f0120be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Zi=C4=99ba?= Date: Sat, 19 Nov 2022 17:49:18 +0100 Subject: [PATCH] Fix catastrofic rotation after undocking from space station. --- src/DynamicBody.cpp | 14 +++++++++++++- src/DynamicBody.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/DynamicBody.cpp b/src/DynamicBody.cpp index 5f887583ff8..db186b6def7 100644 --- a/src/DynamicBody.cpp +++ b/src/DynamicBody.cpp @@ -62,7 +62,7 @@ DynamicBody::DynamicBody(const Json &jsonObj, Space *space) : m_mass = dynamicBodyObj["mass"]; m_massRadius = dynamicBodyObj["mass_radius"]; m_angInertia = dynamicBodyObj["ang_inertia"]; - m_isMoving = dynamicBodyObj["is_moving"]; + SetMoving(dynamicBodyObj["is_moving"]); } catch (Json::type_error &) { throw SavedGameCorruptException(); } @@ -71,6 +71,18 @@ DynamicBody::DynamicBody(const Json &jsonObj, Space *space) : m_decelerating = false; } +void DynamicBody::SetMoving(bool isMoving) +{ + m_isMoving = isMoving; + + if (!m_isMoving) { + m_vel = vector3d(0.0); + m_angVel = vector3d(0.0); + m_force = vector3d(0.0); + m_torque = vector3d(0.0); + } +} + void DynamicBody::SaveToJson(Json &jsonObj, Space *space) { ModelBody::SaveToJson(jsonObj, space); diff --git a/src/DynamicBody.h b/src/DynamicBody.h index 39ac7271e00..8c752d6c9e2 100644 --- a/src/DynamicBody.h +++ b/src/DynamicBody.h @@ -32,7 +32,7 @@ class DynamicBody : public ModelBody { vector3d GetAngularMomentum() const; double GetAngularInertia() const { return m_angInertia; } void SetMassDistributionFromModel(); - void SetMoving(bool isMoving) { m_isMoving = isMoving; } + void SetMoving(bool isMoving); bool IsMoving() const { return m_isMoving; } virtual double GetMass() const override { return m_mass; } // XXX don't override this virtual void TimeStepUpdate(const float timeStep) override;