Mantis #7861. llEdgeOfWorld not working. Two reasons: (1) edge was being filled but not used; (2) region size was being ignored when computing the neighbors' coordinates.

Not sure if this is the intended semantics of this function, but it made sense in my varregion test with neighbors all around except in the South.
LSLKeyTest
Diva Canto 2016-06-12 14:48:30 -07:00
parent d0c65d15dc
commit c2e63e807e
1 changed files with 5 additions and 5 deletions

View File

@ -6409,7 +6409,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else
{
// Y is the only valid direction
edge.y = dir.y / Math.Abs(dir.y);
edge.y = dir.y / Math.Abs(dir.y) * (World.RegionInfo.RegionSizeY / Constants.RegionSize);
}
}
else
@ -6431,20 +6431,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (edge.y > World.RegionInfo.RegionSizeY || edge.y < 0)
{
// Y goes out of bounds first
edge.y = dir.y / Math.Abs(dir.y);
edge.y = dir.y / Math.Abs(dir.y) * (World.RegionInfo.RegionSizeY / Constants.RegionSize);
}
else
{
// X goes out of bounds first or its a corner exit
edge.y = 0;
edge.x = dir.x / Math.Abs(dir.x);
edge.x = dir.x / Math.Abs(dir.x) * (World.RegionInfo.RegionSizeY / Constants.RegionSize);
}
}
List<GridRegion> neighbors = World.GridService.GetNeighbours(World.RegionInfo.ScopeID, World.RegionInfo.RegionID);
uint neighborX = World.RegionInfo.RegionLocX + (uint)dir.x;
uint neighborY = World.RegionInfo.RegionLocY + (uint)dir.y;
uint neighborX = World.RegionInfo.RegionLocX + (uint)edge.x;
uint neighborY = World.RegionInfo.RegionLocY + (uint)edge.y;
foreach (GridRegion sri in neighbors)
{