diff --git a/OpenRA.Game/WAngle.cs b/OpenRA.Game/WAngle.cs index 264f5a6bb1..3b831d4eca 100644 --- a/OpenRA.Game/WAngle.cs +++ b/OpenRA.Game/WAngle.cs @@ -41,6 +41,8 @@ namespace OpenRA public bool Equals(WAngle other) { return other == this; } public override bool Equals(object obj) { return obj is WAngle && Equals((WAngle)obj); } + public int Facing { get { return Angle / 4; } } + public int Sin() { return new WAngle(Angle - 256).Cos(); } public int Cos() diff --git a/OpenRA.Game/WVec.cs b/OpenRA.Game/WVec.cs index 832a568dca..3e3106bf8c 100644 --- a/OpenRA.Game/WVec.cs +++ b/OpenRA.Game/WVec.cs @@ -58,6 +58,18 @@ namespace OpenRA (int)((lx * mtx[2] + ly * mtx[6] + lz * mtx[10]) / mtx[15])); } + public WAngle Yaw + { + get + { + if (LengthSquared == 0) + return WAngle.Zero; + + // OpenRA defines north as -y + return WAngle.ArcTan(-Y, X) - new WAngle(256); + } + } + public static WVec Lerp(WVec a, WVec b, int mul, int div) { return a + (b - a) * mul / div; } public static WVec LerpQuadratic(WVec a, WVec b, WAngle pitch, int mul, int div) @@ -134,7 +146,7 @@ namespace OpenRA case "X": return X; case "Y": return Y; case "Z": return Z; - case "Facing": return Traits.Util.GetFacing(this, 0); + case "Facing": return Yaw.Facing; default: throw new LuaException("WVec does not define a member '{0}'".F(key)); } }