aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs45
1 files changed, 44 insertions, 1 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 4cf7645..8af236e 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -727,6 +727,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
727 IClientIPEndpoint ipepClient; 727 IClientIPEndpoint ipepClient;
728 if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY)) 728 if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
729 { 729 {
730 m_log.DebugFormat(
731 "[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for incoming agent {3} from {4}",
732 finalDestination.RegionName, newRegionX, newRegionY, sp.Name, Scene.Name);
733
730 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent..."); 734 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
731 #region IP Translation for NAT 735 #region IP Translation for NAT
732 // Uses ipepClient above 736 // Uses ipepClient above
@@ -1001,7 +1005,46 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1001 1005
1002 protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY) 1006 protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY)
1003 { 1007 {
1004 return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY); 1008 Border[] northBorders = Scene.NorthBorders.ToArray();
1009 Border[] southBorders = Scene.SouthBorders.ToArray();
1010 Border[] eastBorders = Scene.EastBorders.ToArray();
1011 Border[] westBorders = Scene.WestBorders.ToArray();
1012
1013 // Leaving this as a "megaregions" computation vs "non-megaregions" computation; it isn't
1014 // clear what should be done with a "far view" given that megaregions already extended the
1015 // view to include everything in the megaregion
1016 if (northBorders.Length > 1 || southBorders.Length > 1 || eastBorders.Length > 1 || westBorders.Length > 1)
1017 {
1018 Vector2 extent = Vector2.Zero;
1019 for (int i = 0; i < eastBorders.Length; i++)
1020 {
1021 extent.X = (eastBorders[i].BorderLine.Z > extent.X) ? eastBorders[i].BorderLine.Z : extent.X;
1022 }
1023 for (int i = 0; i < northBorders.Length; i++)
1024 {
1025 extent.Y = (northBorders[i].BorderLine.Z > extent.Y) ? northBorders[i].BorderLine.Z : extent.Y;
1026 }
1027
1028 // Loss of fraction on purpose
1029 extent.X = ((int)extent.X / (int)Constants.RegionSize) + 1;
1030 extent.Y = ((int)extent.Y / (int)Constants.RegionSize) + 1;
1031
1032 uint startX = oldRegionX - 1;
1033 uint startY = oldRegionY - 1;
1034
1035 uint endX = oldRegionX + (uint)extent.X;
1036 uint endY = oldRegionY + (uint)extent.Y;
1037
1038 m_log.DebugFormat(
1039 "[ENTITY TRANSFER MODULE]: Megaregion view of {0} is from {1},{2} to {3},{4} with new agent check for {5},{6}",
1040 Scene.Name, startX, startY, endX, endY, newRegionX, newRegionY);
1041
1042 return !(newRegionX >= startX && newRegionX <= endX && newRegionY >= startY && newRegionY <= endY);
1043 }
1044 else
1045 {
1046 return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY);
1047 }
1005 } 1048 }
1006 1049
1007 protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg) 1050 protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)