From ff892b5bcff640ddc27fe1003a7d90a475f00fb2 Mon Sep 17 00:00:00 2001 From: AliciaRaven Date: Tue, 17 Jun 2014 16:55:33 +0100 Subject: [PATCH] Add upward force to flight when close to the ground. Prevents current belly flop to the floor when flying with bullet physics and acts more like ODE and SL flight. Signed-off-by: Michael Cerquoni --- .../BulletSPlugin/BSActorAvatarMove.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs index 1b8a454493..54bae21175 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs @@ -139,6 +139,21 @@ public class BSActorAvatarMove : BSActor } } + private float ComputeMinFlightHeight() + { + float waterHeight = m_physicsScene.TerrainManager.GetWaterLevelAtXYZ(m_controllingPrim.RawPosition); + float groundHeight = m_physicsScene.TerrainManager.GetTerrainHeightAtXYZ(m_controllingPrim.RawPosition); + + if (groundHeight > waterHeight) + { + return groundHeight + 8f; + } + else + { + return waterHeight + 8f; + } + } + private void DeactivateAvatarMove() { if (m_velocityMotor != null) @@ -265,6 +280,17 @@ public class BSActorAvatarMove : BSActor // Add special movement force to allow avatars to walk up stepped surfaces. moveForce += WalkUpStairs(); + //Alicia: Maintain minimum height when flying + if (m_controllingPrim.Flying) + { + float hover_height = ComputeMinFlightHeight(); + + if( m_controllingPrim.Position.Z < hover_height) + { + moveForce.Z = moveForce.Z + 50f; + } + } + m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,move,stepVel={1},vel={2},mass={3},moveForce={4}", m_controllingPrim.LocalID, stepVelocity, m_controllingPrim.RawVelocity, m_controllingPrim.Mass, moveForce); m_physicsScene.PE.ApplyCentralImpulse(m_controllingPrim.PhysBody, moveForce);