aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/PhysicsModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/PhysicsModules')
-rwxr-xr-xOpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs24
-rwxr-xr-x[-rw-r--r--]OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs2
-rwxr-xr-xOpenSim/Region/PhysicsModules/BulletS/BSParam.cs3
3 files changed, 19 insertions, 10 deletions
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
index 40c6b98..4e9216d 100755
--- a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
@@ -47,9 +47,9 @@ public class BSActorAvatarMove : BSActor
47 // The amount the step up is applying. Used to smooth stair walking. 47 // The amount the step up is applying. Used to smooth stair walking.
48 float m_lastStepUp; 48 float m_lastStepUp;
49 49
50 // There are times the velocity is set but we don't want to inforce stationary until the 50 // There are times the velocity or force is set but we don't want to inforce
51 // real velocity drops. 51 // stationary until some tick in the future and the real velocity drops.
52 bool m_waitingForLowVelocityForStationary = false; 52 int m_waitingForLowVelocityForStationary = 0;
53 53
54 public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName) 54 public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName)
55 : base(physicsScene, pObj, actorName) 55 : base(physicsScene, pObj, actorName)
@@ -114,14 +114,18 @@ public class BSActorAvatarMove : BSActor
114 m_velocityMotor.Enabled = true; 114 m_velocityMotor.Enabled = true;
115 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,SetVelocityAndTarget,vel={1}, targ={2}", 115 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,SetVelocityAndTarget,vel={1}, targ={2}",
116 m_controllingPrim.LocalID, vel, targ); 116 m_controllingPrim.LocalID, vel, targ);
117 m_waitingForLowVelocityForStationary = false; 117 m_waitingForLowVelocityForStationary = 0;
118 } 118 }
119 }); 119 });
120 } 120 }
121 121
122 public void SuppressStationayCheckUntilLowVelocity() 122 public void SuppressStationayCheckUntilLowVelocity()
123 { 123 {
124 m_waitingForLowVelocityForStationary = true; 124 m_waitingForLowVelocityForStationary = 1;
125 }
126 public void SuppressStationayCheckUntilLowVelocity(int waitTicks)
127 {
128 m_waitingForLowVelocityForStationary = waitTicks;
125 } 129 }
126 130
127 // If a movement motor has not been created, create one and start the movement 131 // If a movement motor has not been created, create one and start the movement
@@ -143,7 +147,7 @@ public class BSActorAvatarMove : BSActor
143 m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty; 147 m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty;
144 148
145 m_walkingUpStairs = 0; 149 m_walkingUpStairs = 0;
146 m_waitingForLowVelocityForStationary = false; 150 m_waitingForLowVelocityForStationary = 0;
147 } 151 }
148 } 152 }
149 153
@@ -194,15 +198,17 @@ public class BSActorAvatarMove : BSActor
194 // if colliding with something stationary and we're not doing volume detect . 198 // if colliding with something stationary and we're not doing volume detect .
195 if (!m_controllingPrim.ColliderIsMoving && !m_controllingPrim.ColliderIsVolumeDetect) 199 if (!m_controllingPrim.ColliderIsMoving && !m_controllingPrim.ColliderIsVolumeDetect)
196 { 200 {
197 if (m_waitingForLowVelocityForStationary) 201 if (m_waitingForLowVelocityForStationary-- <= 0)
198 { 202 {
199 // if waiting for velocity to drop and it has finally dropped, we can be stationary 203 // if waiting for velocity to drop and it has finally dropped, we can be stationary
204 // m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,waitingForLowVelocity {1}",
205 // m_controllingPrim.LocalID, m_waitingForLowVelocityForStationary);
200 if (m_controllingPrim.RawVelocity.LengthSquared() < BSParam.AvatarStopZeroThresholdSquared) 206 if (m_controllingPrim.RawVelocity.LengthSquared() < BSParam.AvatarStopZeroThresholdSquared)
201 { 207 {
202 m_waitingForLowVelocityForStationary = false; 208 m_waitingForLowVelocityForStationary = 0;
203 } 209 }
204 } 210 }
205 if (!m_waitingForLowVelocityForStationary) 211 if (m_waitingForLowVelocityForStationary <= 0)
206 { 212 {
207 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID); 213 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID);
208 m_controllingPrim.IsStationary = true; 214 m_controllingPrim.IsStationary = true;
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
index 2ca7dbc..f971e59 100644..100755
--- a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
@@ -701,7 +701,7 @@ public sealed class BSCharacter : BSPhysObject
701 } 701 }
702 if (m_moveActor != null) 702 if (m_moveActor != null)
703 { 703 {
704 m_moveActor.SuppressStationayCheckUntilLowVelocity(); 704 m_moveActor.SuppressStationayCheckUntilLowVelocity(BSParam.AvatarAddForceFrames);
705 } 705 }
706 }); 706 });
707 } 707 }
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs b/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs
index 495f752..d80b050 100755
--- a/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs
@@ -149,6 +149,7 @@ public static class BSParam
149 public static float AvatarHeightHighFudge { get; private set; } 149 public static float AvatarHeightHighFudge { get; private set; }
150 public static float AvatarFlyingGroundMargin { get; private set; } 150 public static float AvatarFlyingGroundMargin { get; private set; }
151 public static float AvatarFlyingGroundUpForce { get; private set; } 151 public static float AvatarFlyingGroundUpForce { get; private set; }
152 public static int AvatarAddForceFrames { get; private set; }
152 public static float AvatarTerminalVelocity { get; private set; } 153 public static float AvatarTerminalVelocity { get; private set; }
153 public static float AvatarContactProcessingThreshold { get; private set; } 154 public static float AvatarContactProcessingThreshold { get; private set; }
154 public static float AvatarAddForcePushFactor { get; private set; } 155 public static float AvatarAddForcePushFactor { get; private set; }
@@ -634,6 +635,8 @@ public static class BSParam
634 5f ), 635 5f ),
635 new ParameterDefn<float>("AvatarFlyingGroundUpForce", "Upward force applied to the avatar to keep it at flying ground margin", 636 new ParameterDefn<float>("AvatarFlyingGroundUpForce", "Upward force applied to the avatar to keep it at flying ground margin",
636 2.0f ), 637 2.0f ),
638 new ParameterDefn<int>("AvatarAddForceFrames", "Frames to allow AddForce to apply before checking for stationary",
639 10 ),
637 new ParameterDefn<float>("AvatarTerminalVelocity", "Terminal Velocity of falling avatar", 640 new ParameterDefn<float>("AvatarTerminalVelocity", "Terminal Velocity of falling avatar",
638 -54.0f ), 641 -54.0f ),
639 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", 642 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions",