using System.Reflection; using BumpCombat.Combat; using BumpCombat.Defense.Comparison; using BumpCombat.Player; using NUnit.Framework; using UnityEditor; using UnityEngine; namespace BumpCombat.Tests { public sealed class Defense25DComparisonTests { [Test] public void IndependentSceneExists() { Assert.That(AssetDatabase.LoadAssetAtPath( "Assets/_Project/Scenes/Defense25DComparison.unity"), Is.Not.Null); } [TestCase(false, .85f, 38.0625f / 32f, 15.03125f / 32f, 3)] [TestCase(true, 1.25f, 46f / 32f, 18f / 32f, 5)] public void CyclonePreservesAuthoredEllipseAndTickSchedule( bool charged, float range, float radiusX, float radiusZ, int count) { Vector2 radii = CycloneGeometry.Radii(range, charged); Assert.That(radii.x, Is.EqualTo(radiusX).Within(.00001f)); Assert.That(radii.y, Is.EqualTo(radiusZ).Within(.00001f)); Assert.That(CycloneGeometry.ScheduledHitCount(charged ? .65f : .36f, .14f), Is.EqualTo(count)); MethodInfo original = typeof(ActiveArtifactController).GetMethod( "GetCycloneHitRadii", BindingFlags.NonPublic | BindingFlags.Static); Assert.That(original.Invoke(null, new object[] { range, charged }), Is.EqualTo(radii)); } [Test] public void EllipseUsesBodyEdgeRatherThanGroundCenterOrSphere() { Vector2 radii = CycloneGeometry.Radii(.85f, false); Vector2 bodyCenter = new(0f, radii.y + .2f); Vector2 Closest(Vector2 point) => bodyCenter + Vector2.ClampMagnitude(point - bodyCenter, .24f); Assert.That(CycloneGeometry.Overlaps(Vector2.zero, radii, Closest), Is.True); bodyCenter.y = radii.y + .3f; Assert.That(CycloneGeometry.Overlaps(Vector2.zero, radii, Closest), Is.False); } [Test] public void ViewportCentersIntegerUpscaleAndRejectsLetterbox() { Rect rect = Defense25DView.GetViewport(1920, 1080); Assert.That(rect, Is.EqualTo(new Rect(0, 0, 1920, 1080))); rect = Defense25DView.GetViewport(1399, 799); Assert.That(rect.width, Is.EqualTo(1280)); Assert.That(rect.height, Is.EqualTo(720)); Assert.That(rect.Contains(Vector2.zero), Is.False); } [Test] public void SharedBumpDamageStillFloorsOnlyAtFinalBoundary() { Assert.That(DamageCalculator.FinalizeDamage( BumpCombatMath.ApplySideMultiplier(10.9f, HitSide.Side)), Is.EqualTo(13)); Assert.That(DamageCalculator.FinalizeDamage( BumpCombatMath.ApplySideMultiplier(10f, HitSide.Back)), Is.EqualTo(15)); } } }