/// <summary>
 /// Applies a continuous force to the RigidBody at a specified position
 /// Should be called from BulletUpdate()
 /// <param name="force">The continuous force to be applied</param>>
 /// <param name="position">Local position at which to apply the force</param>>
 /// </summary>
 public void ApplyForce(Vector3 force, Vector3 position)
 {
     if (!Initialized || Disposing || !Registered)
     {
         return;
     }
     BodyInstance.ApplyForce(force.ToBullet(), position.ToBullet());
 }
 /// <summary>
 /// Applies a torque impulse to the RigidBody at a specified position
 /// Should be called from BulletUpdate()
 /// </summary>
 /// <param name="torque">The torque impulse to be applied</param>
 public void ApplyTorqueImpulse(Vector3 impulse)
 {
     if (!Initialized || Disposing || !Registered)
     {
         return;
     }
     BodyInstance.ApplyTorqueImpulse(impulse.ToBullet());
 }
        /// <summary>
        /// Disposes of the RigidBody
        /// Should only be called internally or from a physics world instance.
        /// </summary>
        public override void Dispose()
        {
            //Dispose of all the components in reverse order
            if (Disposing)
            {
                return;
            }
            if (Registered)
            {
                BulletPhysicsWorldManager.Unregister(BodyInstance);
            }

            Disposing = true;
            BodyInstance?.Dispose();
            _constructionInfo?.Dispose();
            PhysicsMotionState?.Dispose();
            PhysicsCollisionShape?.Dispose();
        }