Fix a divide by zero crash in Move.
This commit is contained in:
@@ -414,17 +414,23 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
// The center of rotation is where the normal vectors cross
|
// The center of rotation is where the normal vectors cross
|
||||||
var u = new WVec(1024, 0, 0).Rotate(WRot.FromYaw(fromFacing));
|
var u = new WVec(1024, 0, 0).Rotate(WRot.FromYaw(fromFacing));
|
||||||
var v = new WVec(1024, 0, 0).Rotate(WRot.FromYaw(toFacing));
|
var v = new WVec(1024, 0, 0).Rotate(WRot.FromYaw(toFacing));
|
||||||
var w = from - to;
|
|
||||||
var s = (v.Y * w.X - v.X * w.Y) * 1024 / (v.X * u.Y - v.Y * u.X);
|
|
||||||
var x = from.X + s * u.X / 1024;
|
|
||||||
var y = from.Y + s * u.Y / 1024;
|
|
||||||
|
|
||||||
ArcCenter = new WPos(x, y, 0);
|
// Make sure that u and v aren't parallel, which may happen due to rounding
|
||||||
ArcFromLength = (ArcCenter - from).HorizontalLength;
|
// in WVec.Rotate if delta is close but not necessarily equal to 0 or 512
|
||||||
ArcFromAngle = (ArcCenter - from).Yaw;
|
if (v.X * u.Y != v.Y * u.X)
|
||||||
ArcToLength = (ArcCenter - to).HorizontalLength;
|
{
|
||||||
ArcToAngle = (ArcCenter - to).Yaw;
|
var w = from - to;
|
||||||
EnableArc = true;
|
var s = (v.Y * w.X - v.X * w.Y) * 1024 / (v.X * u.Y - v.Y * u.X);
|
||||||
|
var x = from.X + s * u.X / 1024;
|
||||||
|
var y = from.Y + s * u.Y / 1024;
|
||||||
|
|
||||||
|
ArcCenter = new WPos(x, y, 0);
|
||||||
|
ArcFromLength = (ArcCenter - from).HorizontalLength;
|
||||||
|
ArcFromAngle = (ArcCenter - from).Yaw;
|
||||||
|
ArcToLength = (ArcCenter - to).HorizontalLength;
|
||||||
|
ArcToAngle = (ArcCenter - to).Yaw;
|
||||||
|
EnableArc = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user