diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs | 110 |
2 files changed, 69 insertions, 43 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index c917840..5c2e136 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -549,6 +549,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
549 | int x; | 549 | int x; |
550 | int y; | 550 | int y; |
551 | 551 | ||
552 | if (x_float > Constants.RegionSize || x_float <= 0 || y_float > Constants.RegionSize || y_float <= 0) | ||
553 | return null; | ||
552 | try | 554 | try |
553 | { | 555 | { |
554 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); | 556 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); |
diff --git a/OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs b/OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs index 450ec21..3a4a17b 100644 --- a/OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs +++ b/OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs | |||
@@ -23,6 +23,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
23 | public Type ReplacableInterface { get { return null; } } | 23 | public Type ReplacableInterface { get { return null; } } |
24 | 24 | ||
25 | private Dictionary<UUID, RegionConnections> m_regions = new Dictionary<UUID, RegionConnections>(); | 25 | private Dictionary<UUID, RegionConnections> m_regions = new Dictionary<UUID, RegionConnections>(); |
26 | private bool enabledYN = true; | ||
26 | public void Initialise(IConfigSource source) | 27 | public void Initialise(IConfigSource source) |
27 | { | 28 | { |
28 | 29 | ||
@@ -35,12 +36,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
35 | 36 | ||
36 | public void AddRegion(Scene scene) | 37 | public void AddRegion(Scene scene) |
37 | { | 38 | { |
38 | /* | 39 | if (!enabledYN) |
39 | RegionData regionData = new RegionData(); | 40 | return; |
40 | regionData.Offset = Vector3.Zero; | 41 | |
41 | regionData.RegionId = scene.RegionInfo.originRegionID; | ||
42 | regionData.RegionScene = scene; | ||
43 | */ | ||
44 | RegionConnections regionConnections = new RegionConnections(); | 42 | RegionConnections regionConnections = new RegionConnections(); |
45 | regionConnections.ConnectedRegions = new List<RegionData>(); | 43 | regionConnections.ConnectedRegions = new List<RegionData>(); |
46 | regionConnections.RegionScene = scene; | 44 | regionConnections.RegionScene = scene; |
@@ -55,12 +53,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
55 | 53 | ||
56 | foreach (RegionConnections conn in m_regions.Values) | 54 | foreach (RegionConnections conn in m_regions.Values) |
57 | { | 55 | { |
58 | 56 | #region commented | |
59 | /* | 57 | /* |
60 | // If we're one region over +x +y | 58 | // If we're one region over +x +y |
59 | //xxy | ||
61 | //xxx | 60 | //xxx |
62 | //xxx | 61 | //xxx |
63 | //xxy | ||
64 | if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd | 62 | if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd |
65 | == (regionConnections.X * (int)Constants.RegionSize)) | 63 | == (regionConnections.X * (int)Constants.RegionSize)) |
66 | && (((int)conn.Y * (int)Constants.RegionSize) - conn.YEnd | 64 | && (((int)conn.Y * (int)Constants.RegionSize) - conn.YEnd |
@@ -181,6 +179,38 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
181 | } | 179 | } |
182 | */ | 180 | */ |
183 | 181 | ||
182 | /* | ||
183 | // If we're one region over -x -y | ||
184 | //yxx | ||
185 | //xxx | ||
186 | //xxx | ||
187 | if ((((int)conn.X * (int)Constants.RegionSize) - conn.XEnd | ||
188 | == (regionConnections.X * (int)Constants.RegionSize)) | ||
189 | && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd | ||
190 | == (regionConnections.Y * (int)Constants.RegionSize))) | ||
191 | { | ||
192 | Vector3 offset = Vector3.Zero; | ||
193 | offset.X = (((regionConnections.X * (int)Constants.RegionSize)) - | ||
194 | ((conn.X * (int)Constants.RegionSize))); | ||
195 | offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) - | ||
196 | ((conn.Y * (int)Constants.RegionSize))); | ||
197 | |||
198 | Vector3 extents = Vector3.Zero; | ||
199 | extents.Y = regionConnections.YEnd + conn.YEnd; | ||
200 | extents.X = conn.XEnd + conn.XEnd; | ||
201 | |||
202 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", | ||
203 | conn.RegionScene.RegionInfo.RegionName, | ||
204 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | ||
205 | |||
206 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents); | ||
207 | |||
208 | connectedYN = true; | ||
209 | break; | ||
210 | } | ||
211 | */ | ||
212 | #endregion | ||
213 | |||
184 | // If we're one region over +x y | 214 | // If we're one region over +x y |
185 | //xxx | 215 | //xxx |
186 | //xxy | 216 | //xxy |
@@ -197,49 +227,37 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
197 | ((conn.Y * (int)Constants.RegionSize))); | 227 | ((conn.Y * (int)Constants.RegionSize))); |
198 | 228 | ||
199 | Vector3 extents = Vector3.Zero; | 229 | Vector3 extents = Vector3.Zero; |
200 | extents.Y = regionConnections.YEnd; | 230 | extents.Y = conn.YEnd; |
201 | extents.X = conn.XEnd + conn.XEnd; | 231 | extents.X = conn.XEnd + regionConnections.XEnd; |
232 | |||
233 | conn.UpdateExtents(extents); | ||
234 | |||
202 | 235 | ||
203 | m_log.DebugFormat("Scene: {0} to the west of Scene{1} Offset: {2}. Extents:{3}", | 236 | m_log.DebugFormat("Scene: {0} to the west of Scene{1} Offset: {2}. Extents:{3}", |
204 | conn.RegionScene.RegionInfo.RegionName, | 237 | conn.RegionScene.RegionInfo.RegionName, |
205 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | 238 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); |
206 | 239 | ||
207 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents); | 240 | conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); |
208 | 241 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); | |
209 | connectedYN = true; | ||
210 | break; | ||
211 | } | ||
212 | |||
213 | // If we're one region over -x -y | ||
214 | //yxx | ||
215 | //xxx | ||
216 | //xxx | ||
217 | if ((((int)conn.X * (int)Constants.RegionSize) - conn.XEnd | ||
218 | == (regionConnections.X * (int)Constants.RegionSize)) | ||
219 | && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd | ||
220 | == (regionConnections.Y * (int)Constants.RegionSize))) | ||
221 | { | ||
222 | Vector3 offset = Vector3.Zero; | ||
223 | offset.X = (((regionConnections.X * (int)Constants.RegionSize)) - | ||
224 | ((conn.X * (int)Constants.RegionSize))); | ||
225 | offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) - | ||
226 | ((conn.Y * (int)Constants.RegionSize))); | ||
227 | 242 | ||
228 | Vector3 extents = Vector3.Zero; | 243 | conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
229 | extents.Y = regionConnections.YEnd + conn.YEnd; | 244 | conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
230 | extents.X = conn.XEnd + conn.XEnd; | 245 | conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
231 | 246 | ||
232 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", | 247 | scene.WestBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport West |
233 | conn.RegionScene.RegionInfo.RegionName, | ||
234 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | ||
235 | 248 | ||
236 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents); | 249 | // Reset Terrain.. since terrain normally loads first. |
250 | // | ||
251 | scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); | ||
252 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); | ||
237 | 253 | ||
238 | connectedYN = true; | 254 | connectedYN = true; |
239 | break; | 255 | break; |
240 | } | 256 | } |
241 | 257 | ||
242 | // If we're one region over x -y | 258 | |
259 | |||
260 | // If we're one region over x +y | ||
243 | //xyx | 261 | //xyx |
244 | //xxx | 262 | //xxx |
245 | //xxx | 263 | //xxx |
@@ -257,12 +275,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
257 | Vector3 extents = Vector3.Zero; | 275 | Vector3 extents = Vector3.Zero; |
258 | extents.Y = regionConnections.YEnd + conn.YEnd; | 276 | extents.Y = regionConnections.YEnd + conn.YEnd; |
259 | extents.X = conn.XEnd; | 277 | extents.X = conn.XEnd; |
260 | 278 | conn.UpdateExtents(extents); | |
261 | 279 | ||
262 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", | 280 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", |
263 | conn.RegionScene.RegionInfo.RegionName, | 281 | conn.RegionScene.RegionInfo.RegionName, |
264 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | 282 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); |
265 | conn.RegionScene.PhysicsScene.Combine(scene.PhysicsScene,Vector3.Zero,extents); | 283 | conn.RegionScene.PhysicsScene.Combine(null,Vector3.Zero,extents); |
266 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); | 284 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); |
267 | 285 | ||
268 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; | 286 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
@@ -272,14 +290,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
272 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south | 290 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south |
273 | 291 | ||
274 | // Reset Terrain.. since terrain normally loads first. | 292 | // Reset Terrain.. since terrain normally loads first. |
275 | conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); | 293 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); |
276 | scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); | 294 | scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); |
295 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); | ||
277 | 296 | ||
278 | connectedYN = true; | 297 | connectedYN = true; |
279 | break; | 298 | break; |
280 | } | 299 | } |
281 | 300 | ||
282 | // If we're one region over +x -y | 301 | // If we're one region over +x +y |
283 | //xxy | 302 | //xxy |
284 | //xxx | 303 | //xxx |
285 | //xxx | 304 | //xxx |
@@ -334,7 +353,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
334 | } | 353 | } |
335 | } | 354 | } |
336 | 355 | ||
337 | public struct RegionConnections | 356 | public class RegionConnections |
338 | { | 357 | { |
339 | public UUID RegionId; | 358 | public UUID RegionId; |
340 | public Scene RegionScene; | 359 | public Scene RegionScene; |
@@ -343,6 +362,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
343 | public int XEnd; | 362 | public int XEnd; |
344 | public int YEnd; | 363 | public int YEnd; |
345 | public List<RegionData> ConnectedRegions; | 364 | public List<RegionData> ConnectedRegions; |
365 | public void UpdateExtents(Vector3 extents) | ||
366 | { | ||
367 | XEnd = (int)extents.X; | ||
368 | YEnd = (int)extents.Y; | ||
369 | } | ||
346 | 370 | ||
347 | } | 371 | } |
348 | 372 | ||