aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs33
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs1
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs1
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs4
4 files changed, 26 insertions, 13 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
index 0f11c4a..5f232a4 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
@@ -311,21 +311,28 @@ public class BSActorAvatarMove : BSActor
311 // Don't care about collisions with the terrain 311 // Don't care about collisions with the terrain
312 if (kvp.Key > m_physicsScene.TerrainManager.HighestTerrainID) 312 if (kvp.Key > m_physicsScene.TerrainManager.HighestTerrainID)
313 { 313 {
314 OMV.Vector3 touchPosition = kvp.Value.Position; 314 BSPhysObject collisionObject;
315 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}", 315 if (m_physicsScene.PhysObjects.TryGetValue(kvp.Key, out collisionObject))
316 m_controllingPrim.LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
317 if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
318 { 316 {
319 // This contact is within the 'near the feet' range. 317 if (!collisionObject.IsVolumeDetect)
320 // The normal should be our contact point to the object so it is pointing away
321 // thus the difference between our facing orientation and the normal should be small.
322 OMV.Vector3 directionFacing = OMV.Vector3.UnitX * m_controllingPrim.RawOrientation;
323 OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
324 float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
325 if (diff < BSParam.AvatarStepApproachFactor)
326 { 318 {
327 if (highestTouchPosition.Z < touchPosition.Z) 319 OMV.Vector3 touchPosition = kvp.Value.Position;
328 highestTouchPosition = touchPosition; 320 m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}",
321 m_controllingPrim.LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
322 if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
323 {
324 // This contact is within the 'near the feet' range.
325 // The normal should be our contact point to the object so it is pointing away
326 // thus the difference between our facing orientation and the normal should be small.
327 OMV.Vector3 directionFacing = OMV.Vector3.UnitX * m_controllingPrim.RawOrientation;
328 OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
329 float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
330 if (diff < BSParam.AvatarStepApproachFactor)
331 {
332 if (highestTouchPosition.Z < touchPosition.Z)
333 highestTouchPosition = touchPosition;
334 }
335 }
329 } 336 }
330 } 337 }
331 } 338 }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 9af3dce..d584782 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -404,6 +404,7 @@ public sealed class BSCharacter : BSPhysObject
404 404
405 // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more 405 // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
406 public override void SetVolumeDetect(int param) { return; } 406 public override void SetVolumeDetect(int param) { return; }
407 public override bool IsVolumeDetect { get { return false; } }
407 408
408 public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } } 409 public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } }
409 public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } } 410 public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 0704591..27caf62 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -175,6 +175,7 @@ public abstract class BSPhysObject : PhysicsActor
175 public abstract bool IsSolid { get; } 175 public abstract bool IsSolid { get; }
176 public abstract bool IsStatic { get; } 176 public abstract bool IsStatic { get; }
177 public abstract bool IsSelected { get; } 177 public abstract bool IsSelected { get; }
178 public abstract bool IsVolumeDetect { get; }
178 179
179 // Materialness 180 // Materialness
180 public MaterialAttributes.Material Material { get; private set; } 181 public MaterialAttributes.Material Material { get; private set; }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index a0b6abc..6b5dea3 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -617,6 +617,10 @@ public class BSPrim : BSPhysObject
617 } 617 }
618 return; 618 return;
619 } 619 }
620 public override bool IsVolumeDetect
621 {
622 get { return _isVolumeDetect; }
623 }
620 public override void SetMaterial(int material) 624 public override void SetMaterial(int material)
621 { 625 {
622 base.SetMaterial(material); 626 base.SetMaterial(material);