From 766a31431e41033b9cddf5759e9b6e1b4c77682a Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Tue, 15 Oct 2013 17:02:22 -0700 Subject: BulletSim: implement the SL bug where VEHICLE_HOVER_UP_ONLY disables the vehicle buoyancy if the vehicle is above its hover height. This is a known misfeature of this vehicle flag which has been accepted since it would break too many implementations. The problem is noticed when creating a jetski-like vehicle that jumps over sand bars. A boat normally is configured with neutral buoyancy and hovering at water height. When it jumps the sandbar, it needs to have gravity applied to get back to water level. --- OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'OpenSim') diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index f0d17d3..7b98f9d 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs @@ -1125,7 +1125,19 @@ namespace OpenSim.Region.Physics.BulletSPlugin { // If body is already heigher, use its height as target height if (VehiclePosition.Z > m_VhoverTargetHeight) + { m_VhoverTargetHeight = VehiclePosition.Z; + + // A 'misfeature' of this flag is that if the vehicle is above it's hover height, + // the vehicle's buoyancy goes away. This is an SL bug that got used by so many + // scripts that it could not be changed. + // So, if above the height, reapply gravity if buoyancy had it turned off. + if (m_VehicleBuoyancy != 0) + { + Vector3 appliedGravity = ControllingPrim.ComputeGravity(ControllingPrim.Buoyancy) * m_vehicleMass; + VehicleAddForce(appliedGravity); + } + } } if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0) -- cgit v1.1