change GetNewRezLocation physics ray results processing
parent
e110ca24cf
commit
2abe1ccc59
|
@ -2306,7 +2306,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
Vector3 direction = dir * (1 / dist);
|
Vector3 direction = dir * (1 / dist);
|
||||||
|
|
||||||
dist += 2.0f;
|
dist += 1.0f;
|
||||||
|
|
||||||
if (SupportsRayCastFiltered())
|
if (SupportsRayCastFiltered())
|
||||||
{
|
{
|
||||||
|
@ -2323,31 +2323,48 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
(List<ContactResult>)RayCastFiltered(RayStart, direction, dist, physcount, rayfilter);
|
(List<ContactResult>)RayCastFiltered(RayStart, direction, dist, physcount, rayfilter);
|
||||||
if (physresults != null && physresults.Count > 0)
|
if (physresults != null && physresults.Count > 0)
|
||||||
{
|
{
|
||||||
if (physresults[0].ConsumerID == 0 || RayTargetID == UUID.Zero)
|
// look for terrain ?
|
||||||
|
if(RayTargetID == UUID.Zero)
|
||||||
{
|
{
|
||||||
// found something
|
foreach (ContactResult r in physresults)
|
||||||
pos = physresults[0].Normal * scale;
|
|
||||||
pos *= 0.5f;
|
|
||||||
pos = physresults[0].Pos + pos;
|
|
||||||
|
|
||||||
if (wpos.Z > pos.Z) pos = wpos;
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
foreach (ContactResult r in physresults)
|
|
||||||
{
|
|
||||||
SceneObjectPart part = GetSceneObjectPart(r.ConsumerID);
|
|
||||||
if (part == null)
|
|
||||||
continue;
|
|
||||||
if (part.UUID == RayTargetID)
|
|
||||||
{
|
{
|
||||||
pos = physresults[0].Normal * scale;
|
if (r.ConsumerID == 0)
|
||||||
pos *= 0.5f;
|
{
|
||||||
pos = physresults[0].Pos + pos;
|
pos = r.Normal * scale;
|
||||||
|
pos *= 0.5f;
|
||||||
|
pos = r.Pos + pos;
|
||||||
|
|
||||||
if (wpos.Z > pos.Z) pos = wpos;
|
if (wpos.Z > pos.Z) pos = wpos;
|
||||||
return pos;
|
return pos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (ContactResult r in physresults)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = GetSceneObjectPart(r.ConsumerID);
|
||||||
|
if (part == null)
|
||||||
|
continue;
|
||||||
|
if (part.UUID == RayTargetID)
|
||||||
|
{
|
||||||
|
pos = r.Normal * scale;
|
||||||
|
pos *= 0.5f;
|
||||||
|
pos = r.Pos + pos;
|
||||||
|
|
||||||
|
if (wpos.Z > pos.Z) pos = wpos;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else the first we got
|
||||||
|
pos = physresults[0].Normal * scale;
|
||||||
|
pos *= 0.5f;
|
||||||
|
pos = physresults[0].Pos + pos;
|
||||||
|
|
||||||
|
if (wpos.Z > pos.Z)
|
||||||
|
pos = wpos;
|
||||||
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue