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.varregion
parent
d0c1780839
commit
766a31431e
|
@ -1125,7 +1125,19 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
// If body is already heigher, use its height as target height
|
// If body is already heigher, use its height as target height
|
||||||
if (VehiclePosition.Z > m_VhoverTargetHeight)
|
if (VehiclePosition.Z > m_VhoverTargetHeight)
|
||||||
|
{
|
||||||
m_VhoverTargetHeight = VehiclePosition.Z;
|
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)
|
if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0)
|
||||||
|
|
Loading…
Reference in New Issue