diff options
Diffstat (limited to 'OpenSim/Framework/Util.cs')
-rw-r--r-- | OpenSim/Framework/Util.cs | 37 |
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 | { |