aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorTeravus Ovares (Dan Olivares)2009-08-28 14:45:17 -0400
committerTeravus Ovares (Dan Olivares)2009-08-28 14:45:17 -0400
commitac718843d92df3b512c4b9194bc05940ab064faf (patch)
treee594a16d6a0e8006d353a50d4910f81a628928b3 /OpenSim/Region/Framework
parentMerge branch 'master' of ssh://MyConnection/var/git/opensim (diff)
downloadopensim-SC-ac718843d92df3b512c4b9194bc05940ab064faf.zip
opensim-SC-ac718843d92df3b512c4b9194bc05940ab064faf.tar.gz
opensim-SC-ac718843d92df3b512c4b9194bc05940ab064faf.tar.bz2
opensim-SC-ac718843d92df3b512c4b9194bc05940ab064faf.tar.xz
* Allow corner prim crossings. Previously this was only on a single cardinal direction
* Some leg work in getting avatar teleports into 'virtual regions' moved to the proper region.
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/Border.cs21
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs145
2 files changed, 145 insertions, 21 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Border.cs b/OpenSim/Region/Framework/Scenes/Border.cs
index 19ecb4f..9a08afe 100644
--- a/OpenSim/Region/Framework/Scenes/Border.cs
+++ b/OpenSim/Region/Framework/Scenes/Border.cs
@@ -34,7 +34,7 @@ namespace OpenSim.Region.Framework.Scenes
34{ 34{
35 public class Border 35 public class Border
36 { 36 {
37 37
38 /// <summary> 38 /// <summary>
39 /// Line perpendicular to the Direction Cardinal. Z value is the 39 /// Line perpendicular to the Direction Cardinal. Z value is the
40 /// </summary> 40 /// </summary>
@@ -125,6 +125,25 @@ namespace OpenSim.Region.Framework.Scenes
125 return result; 125 return result;
126 } 126 }
127 127
128 public float Extent
129 {
130 get
131 {
132 switch (CrossDirection)
133 {
134 case Cardinals.N:
135 break;
136 case Cardinals.S:
137 break;
138 case Cardinals.W:
139 break;
140 case Cardinals.E:
141 break;
142 }
143 return 0;
144 }
145 }
146
128 } 147 }
129 148
130 149
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index acf0375..dfd06bb 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1706,37 +1706,86 @@ namespace OpenSim.Region.Framework.Scenes
1706 ulong newRegionHandle = 0; 1706 ulong newRegionHandle = 0;
1707 Vector3 pos = attemptedPosition; 1707 Vector3 pos = attemptedPosition;
1708 1708
1709 1709 if (TestBorderCross(attemptedPosition, Cardinals.W))
1710
1711 if (TestBorderCross(attemptedPosition, Cardinals.E))
1712 { 1710 {
1713 pos.X = ((pos.X - Constants.RegionSize)); 1711 if (TestBorderCross(attemptedPosition, Cardinals.S))
1714 newRegionHandle 1712 {
1715 = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize)); 1713 //Border crossedBorderx = GetCrossedBorder(attemptedPosition,Cardinals.W);
1716 // x + 1 1714 //Border crossedBordery = GetCrossedBorder(attemptedPosition, Cardinals.S);
1715 //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
1716 pos.X = ((pos.X + Constants.RegionSize));
1717 pos.Y = ((pos.Y + Constants.RegionSize));
1718 newRegionHandle
1719 = Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize),
1720 (uint)((thisy - 1) * Constants.RegionSize));
1721 // x - 1
1722 // y - 1
1723 }
1724 else if (TestBorderCross(attemptedPosition, Cardinals.N))
1725 {
1726 pos.X = ((pos.X + Constants.RegionSize));
1727 pos.Y = ((pos.Y - Constants.RegionSize));
1728 newRegionHandle
1729 = Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize),
1730 (uint)((thisy + 1) * Constants.RegionSize));
1731 // x - 1
1732 // y + 1
1733 }
1734 else
1735 {
1736 pos.X = ((pos.X + Constants.RegionSize));
1737 newRegionHandle
1738 = Util.UIntsToLong((uint) ((thisx - 1)*Constants.RegionSize),
1739 (uint) (thisy*Constants.RegionSize));
1740 // x - 1
1741 }
1717 } 1742 }
1718 else if (TestBorderCross(attemptedPosition, Cardinals.W)) 1743 else if (TestBorderCross(attemptedPosition, Cardinals.E))
1719 { 1744 {
1720 pos.X = ((pos.X + Constants.RegionSize)); 1745 if (TestBorderCross(attemptedPosition, Cardinals.S))
1746 {
1747 pos.X = ((pos.X - Constants.RegionSize));
1748 pos.Y = ((pos.Y + Constants.RegionSize));
1749 newRegionHandle
1750 = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize),
1751 (uint)((thisy - 1) * Constants.RegionSize));
1752 // x + 1
1753 // y - 1
1754 }
1755 else if (TestBorderCross(attemptedPosition, Cardinals.N))
1756 {
1757 pos.X = ((pos.X - Constants.RegionSize));
1758 pos.Y = ((pos.Y - Constants.RegionSize));
1759 newRegionHandle
1760 = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize),
1761 (uint)((thisy + 1) * Constants.RegionSize));
1762 // x + 1
1763 // y + 1
1764 }
1765 else
1766 {
1767 pos.X = ((pos.X - Constants.RegionSize));
1768 newRegionHandle
1769 = Util.UIntsToLong((uint) ((thisx + 1)*Constants.RegionSize),
1770 (uint) (thisy*Constants.RegionSize));
1771 // x + 1
1772 }
1773 }
1774 else if (TestBorderCross(attemptedPosition, Cardinals.S))
1775 {
1776 pos.Y = ((pos.Y + Constants.RegionSize));
1721 newRegionHandle 1777 newRegionHandle
1722 = Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize)); 1778 = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize));
1723 // x - 1 1779 // y - 1
1724 } 1780 }
1725 1781 else if (TestBorderCross(attemptedPosition, Cardinals.N))
1726 if (TestBorderCross(attemptedPosition, Cardinals.N))
1727 { 1782 {
1783
1728 pos.Y = ((pos.Y - Constants.RegionSize)); 1784 pos.Y = ((pos.Y - Constants.RegionSize));
1729 newRegionHandle 1785 newRegionHandle
1730 = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + 1) * Constants.RegionSize)); 1786 = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + 1) * Constants.RegionSize));
1731 // y + 1 1787 // y + 1
1732 } 1788 }
1733 else if (TestBorderCross(attemptedPosition, Cardinals.S))
1734 {
1735 pos.Y = ((pos.Y + Constants.RegionSize));
1736 newRegionHandle
1737 = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize));
1738 // y - 1
1739 }
1740 1789
1741 // Offset the positions for the new region across the border 1790 // Offset the positions for the new region across the border
1742 Vector3 oldGroupPosition = grp.RootPart.GroupPosition; 1791 Vector3 oldGroupPosition = grp.RootPart.GroupPosition;
@@ -1750,6 +1799,62 @@ namespace OpenSim.Region.Framework.Scenes
1750 } 1799 }
1751 } 1800 }
1752 1801
1802 public Border GetCrossedBorder(Vector3 position, Cardinals gridline)
1803 {
1804
1805 switch (gridline)
1806 {
1807 case Cardinals.N:
1808 lock (NorthBorders)
1809 {
1810 foreach (Border b in NorthBorders)
1811 {
1812 if (b.TestCross(position))
1813 return b;
1814 }
1815 }
1816 break;
1817 case Cardinals.S:
1818
1819
1820 lock (SouthBorders)
1821 {
1822 foreach (Border b in SouthBorders)
1823 {
1824 if (b.TestCross(position))
1825 return b;
1826 }
1827 }
1828
1829 break;
1830 case Cardinals.E:
1831 lock (EastBorders)
1832 {
1833 foreach (Border b in EastBorders)
1834 {
1835 if (b.TestCross(position))
1836 return b;
1837 }
1838 }
1839
1840 break;
1841 case Cardinals.W:
1842
1843 lock (WestBorders)
1844 {
1845 foreach (Border b in WestBorders)
1846 {
1847 if (b.TestCross(position))
1848 return b;
1849 }
1850 }
1851 break;
1852
1853 }
1854
1855 return null;
1856 }
1857
1753 public bool TestBorderCross(Vector3 position, Cardinals border) 1858 public bool TestBorderCross(Vector3 position, Cardinals border)
1754 { 1859 {
1755 switch (border) 1860 switch (border)