improved avatar logic -- walk up low steps now, sorta

afrisby
dan miller 2007-11-17 23:28:44 +00:00
parent 7c18c69668
commit 8c5add18a2
1 changed files with 21 additions and 5 deletions

View File

@ -150,6 +150,16 @@ namespace OpenSim.Region.Physics.POSPlugin
return true;
}
private bool check_all_prims(POSCharacter c)
{
foreach (POSPrim p in _prims)
{
if (check_collision(c, p))
return true;
}
return false;
}
public override void Simulate(float timeStep)
{
foreach (POSCharacter character in _characters)
@ -181,22 +191,28 @@ namespace OpenSim.Region.Physics.POSPlugin
/// Completely Bogus Collision Detection!!!
/// better known as the CBCD algorithm
foreach (POSPrim p in _prims)
if (check_all_prims(character))
{
if (check_collision(character, p))
character.Position.Z = oldposZ; // first try Z axis
if (check_all_prims(character))
{
character.Position.Z = oldposZ; // first try Z axis
if (check_collision(character, p))
character.Position.Z = oldposZ + 0.4f; // try harder
if (check_all_prims(character))
{
character.Position.X = oldposX;
character.Position.Y = oldposY;
character.Position.Z = oldposZ;
}
else
{
character._target_velocity.Z = 0;
}
}
}
else
{
character._target_velocity.Z = 0;
}
}
if (character.Position.Y < 0)
{