aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs37
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs4
2 files changed, 28 insertions, 13 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 98aa563..95c771e 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -318,7 +318,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
318 agentCircuit.Id0 = currentAgentCircuit.Id0; 318 agentCircuit.Id0 = currentAgentCircuit.Id0;
319 } 319 }
320 320
321 if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY)) 321 if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
322 { 322 {
323 // brand new agent, let's create a new caps seed 323 // brand new agent, let's create a new caps seed
324 agentCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath(); 324 agentCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath();
@@ -336,7 +336,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
336 // OK, it got this agent. Let's close some child agents 336 // OK, it got this agent. Let's close some child agents
337 sp.CloseChildAgents(newRegionX, newRegionY); 337 sp.CloseChildAgents(newRegionX, newRegionY);
338 IClientIPEndpoint ipepClient; 338 IClientIPEndpoint ipepClient;
339 if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY)) 339 if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
340 { 340 {
341 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent..."); 341 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
342 #region IP Translation for NAT 342 #region IP Translation for NAT
@@ -447,7 +447,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
447 447
448 // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone 448 // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
449 449
450 if (NeedsClosing(oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) 450 if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
451 { 451 {
452 Thread.Sleep(5000); 452 Thread.Sleep(5000);
453 sp.Close(); 453 sp.Close();
@@ -521,14 +521,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
521 return region; 521 return region;
522 } 522 }
523 523
524 protected virtual bool NeedsNewAgent(uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY) 524 protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY)
525 { 525 {
526 return Util.IsOutsideView(oldRegionX, newRegionX, oldRegionY, newRegionY); 526 return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY);
527 } 527 }
528 528
529 protected virtual bool NeedsClosing(uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg) 529 protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)
530 { 530 {
531 return Util.IsOutsideView(oldRegionX, newRegionX, oldRegionY, newRegionY); 531 return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY);
532 } 532 }
533 533
534 protected virtual bool IsOutsideRegion(Scene s, Vector3 pos) 534 protected virtual bool IsOutsideRegion(Scene s, Vector3 pos)
@@ -1045,7 +1045,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1045 1045
1046 if (m_regionInfo != null) 1046 if (m_regionInfo != null)
1047 { 1047 {
1048 neighbours = RequestNeighbours(sp.Scene, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); 1048 neighbours = RequestNeighbours(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
1049 } 1049 }
1050 else 1050 else
1051 { 1051 {
@@ -1272,8 +1272,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1272 /// <param name="pRegionLocX"></param> 1272 /// <param name="pRegionLocX"></param>
1273 /// <param name="pRegionLocY"></param> 1273 /// <param name="pRegionLocY"></param>
1274 /// <returns></returns> 1274 /// <returns></returns>
1275 protected List<GridRegion> RequestNeighbours(Scene pScene, uint pRegionLocX, uint pRegionLocY) 1275 protected List<GridRegion> RequestNeighbours(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
1276 { 1276 {
1277 Scene pScene = avatar.Scene;
1277 RegionInfo m_regionInfo = pScene.RegionInfo; 1278 RegionInfo m_regionInfo = pScene.RegionInfo;
1278 1279
1279 Border[] northBorders = pScene.NorthBorders.ToArray(); 1280 Border[] northBorders = pScene.NorthBorders.ToArray();
@@ -1281,10 +1282,24 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1281 Border[] eastBorders = pScene.EastBorders.ToArray(); 1282 Border[] eastBorders = pScene.EastBorders.ToArray();
1282 Border[] westBorders = pScene.WestBorders.ToArray(); 1283 Border[] westBorders = pScene.WestBorders.ToArray();
1283 1284
1284 // Legacy one region. Provided for simplicity while testing the all inclusive method in the else statement. 1285 // Leaving this as a "megaregions" computation vs "non-megaregions" computation; it isn't
1286 // clear what should be done with a "far view" given that megaregions already extended the
1287 // view to include everything in the megaregion
1285 if (northBorders.Length <= 1 && southBorders.Length <= 1 && eastBorders.Length <= 1 && westBorders.Length <= 1) 1288 if (northBorders.Length <= 1 && southBorders.Length <= 1 && eastBorders.Length <= 1 && westBorders.Length <= 1)
1286 { 1289 {
1287 return pScene.GridService.GetNeighbours(m_regionInfo.ScopeID, m_regionInfo.RegionID); 1290 int dd = avatar.DrawDistance < Constants.RegionSize ? (int)Constants.RegionSize : (int)avatar.DrawDistance;
1291
1292 int startX = (int)pRegionLocX * (int)Constants.RegionSize - dd + (int)(Constants.RegionSize/2);
1293 int startY = (int)pRegionLocY * (int)Constants.RegionSize - dd + (int)(Constants.RegionSize/2);
1294
1295 int endX = (int)pRegionLocX * (int)Constants.RegionSize + dd + (int)(Constants.RegionSize/2);
1296 int endY = (int)pRegionLocY * (int)Constants.RegionSize + dd + (int)(Constants.RegionSize/2);
1297
1298 List<GridRegion> neighbours =
1299 avatar.Scene.GridService.GetRegionRange(m_regionInfo.ScopeID, startX, endX, startY, endY);
1300
1301 neighbours.RemoveAll(delegate(GridRegion r) { return r.RegionID == m_regionInfo.RegionID; });
1302 return neighbours;
1288 } 1303 }
1289 else 1304 else
1290 { 1305 {
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 35dcd95..79e76b4 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -130,9 +130,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
130 return region; 130 return region;
131 } 131 }
132 132
133 protected override bool NeedsClosing(uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg) 133 protected override bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)
134 { 134 {
135 if (base.NeedsClosing(oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) 135 if (base.NeedsClosing(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
136 return true; 136 return true;
137 137
138 int flags = m_aScene.GridService.GetRegionFlags(m_aScene.RegionInfo.ScopeID, reg.RegionID); 138 int flags = m_aScene.GridService.GetRegionFlags(m_aScene.RegionInfo.ScopeID, reg.RegionID);