don't freeze with a sitted avatar in a border without other sim. Still messy :(
parent
f6f0d884bd
commit
3bffdddc9d
|
@ -537,8 +537,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return;
|
||||
}
|
||||
}
|
||||
else if (RootPart.PhysActor != null)
|
||||
{
|
||||
RootPart.PhysActor.CrossingFailure();
|
||||
}
|
||||
|
||||
val = AbsolutePosition;
|
||||
Vector3 oldp = AbsolutePosition;
|
||||
val.X = Util.Clamp<float>(oldp.X, 0.5f, (float)Constants.RegionSize - 0.5f);
|
||||
val.Y = Util.Clamp<float>(oldp.Y, 0.5f, (float)Constants.RegionSize - 0.5f);
|
||||
val.Z = Util.Clamp<float>(oldp.Z, 0.5f, 4096.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3125,7 +3125,7 @@ Console.WriteLine("ODEPrim JointCreateFixed !!!");
|
|||
d.BodySetPosition(Body, _position.X, _position.Y, _position.Z);
|
||||
d.BodySetLinearVel(Body, 0, 0, 0);
|
||||
|
||||
if (Interlocked.Exchange(ref m_crossingfailures, 0) == 0)
|
||||
if (Interlocked.Exchange(ref m_crossingfailures, m_crossingfailures) == 0)
|
||||
{ // tell base code only once
|
||||
Interlocked.Increment(ref m_crossingfailures);
|
||||
base.RequestPhysicsterseUpdate();
|
||||
|
@ -3133,7 +3133,7 @@ Console.WriteLine("ODEPrim JointCreateFixed !!!");
|
|||
return;
|
||||
}
|
||||
|
||||
if (Interlocked.Exchange(ref m_crossingfailures, 0) > 1)
|
||||
if (Interlocked.Exchange(ref m_crossingfailures, 0) != 0)
|
||||
{
|
||||
// main simulator had a crossing failure
|
||||
// park it inside region
|
||||
|
|
Loading…
Reference in New Issue