Make tiles sorting deterministic in all cases
This may fix issue #5916. In any case, it's wanted because this kind of sort is "unstable". According to the docs: "This implementation performs an unstable sort; that is, if two elements are equal, their order might not be preserved."
This commit is contained in:
@@ -716,7 +716,28 @@ namespace OpenRA
|
|||||||
|
|
||||||
// Sort each integer-distance group by the actual distance
|
// Sort each integer-distance group by the actual distance
|
||||||
foreach (var list in ts)
|
foreach (var list in ts)
|
||||||
list.Sort((a, b) => a.LengthSquared.CompareTo(b.LengthSquared));
|
{
|
||||||
|
list.Sort((a, b) =>
|
||||||
|
{
|
||||||
|
var result = a.LengthSquared.CompareTo(b.LengthSquared);
|
||||||
|
if (result != 0)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
// If the lengths are equal, use other means to sort them.
|
||||||
|
// Try the hashcode first because it gives more
|
||||||
|
// random-appearing results than X or Y that would always
|
||||||
|
// prefer the leftmost/topmost position.
|
||||||
|
result = a.GetHashCode().CompareTo(b.GetHashCode());
|
||||||
|
if (result != 0)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result = a.X.CompareTo(b.X);
|
||||||
|
if (result != 0)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
return a.Y.CompareTo(b.Y);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return ts.Select(list => list.ToArray()).ToArray();
|
return ts.Select(list => list.ToArray()).ToArray();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user