mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
change the GetFallbackRegions sort code
This commit is contained in:
@@ -84,29 +84,39 @@ namespace OpenSim.Data
|
||||
|
||||
List<RegionData> GetDefaultRegions(UUID scopeID);
|
||||
List<RegionData> GetDefaultHypergridRegions(UUID scopeID);
|
||||
List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y);
|
||||
List<RegionData> GetFallbackRegions(UUID scopeID);
|
||||
List<RegionData> GetHyperlinks(UUID scopeID);
|
||||
}
|
||||
|
||||
public class RegionDataDistanceCompare : IComparer<RegionData>
|
||||
{
|
||||
private Vector2 m_origin;
|
||||
private float m_originX;
|
||||
private float m_originY;
|
||||
|
||||
public RegionDataDistanceCompare(int x, int y)
|
||||
{
|
||||
m_origin = new Vector2(x, y);
|
||||
m_originX = x;
|
||||
m_originY = y;
|
||||
}
|
||||
|
||||
public int Compare(RegionData regionA, RegionData regionB)
|
||||
{
|
||||
Vector2 vectorA = new Vector2(regionA.posX, regionA.posY);
|
||||
Vector2 vectorB = new Vector2(regionB.posX, regionB.posY);
|
||||
return Math.Sign(VectorDistance(m_origin, vectorA) - VectorDistance(m_origin, vectorB));
|
||||
}
|
||||
float dx = regionA.posX - m_originX;
|
||||
if (dx < 0)
|
||||
dx += regionA.sizeX - 1;
|
||||
float dy = regionA.posY - m_originY;
|
||||
if (dy < 0)
|
||||
dy += regionA.sizeY - 1;
|
||||
float da = dx * dx - dy * dy;
|
||||
|
||||
private float VectorDistance(Vector2 x, Vector2 y)
|
||||
{
|
||||
return (x - y).Length();
|
||||
dx = regionB.posX - m_originX;
|
||||
if (dx < 0)
|
||||
dx += regionB.sizeX - 1;
|
||||
dy = regionB.posY - m_originY;
|
||||
if (dy < 0)
|
||||
dy += regionB.sizeY - 1;
|
||||
float db = dx * dx - dy * dy;
|
||||
return da.CompareTo(db);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user