diff --git a/Include/TSE.h b/Include/TSE.h index 0ace157..f7e9d6d 100644 --- a/Include/TSE.h +++ b/Include/TSE.h @@ -1405,6 +1405,8 @@ class CSpaceObject : public CObject virtual bool HasAttribute (const CString &sAttribute) const { return sAttribute.IsBlank(); } virtual bool HasSpecialAttribute (const CString &sAttrib) const; virtual bool HasVolumetricShadow (void) const { return false; } + //virtual bool IsAffectedByGravity(void) { return IsAnchored(); } + virtual bool IsAffectedByGravity(void) { return true; } virtual bool IsExplored (void) { return true; } virtual bool IsImmutable (void) const { return false; } virtual bool IsKnown (void) { return true; } diff --git a/Include/TSESpaceObjectsImpl.h b/Include/TSESpaceObjectsImpl.h index 9a826df..95fba5a 100644 --- a/Include/TSESpaceObjectsImpl.h +++ b/Include/TSESpaceObjectsImpl.h @@ -1169,7 +1169,8 @@ class CShip : public CSpaceObject virtual void GetVisibleDamageDesc (SVisibleDamage &Damage) override; virtual bool HasAttribute (const CString &sAttribute) const override; virtual bool ImageInObject (const CVector &vObjPos, const CObjectImageArray &Image, int iTick, int iRotation, const CVector &vImagePos) override; - virtual bool IsAnchored (void) const override { return (GetDockedObj() != NULL) || IsManuallyAnchored(); } + virtual bool IsAffectedByGravity(void) { return CSpaceObject::IsAffectedByGravity() && !IsInertialess(); } //This makes sure that Inertialess Drives stop gravity + virtual bool IsAnchored(void) const override { return (GetDockedObj() != NULL) || IsManuallyAnchored(); } virtual bool IsAngryAt (CSpaceObject *pObj) override; virtual bool IsAttached (void) const override { return m_fShipCompartment; } virtual bool IsBlind (void) override { return m_iBlindnessTimer != 0; } diff --git a/TSE/CSystem.cpp b/TSE/CSystem.cpp index bf9b0df..0b6c666 100644 --- a/TSE/CSystem.cpp +++ b/TSE/CSystem.cpp @@ -4981,6 +4981,9 @@ void CSystem::UpdateGravity (SUpdateCtx &Ctx, CSpaceObject *pGravityObj) continue; } + if (!pObj->IsAffectedByGravity()) + continue; + // Compute acceleration Metric rAccel = r1EAccel * rScaleRadius2 / rDist2;