Merge branch 'master' of ssh://opensimulator.org/var/git/opensim

0.7.6-extended
Justin Clark-Casey (justincc) 2013-08-12 22:57:32 +01:00
commit 4f8c691f8c
4 changed files with 26 additions and 13 deletions

View File

@ -311,21 +311,28 @@ public class BSActorAvatarMove : BSActor
// Don't care about collisions with the terrain // Don't care about collisions with the terrain
if (kvp.Key > m_physicsScene.TerrainManager.HighestTerrainID) if (kvp.Key > m_physicsScene.TerrainManager.HighestTerrainID)
{ {
OMV.Vector3 touchPosition = kvp.Value.Position; BSPhysObject collisionObject;
m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}", if (m_physicsScene.PhysObjects.TryGetValue(kvp.Key, out collisionObject))
m_controllingPrim.LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
{ {
// This contact is within the 'near the feet' range. if (!collisionObject.IsVolumeDetect)
// The normal should be our contact point to the object so it is pointing away
// thus the difference between our facing orientation and the normal should be small.
OMV.Vector3 directionFacing = OMV.Vector3.UnitX * m_controllingPrim.RawOrientation;
OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
if (diff < BSParam.AvatarStepApproachFactor)
{ {
if (highestTouchPosition.Z < touchPosition.Z) OMV.Vector3 touchPosition = kvp.Value.Position;
highestTouchPosition = touchPosition; m_physicsScene.DetailLog("{0},BSCharacter.WalkUpStairs,min={1},max={2},touch={3}",
m_controllingPrim.LocalID, nearFeetHeightMin, nearFeetHeightMax, touchPosition);
if (touchPosition.Z >= nearFeetHeightMin && touchPosition.Z <= nearFeetHeightMax)
{
// This contact is within the 'near the feet' range.
// The normal should be our contact point to the object so it is pointing away
// thus the difference between our facing orientation and the normal should be small.
OMV.Vector3 directionFacing = OMV.Vector3.UnitX * m_controllingPrim.RawOrientation;
OMV.Vector3 touchNormal = OMV.Vector3.Normalize(kvp.Value.SurfaceNormal);
float diff = Math.Abs(OMV.Vector3.Distance(directionFacing, touchNormal));
if (diff < BSParam.AvatarStepApproachFactor)
{
if (highestTouchPosition.Z < touchPosition.Z)
highestTouchPosition = touchPosition;
}
}
} }
} }
} }

View File

@ -404,6 +404,7 @@ public sealed class BSCharacter : BSPhysObject
// Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
public override void SetVolumeDetect(int param) { return; } public override void SetVolumeDetect(int param) { return; }
public override bool IsVolumeDetect { get { return false; } }
public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } } public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } }
public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } } public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } }

View File

@ -175,6 +175,7 @@ public abstract class BSPhysObject : PhysicsActor
public abstract bool IsSolid { get; } public abstract bool IsSolid { get; }
public abstract bool IsStatic { get; } public abstract bool IsStatic { get; }
public abstract bool IsSelected { get; } public abstract bool IsSelected { get; }
public abstract bool IsVolumeDetect { get; }
// Materialness // Materialness
public MaterialAttributes.Material Material { get; private set; } public MaterialAttributes.Material Material { get; private set; }

View File

@ -617,6 +617,10 @@ public class BSPrim : BSPhysObject
} }
return; return;
} }
public override bool IsVolumeDetect
{
get { return _isVolumeDetect; }
}
public override void SetMaterial(int material) public override void SetMaterial(int material)
{ {
base.SetMaterial(material); base.SetMaterial(material);