aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs23
1 files changed, 12 insertions, 11 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
index 557c4e2..42381ef 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -227,7 +227,6 @@ public class BSActorAvatarMove : BSActor
227 stepVelocity.Z = m_controllingPrim.RawVelocity.Z; 227 stepVelocity.Z = m_controllingPrim.RawVelocity.Z;
228 } 228 }
229 229
230
231 // Colliding and not flying with an upward force. The avatar must be trying to jump. 230 // Colliding and not flying with an upward force. The avatar must be trying to jump.
232 if (!m_controllingPrim.Flying && m_controllingPrim.IsColliding && stepVelocity.Z > 0) 231 if (!m_controllingPrim.Flying && m_controllingPrim.IsColliding && stepVelocity.Z > 0)
233 { 232 {
@@ -259,23 +258,25 @@ public class BSActorAvatarMove : BSActor
259 // DetailLog("{0},BSCharacter.MoveMotor,taint,overrideStepZWithWorldZ,stepVel={1}", LocalID, stepVelocity); 258 // DetailLog("{0},BSCharacter.MoveMotor,taint,overrideStepZWithWorldZ,stepVel={1}", LocalID, stepVelocity);
260 } 259 }
261 260
262 // 'stepVelocity' is now the speed we'd like the avatar to move in. Turn that into an instantanous force. 261 //Alicia: Maintain minimum height when flying.
263 OMV.Vector3 moveForce = (stepVelocity - m_controllingPrim.RawVelocity) * m_controllingPrim.Mass; 262 // SL has a flying effect that keeps the avatar flying above the ground by some margin
264
265 // Add special movement force to allow avatars to walk up stepped surfaces.
266 moveForce += WalkUpStairs();
267
268 //Alicia: Maintain minimum height when flying
269 if (m_controllingPrim.Flying) 263 if (m_controllingPrim.Flying)
270 { 264 {
271 float hover_height = m_physicsScene.TerrainManager.GetTerrainHeightAtXYZ(m_controllingPrim.RawPosition) + 8f; 265 float hover_height = m_physicsScene.TerrainManager.GetTerrainHeightAtXYZ(m_controllingPrim.RawPosition)
266 + BSParam.AvatarFlyingGroundMargin;
272 267
273 if( m_controllingPrim.Position.Z < hover_height) 268 if( m_controllingPrim.Position.Z < hover_height)
274 { 269 {
275 moveForce.Z = moveForce.Z + 50f; 270 stepVelocity.Z += BSParam.AvatarFlyingGroundUpForce;
276 } 271 }
277 } 272 }
278 273
274 // 'stepVelocity' is now the speed we'd like the avatar to move in. Turn that into an instantanous force.
275 OMV.Vector3 moveForce = (stepVelocity - m_controllingPrim.RawVelocity) * m_controllingPrim.Mass;
276
277 // Add special movement force to allow avatars to walk up stepped surfaces.
278 moveForce += WalkUpStairs();
279
279 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,move,stepVel={1},vel={2},mass={3},moveForce={4}", 280 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,move,stepVel={1},vel={2},mass={3},moveForce={4}",
280 m_controllingPrim.LocalID, stepVelocity, m_controllingPrim.RawVelocity, m_controllingPrim.Mass, moveForce); 281 m_controllingPrim.LocalID, stepVelocity, m_controllingPrim.RawVelocity, m_controllingPrim.Mass, moveForce);
281 m_physicsScene.PE.ApplyCentralImpulse(m_controllingPrim.PhysBody, moveForce); 282 m_physicsScene.PE.ApplyCentralImpulse(m_controllingPrim.PhysBody, moveForce);