aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Util.cs
diff options
context:
space:
mode:
authorRobert Adams2013-11-08 20:53:37 -0800
committerRobert Adams2013-11-08 20:53:37 -0800
commitbeeec1c46726a266edf5c8260f9cf4e4e6f91c8a (patch)
treeac749f4db4d4ee640bf9091b9684d2a36eedb284 /OpenSim/Framework/Util.cs
parentvarregion: Massive work to LandManagementModule and LandObject to (diff)
downloadopensim-SC-beeec1c46726a266edf5c8260f9cf4e4e6f91c8a.zip
opensim-SC-beeec1c46726a266edf5c8260f9cf4e4e6f91c8a.tar.gz
opensim-SC-beeec1c46726a266edf5c8260f9cf4e4e6f91c8a.tar.bz2
opensim-SC-beeec1c46726a266edf5c8260f9cf4e4e6f91c8a.tar.xz
varregion: elimination of Constants.RegionSize from all over OpenSimulator.
Routines in Util to compute region world coordinates from region coordinates as well as the conversion to and from region handles. These routines have replaced a lot of math scattered throughout the simulator. Should be no functional changes.
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/Util.cs37
1 files changed, 37 insertions, 0 deletions
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index e8dfec1..105e75d 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -333,6 +333,43 @@ namespace OpenSim.Framework
333 return Utils.UIntsToLong(X, Y); 333 return Utils.UIntsToLong(X, Y);
334 } 334 }
335 335
336 // Regions are identified with a 'handle' made up of its region coordinates packed into a ulong.
337 // Several places rely on the ability to extract a region's location from its handle.
338 // Note the location is in 'world coordinates' (see below).
339 public static ulong RegionWorldLocToHandle(uint X, uint Y)
340 {
341 return Utils.UIntsToLong(X, Y);
342 }
343
344 public static void RegionHandleToWorldLoc(ulong handle, out uint X, out uint Y)
345 {
346 X = (uint)(handle >> 32);
347 Y = (uint)(handle & (ulong)uint.MaxValue);
348 }
349
350 public static void RegionHandleToRegionLoc(ulong handle, out uint X, out uint Y)
351 {
352 uint worldX, worldY;
353 RegionHandleToWorldLoc(handle, out worldX, out worldY);
354 X = WorldToRegionLoc(worldX);
355 Y = WorldToRegionLoc(worldY);
356 }
357
358 // A region location can be 'world coordinates' (meters from zero) or 'region coordinates'
359 // (number of regions from zero). This measurement of regions relies on the legacy 256 region size.
360 // These routines exist to make what is being converted explicit so the next person knows what was meant.
361 // Convert a region's 'world coordinate' to its 'region coordinate'.
362 public static uint WorldToRegionLoc(uint worldCoord)
363 {
364 return worldCoord / Constants.RegionSize;
365 }
366
367 // Convert a region's 'region coordinate' to its 'world coordinate'.
368 public static uint RegionToWorldLoc(uint regionCoord)
369 {
370 return regionCoord * Constants.RegionSize;
371 }
372
336 public static T Clamp<T>(T x, T min, T max) 373 public static T Clamp<T>(T x, T min, T max)
337 where T : IComparable<T> 374 where T : IComparable<T>
338 { 375 {