refactored Average method in PPos
This commit is contained in:
@@ -29,8 +29,6 @@ namespace OpenRA
|
||||
public static explicit operator PVecInt(PPos a) { return new PVecInt(a.X, a.Y); }
|
||||
public static explicit operator PVecFloat(PPos a) { return new PVecFloat(a.X, a.Y); }
|
||||
|
||||
public static PPos operator /(PPos a, int b) { return new PPos(a.X / b , a.Y / b); }
|
||||
public static PPos operator +(PPos a, PPos b) { return new PPos(a.X + b.X, a.Y + b.Y); }
|
||||
public static PPos operator +(PPos a, PVecInt b) { return new PPos(a.X + b.X, a.Y + b.Y); }
|
||||
public static PVecInt operator -(PPos a, PPos b) { return new PVecInt(a.X - b.X, a.Y - b.Y); }
|
||||
public static PPos operator -(PPos a, PVecInt b) { return new PPos(a.X - b.X, a.Y - b.Y); }
|
||||
@@ -46,6 +44,25 @@ namespace OpenRA
|
||||
return a + ((PVecInt)(b - a) * mul / div);
|
||||
}
|
||||
|
||||
public static PPos Average(params PPos[] list)
|
||||
{
|
||||
if (list == null || list.Length == 0)
|
||||
throw new ArgumentException("PPos: Cannot calculate average of empty list.");
|
||||
|
||||
var x = 0;
|
||||
var y = 0;
|
||||
foreach(var pos in list)
|
||||
{
|
||||
x += pos.X;
|
||||
y += pos.Y;
|
||||
}
|
||||
|
||||
x /= list.Length;
|
||||
y /= list.Length;
|
||||
|
||||
return new PPos(x,y);
|
||||
}
|
||||
|
||||
public float2 ToFloat2() { return new float2(X, Y); }
|
||||
public int2 ToInt2() { return new int2(X, Y); }
|
||||
public CPos ToCPos() { return new CPos((int)(1f / Game.CellSize * X), (int)(1f / Game.CellSize * Y)); }
|
||||
|
||||
@@ -88,10 +88,8 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
for (int i = positions.Count - 1 - StartSkip; i >= 4; --i)
|
||||
{
|
||||
var conPos = positions[i] + positions[i-1] + positions[i-2] + positions[i-3];
|
||||
conPos /= 4;
|
||||
var nextPos = positions[i-1] + positions[i-2] + positions[i-3] + positions[i-4];
|
||||
nextPos /= 4;
|
||||
var conPos = PPos.Average(positions[i], positions[i-1], positions[i-2], positions[i-3]);
|
||||
var nextPos = PPos.Average(positions[i-1], positions[i-2], positions[i-3], positions[i-4]);
|
||||
|
||||
if (self.World.RenderedShroud.IsVisible(conPos.ToCPos()) ||
|
||||
self.World.RenderedShroud.IsVisible(nextPos.ToCPos()))
|
||||
|
||||
Reference in New Issue
Block a user