aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs48
1 files changed, 12 insertions, 36 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 2334e0b..e1145a1 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1479,9 +1479,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1479 1479
1480 1480
1481 // Given a position relative to the current region and outside of it 1481 // Given a position relative to the current region and outside of it
1482 // find the new region that the point is actually in. 1482 // find the new region that the point is actually in
1483 // returns 'null' if new region not found or if information 1483 // returns 'null' if new region not found or if agent as no access
1484 // and new position relative to it 1484 // else also returns new target position in the new region local coords
1485 // now only works for crossings 1485 // now only works for crossings
1486 1486
1487 public GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, 1487 public GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos,
@@ -1500,8 +1500,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1500 // Call the grid service to lookup the region containing the new position. 1500 // Call the grid service to lookup the region containing the new position.
1501 GridRegion neighbourRegion = GetRegionContainingWorldLocation( 1501 GridRegion neighbourRegion = GetRegionContainingWorldLocation(
1502 scene.GridService, scene.RegionInfo.ScopeID, 1502 scene.GridService, scene.RegionInfo.ScopeID,
1503 presenceWorldX, presenceWorldY, 1503 presenceWorldX, presenceWorldY);
1504 Math.Max(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY));
1505 1504
1506 if (neighbourRegion == null) 1505 if (neighbourRegion == null)
1507 return null; 1506 return null;
@@ -2277,68 +2276,46 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2277 2276
2278 protected GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py) 2277 protected GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
2279 { 2278 {
2280 // Since we don't know how big the regions could be, we have to search a very large area 2279 // Given a world position, get the GridRegion info for
2281 // to find possible regions. 2280 // the region containing that point.
2282 return GetRegionContainingWorldLocation(pGridService, pScopeID, px, py, Constants.MaximumRegionSize); 2281 // for compatibility with old grids it does a scan to find large regions
2283 } 2282 // 0.9 grids to that
2284
2285 // Given a world position, get the GridRegion info for
2286 // the region containing that point.
2287 // for compatibility with old grids it does a scan to find large regions
2288 // 0.9 grids to that
2289
2290 protected GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID,
2291 double px, double py, uint pSizeHint)
2292 {
2293// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py); 2283// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py);
2294 GridRegion ret = null; 2284 GridRegion ret = null;
2295 2285
2286 // check if we already found it does not exist
2296 if (m_notFoundLocationCache.Contains(px, py)) 2287 if (m_notFoundLocationCache.Contains(px, py))
2297 {
2298// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: Not found via cache. loc=<{1},{2}>", LogHeader, px, py);
2299 return null; 2288 return null;
2300 }
2301 2289
2302 // As an optimization, since most regions will be legacy sized regions (256x256), first try to get 2290 // reduce to next grid corner
2303 // the region at the appropriate legacy region location.
2304 // this is all that is needed on 0.9 grids 2291 // this is all that is needed on 0.9 grids
2305 uint possibleX = (uint)px & 0xffffff00u; 2292 uint possibleX = (uint)px & 0xffffff00u;
2306 uint possibleY = (uint)py & 0xffffff00u; 2293 uint possibleY = (uint)py & 0xffffff00u;
2307 ret = pGridService.GetRegionByPosition(pScopeID, (int)possibleX, (int)possibleY); 2294 ret = pGridService.GetRegionByPosition(pScopeID, (int)possibleX, (int)possibleY);
2308 if (ret != null) 2295 if (ret != null)
2309 {
2310// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: Found region using legacy size. rloc=<{1},{2}>. Rname={3}",
2311// LogHeader, possibleX, possibleY, ret.RegionName);
2312 return ret; 2296 return ret;
2313 } 2297
2314
2315 // for 0.8 regions just make a BIG area request. old code whould do it plus 4 more smaller on region open edges 2298 // for 0.8 regions just make a BIG area request. old code whould do it plus 4 more smaller on region open edges
2316 // this is what 0.9 grids now do internally 2299 // this is what 0.9 grids now do internally
2317 List<GridRegion> possibleRegions = pGridService.GetRegionRange(pScopeID, 2300 List<GridRegion> possibleRegions = pGridService.GetRegionRange(pScopeID,
2318 (int)(px - Constants.MaximumRegionSize), (int)(px + 1), // +1 bc left mb not part of range 2301 (int)(px - Constants.MaximumRegionSize), (int)(px + 1), // +1 bc left mb not part of range
2319 (int)(py - Constants.MaximumRegionSize), (int)(py + 1)); 2302 (int)(py - Constants.MaximumRegionSize), (int)(py + 1));
2320// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: possibleRegions cnt={1}, range={2}",
2321// LogHeader, possibleRegions.Count, range);
2322 if (possibleRegions != null && possibleRegions.Count > 0) 2303 if (possibleRegions != null && possibleRegions.Count > 0)
2323 { 2304 {
2324 // If we found some regions, check to see if the point is within 2305 // If we found some regions, check to see if the point is within
2325 foreach (GridRegion gr in possibleRegions) 2306 foreach (GridRegion gr in possibleRegions)
2326 { 2307 {
2327// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: possibleRegion nm={1}, regionLoc=<{2},{3}>, regionSize=<{4},{5}>",
2328// LogHeader, gr.RegionName, gr.RegionLocX, gr.RegionLocY, gr.RegionSizeX, gr.RegionSizeY);
2329 if (px >= (double)gr.RegionLocX && px < (double)(gr.RegionLocX + gr.RegionSizeX) 2308 if (px >= (double)gr.RegionLocX && px < (double)(gr.RegionLocX + gr.RegionSizeX)
2330 && py >= (double)gr.RegionLocY && py < (double)(gr.RegionLocY + gr.RegionSizeY)) 2309 && py >= (double)gr.RegionLocY && py < (double)(gr.RegionLocY + gr.RegionSizeY))
2331 { 2310 {
2332 // Found a region that contains the point 2311 // Found a region that contains the point
2333 return gr; 2312 return gr;
2334// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: found. RegionName={1}", LogHeader, ret.RegionName);
2335 } 2313 }
2336 } 2314 }
2337 } 2315 }
2338 2316
2339 // remember this location was not found so we can quickly not find it next time 2317 // remember this location was not found so we can quickly not find it next time
2340 m_notFoundLocationCache.Add(px, py); 2318 m_notFoundLocationCache.Add(px, py);
2341// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: Not found. Remembering loc=<{1},{2}>", LogHeader, px, py);
2342 return null; 2319 return null;
2343 } 2320 }
2344 2321
@@ -2362,7 +2339,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2362 private void InformClientOfNeighbourAsync(ScenePresence sp, AgentCircuitData agentCircData, GridRegion reg, 2339 private void InformClientOfNeighbourAsync(ScenePresence sp, AgentCircuitData agentCircData, GridRegion reg,
2363 IPEndPoint endPoint, bool newAgent) 2340 IPEndPoint endPoint, bool newAgent)
2364 { 2341 {
2365
2366 if (newAgent) 2342 if (newAgent)
2367 { 2343 {
2368 // we may already had lost this sp 2344 // we may already had lost this sp
@@ -2435,7 +2411,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2435 2411
2436 uint dd = (uint)avatar.RegionViewDistance; 2412 uint dd = (uint)avatar.RegionViewDistance;
2437 2413
2438 // until avatar movement updates client connections, we need to seend at least this current region imediate neighbors 2414 // until avatar movement updates client connections, we need to send at least this current region immediate neighbors
2439 uint ddX = Math.Max(dd, Constants.RegionSize); 2415 uint ddX = Math.Max(dd, Constants.RegionSize);
2440 uint ddY = Math.Max(dd, Constants.RegionSize); 2416 uint ddY = Math.Max(dd, Constants.RegionSize);
2441 2417