aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Land/PhysicsCombiner.cs110
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs49
3 files changed, 96 insertions, 65 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
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index de9b196..817cc22 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -227,7 +227,7 @@ namespace OpenSim.Region.Physics.OdePlugin
227 227
228 public int bodyFramesAutoDisable = 20; 228 public int bodyFramesAutoDisable = 20;
229 229
230 private float[] _heightmap; 230
231 231
232 private float[] _watermap; 232 private float[] _watermap;
233 private bool m_filterCollisions = true; 233 private bool m_filterCollisions = true;
@@ -351,11 +351,7 @@ namespace OpenSim.Region.Physics.OdePlugin
351 #endif 351 #endif
352 } 352 }
353 353
354 // zero out a heightmap array float array (single dimension [flattened])) 354
355 if ((int)Constants.RegionSize == 256)
356 _heightmap = new float[514*514];
357 else
358 _heightmap = new float[(((int)WorldExtents.Y + 2) * ((int)WorldExtents.X + 2))];
359 _watermap = new float[258 * 258]; 355 _watermap = new float[258 * 258];
360 356
361 // Zero out the prim spaces array (we split our space into smaller spaces so 357 // Zero out the prim spaces array (we split our space into smaller spaces so
@@ -3334,6 +3330,15 @@ namespace OpenSim.Region.Physics.OdePlugin
3334 // this._heightmap[i] = (double)heightMap[i]; 3330 // this._heightmap[i] = (double)heightMap[i];
3335 // dbm (danx0r) -- creating a buffer zone of one extra sample all around 3331 // dbm (danx0r) -- creating a buffer zone of one extra sample all around
3336 //_origheightmap = heightMap; 3332 //_origheightmap = heightMap;
3333
3334 float[] _heightmap;
3335
3336 // zero out a heightmap array float array (single dimension [flattened]))
3337 //if ((int)Constants.RegionSize == 256)
3338 // _heightmap = new float[514 * 514];
3339 //else
3340
3341 _heightmap = new float[(((int)Constants.RegionSize + 2) * ((int)Constants.RegionSize + 2))];
3337 3342
3338 uint heightmapWidth = Constants.RegionSize + 1; 3343 uint heightmapWidth = Constants.RegionSize + 1;
3339 uint heightmapHeight = Constants.RegionSize + 1; 3344 uint heightmapHeight = Constants.RegionSize + 1;
@@ -3342,19 +3347,19 @@ namespace OpenSim.Region.Physics.OdePlugin
3342 3347
3343 uint heightmapHeightSamples; 3348 uint heightmapHeightSamples;
3344 3349
3345 if (((int)Constants.RegionSize) == 256) 3350 //if (((int)Constants.RegionSize) == 256)
3346 { 3351 //{
3347 heightmapWidthSamples = 2 * (uint)Constants.RegionSize + 2; 3352 // heightmapWidthSamples = 2 * (uint)Constants.RegionSize + 2;
3348 heightmapHeightSamples = 2 * (uint)Constants.RegionSize + 2; 3353 // heightmapHeightSamples = 2 * (uint)Constants.RegionSize + 2;
3349 heightmapWidth++; 3354 // heightmapWidth++;
3350 heightmapHeight++; 3355 // heightmapHeight++;
3351 } 3356 //}
3352 else 3357 //else
3353 { 3358 //{
3354 3359
3355 heightmapWidthSamples = (uint)Constants.RegionSize + 1; 3360 heightmapWidthSamples = (uint)Constants.RegionSize + 1;
3356 heightmapHeightSamples = (uint)Constants.RegionSize + 1; 3361 heightmapHeightSamples = (uint)Constants.RegionSize + 1;
3357 } 3362 //}
3358 3363
3359 const float scale = 1.0f; 3364 const float scale = 1.0f;
3360 const float offset = 0.0f; 3365 const float offset = 0.0f;
@@ -3363,12 +3368,12 @@ namespace OpenSim.Region.Physics.OdePlugin
3363 3368
3364 int regionsize = (int) Constants.RegionSize; 3369 int regionsize = (int) Constants.RegionSize;
3365 //Double resolution 3370 //Double resolution
3366 if (((int)Constants.RegionSize) == 256) 3371 //if (((int)Constants.RegionSize) == 256)
3367 heightMap = ResizeTerrain512Interpolation(heightMap); 3372 // heightMap = ResizeTerrain512Interpolation(heightMap);
3368 3373
3369 3374
3370 if (((int)Constants.RegionSize) == 256 && (int)Constants.RegionSize == 256) 3375 // if (((int)Constants.RegionSize) == 256 && (int)Constants.RegionSize == 256)
3371 regionsize = 512; 3376 // regionsize = 512;
3372 3377
3373 float hfmin = 2000; 3378 float hfmin = 2000;
3374 float hfmax = -2000; 3379 float hfmax = -2000;
@@ -3431,14 +3436,14 @@ namespace OpenSim.Region.Physics.OdePlugin
3431 3436
3432 d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); 3437 d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle);
3433 d.GeomSetRotation(GroundGeom, ref R); 3438 d.GeomSetRotation(GroundGeom, ref R);
3434 d.GeomSetPosition(GroundGeom, pOffset.X + ((int)Constants.RegionSize * 0.5f), (pOffset.Y + (int)Constants.RegionSize * 0.5f), 0); 3439 d.GeomSetPosition(GroundGeom, pOffset.X + ((int)Constants.RegionSize * 0.5f), pOffset.Y + ((int)Constants.RegionSize * 0.5f), 0);
3435 IntPtr testGround = IntPtr.Zero; 3440 IntPtr testGround = IntPtr.Zero;
3436 if (RegionTerrain.TryGetValue(pOffset, out testGround)) 3441 if (RegionTerrain.TryGetValue(pOffset, out testGround))
3437 { 3442 {
3438 RegionTerrain.Remove(pOffset); 3443 RegionTerrain.Remove(pOffset);
3439 } 3444 }
3440 RegionTerrain.Add(pOffset, GroundGeom, GroundGeom); 3445 RegionTerrain.Add(pOffset, GroundGeom, GroundGeom);
3441 TerrainHeightFieldHeights.Add(GroundGeom,heightMap); 3446 TerrainHeightFieldHeights.Add(GroundGeom,_heightmap);
3442 3447
3443 } 3448 }
3444 } 3449 }