|
@@ -794,6 +794,26 @@ void BodyInterface::AddAngularImpulse(const BodyID &inBodyID, Vec3Arg inAngularI
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool BodyInterface::ApplyBuoyancyImpulse(const BodyID &inBodyID, RVec3Arg inSurfacePosition, Vec3Arg inSurfaceNormal, float inBuoyancy, float inLinearDrag, float inAngularDrag, Vec3Arg inFluidVelocity, Vec3Arg inGravity, float inDeltaTime)
|
|
|
+{
|
|
|
+ BodyLockWrite lock(*mBodyLockInterface, inBodyID);
|
|
|
+ if (lock.Succeeded())
|
|
|
+ {
|
|
|
+ Body &body = lock.GetBody();
|
|
|
+ if (body.IsDynamic())
|
|
|
+ {
|
|
|
+ bool ret = body.ApplyBuoyancyImpulse(inSurfacePosition, inSurfaceNormal, inBuoyancy, inLinearDrag, inAngularDrag, inFluidVelocity, inGravity, inDeltaTime);
|
|
|
+
|
|
|
+ if (ret && !body.IsActive())
|
|
|
+ mBodyManager->ActivateBodies(&inBodyID, 1);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
void BodyInterface::SetPositionRotationAndVelocity(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity)
|
|
|
{
|
|
|
BodyLockWrite lock(*mBodyLockInterface, inBodyID);
|