diff options
author | Robert Adams | 2012-11-20 08:34:18 -0800 |
---|---|---|
committer | Robert Adams | 2012-11-21 16:42:34 -0800 |
commit | 2f5fe4b88e8eb0388cc2138c48a941b1317ed560 (patch) | |
tree | 47040fe6c84d9584306c7807a8a98217acfb9045 | |
parent | If GetAgents() is called with an empty userIDs array then don't bother with a... (diff) | |
download | opensim-SC_OLD-2f5fe4b88e8eb0388cc2138c48a941b1317ed560.zip opensim-SC_OLD-2f5fe4b88e8eb0388cc2138c48a941b1317ed560.tar.gz opensim-SC_OLD-2f5fe4b88e8eb0388cc2138c48a941b1317ed560.tar.bz2 opensim-SC_OLD-2f5fe4b88e8eb0388cc2138c48a941b1317ed560.tar.xz |
BulletSim: tweek avatar capsule parameters so avatar feet don't go below ground. This solves the bouncing, short avatar problem (Mantis 6403).
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 11 |
2 files changed, 10 insertions, 8 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index 3c48dcc..fa1a23f 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | |||
@@ -184,8 +184,8 @@ public sealed class BSCharacter : BSPhysObject | |||
184 | _size = value; | 184 | _size = value; |
185 | ComputeAvatarScale(_size); | 185 | ComputeAvatarScale(_size); |
186 | ComputeAvatarVolumeAndMass(); | 186 | ComputeAvatarVolumeAndMass(); |
187 | DetailLog("{0},BSCharacter.setSize,call,scale={1},density={2},volume={3},mass={4}", | 187 | DetailLog("{0},BSCharacter.setSize,call,size={1},scale={2},density={3},volume={4},mass={5}", |
188 | LocalID, Scale, _avatarDensity, _avatarVolume, RawMass); | 188 | LocalID, _size, Scale, _avatarDensity, _avatarVolume, RawMass); |
189 | 189 | ||
190 | PhysicsScene.TaintedObject("BSCharacter.setSize", delegate() | 190 | PhysicsScene.TaintedObject("BSCharacter.setSize", delegate() |
191 | { | 191 | { |
@@ -619,7 +619,8 @@ public sealed class BSCharacter : BSPhysObject | |||
619 | newScale.Y = PhysicsScene.Params.avatarCapsuleRadius; | 619 | newScale.Y = PhysicsScene.Params.avatarCapsuleRadius; |
620 | 620 | ||
621 | // From the total height, remove the capsule half spheres that are at each end | 621 | // From the total height, remove the capsule half spheres that are at each end |
622 | newScale.Z = size.Z - (newScale.X + newScale.Y); | 622 | // The 1.15f came from ODE. Not sure what this factors in. |
623 | newScale.Z = (size.Z * 1.15f) - (newScale.X + newScale.Y); | ||
623 | Scale = newScale; | 624 | Scale = newScale; |
624 | } | 625 | } |
625 | 626 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 2fee95e..58dccea 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -712,7 +712,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
712 | // here just before the physics engine is called to step the simulation. | 712 | // here just before the physics engine is called to step the simulation. |
713 | public void ProcessTaints() | 713 | public void ProcessTaints() |
714 | { | 714 | { |
715 | InTaintTime = true; | 715 | InTaintTime = true; // Only used for debugging so locking is not necessary. |
716 | ProcessRegularTaints(); | 716 | ProcessRegularTaints(); |
717 | ProcessPostTaintTaints(); | 717 | ProcessPostTaintTaints(); |
718 | InTaintTime = false; | 718 | InTaintTime = false; |
@@ -758,6 +758,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
758 | DetailLog("{0},BSScene.ProcessTaints,leftTaintsOnList,numNotProcessed={1}", DetailLogZero, _taintOperations.Count); | 758 | DetailLog("{0},BSScene.ProcessTaints,leftTaintsOnList,numNotProcessed={1}", DetailLogZero, _taintOperations.Count); |
759 | } | 759 | } |
760 | */ | 760 | */ |
761 | |||
761 | // swizzle a new list into the list location so we can process what's there | 762 | // swizzle a new list into the list location so we can process what's there |
762 | List<TaintCallbackEntry> oldList; | 763 | List<TaintCallbackEntry> oldList; |
763 | lock (_taintLock) | 764 | lock (_taintLock) |
@@ -787,8 +788,6 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
787 | // will replace any previous operation by the same object. | 788 | // will replace any previous operation by the same object. |
788 | public void PostTaintObject(String ident, uint ID, TaintCallback callback) | 789 | public void PostTaintObject(String ident, uint ID, TaintCallback callback) |
789 | { | 790 | { |
790 | if (!m_initialized) return; | ||
791 | |||
792 | string uniqueIdent = ident + "-" + ID.ToString(); | 791 | string uniqueIdent = ident + "-" + ID.ToString(); |
793 | lock (_taintLock) | 792 | lock (_taintLock) |
794 | { | 793 | { |
@@ -864,13 +863,14 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
864 | } | 863 | } |
865 | } | 864 | } |
866 | 865 | ||
866 | // Only used for debugging. Does not change state of anything so locking is not necessary. | ||
867 | public bool AssertInTaintTime(string whereFrom) | 867 | public bool AssertInTaintTime(string whereFrom) |
868 | { | 868 | { |
869 | if (!InTaintTime) | 869 | if (!InTaintTime) |
870 | { | 870 | { |
871 | DetailLog("{0},BSScene.AssertInTaintTime,NOT IN TAINT TIME,Region={1},Where={2}", DetailLogZero, RegionName, whereFrom); | 871 | DetailLog("{0},BSScene.AssertInTaintTime,NOT IN TAINT TIME,Region={1},Where={2}", DetailLogZero, RegionName, whereFrom); |
872 | m_log.ErrorFormat("{0} NOT IN TAINT TIME!! Region={1}, Where={2}", LogHeader, RegionName, whereFrom); | 872 | m_log.ErrorFormat("{0} NOT IN TAINT TIME!! Region={1}, Where={2}", LogHeader, RegionName, whereFrom); |
873 | Util.PrintCallStack(); | 873 | Util.PrintCallStack(); // Prints the stack into the DEBUG log file. |
874 | } | 874 | } |
875 | return InTaintTime; | 875 | return InTaintTime; |
876 | } | 876 | } |
@@ -1186,7 +1186,8 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
1186 | (s) => { return s.m_params[0].avatarCapsuleRadius; }, | 1186 | (s) => { return s.m_params[0].avatarCapsuleRadius; }, |
1187 | (s,p,l,v) => { s.UpdateParameterObject(ref s.m_params[0].avatarCapsuleRadius, p, l, v); } ), | 1187 | (s,p,l,v) => { s.UpdateParameterObject(ref s.m_params[0].avatarCapsuleRadius, p, l, v); } ), |
1188 | new ParameterDefn("AvatarCapsuleHeight", "Default height of space around avatar", | 1188 | new ParameterDefn("AvatarCapsuleHeight", "Default height of space around avatar", |
1189 | 1.5f, | 1189 | // 1.5f, |
1190 | 2.140599f, | ||
1190 | (s,cf,p,v) => { s.m_params[0].avatarCapsuleHeight = cf.GetFloat(p, v); }, | 1191 | (s,cf,p,v) => { s.m_params[0].avatarCapsuleHeight = cf.GetFloat(p, v); }, |
1191 | (s) => { return s.m_params[0].avatarCapsuleHeight; }, | 1192 | (s) => { return s.m_params[0].avatarCapsuleHeight; }, |
1192 | (s,p,l,v) => { s.UpdateParameterObject(ref s.m_params[0].avatarCapsuleHeight, p, l, v); } ), | 1193 | (s,p,l,v) => { s.UpdateParameterObject(ref s.m_params[0].avatarCapsuleHeight, p, l, v); } ), |