diff --git a/Assets/_Project/Tests/EditMode/AnimParamMathTests.cs b/Assets/_Project/Tests/EditMode/AnimParamMathTests.cs index 150cdb98e..742e40d66 100644 --- a/Assets/_Project/Tests/EditMode/AnimParamMathTests.cs +++ b/Assets/_Project/Tests/EditMode/AnimParamMathTests.cs @@ -73,5 +73,32 @@ namespace ProjectM.Tests Assert.IsFalse(float.IsNaN(r.x) || float.IsNaN(r.y) || float.IsNaN(r.z)); Assert.AreEqual(1f, r.z, Eps); // clamps to 1 } + + // ---- PlanarForward (enemy facing from replicated LocalTransform.Rotation) ---- + + [Test] public void PlanarForward_Identity_IsWorldForward() + { + var f = AnimParamMath.PlanarForward(quaternion.identity); + Assert.AreEqual(0f, f.x, Eps); Assert.AreEqual(1f, f.y, Eps); + } + + [Test] public void PlanarForward_Yaw180_IsBackward() + { + var f = AnimParamMath.PlanarForward(quaternion.RotateY(math.radians(180f))); + Assert.AreEqual(0f, f.x, Eps); Assert.AreEqual(-1f, f.y, Eps); + } + + [Test] public void PlanarForward_PitchedToVertical_FallsBackToWorldForward() + { + // forward rotated to point straight down -> planar XZ ~ 0 -> degenerate fallback (0,1). + var f = AnimParamMath.PlanarForward(quaternion.RotateX(math.radians(90f))); + Assert.AreEqual(0f, f.x, Eps); Assert.AreEqual(1f, f.y, Eps); + } + + [Test] public void PlanarForward_IsNormalized() + { + var f = AnimParamMath.PlanarForward(quaternion.RotateY(math.radians(37f))); + Assert.AreEqual(1f, math.length(f), Eps); + } } }