Files
tiny_tackle_heroes/Assets/_Project/Tests/EditMode/Defense25DComparisonTests.cs
T
2026-09-27 21:08:05 +09:00

66 lines
2.7 KiB
C#

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<SceneAsset>(
"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));
}
}
}