Fix a divide by zero crash in Move.

This commit is contained in:
Paul Chote
2020-10-17 20:21:17 +01:00
committed by reaperrr
parent 75fe0e524f
commit da53d5b776

View File

@@ -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;
}
} }
} }