2.5d test
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
using BumpCombat.Constants;
|
||||
using BumpCombat.Defense.Comparison;
|
||||
using BumpCombat.Enemies;
|
||||
using NUnit.Framework;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.TestTools;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace BumpCombat.Tests
|
||||
{
|
||||
public sealed class Defense25DSkeletonCombatPlayModeTests
|
||||
{
|
||||
private Defense25DComparison world;
|
||||
private Defense25DComparisonSettings settings;
|
||||
private AnimationClip attackClip;
|
||||
private float previousTimeScale;
|
||||
|
||||
[UnitySetUp]
|
||||
public IEnumerator SetUp()
|
||||
{
|
||||
previousTimeScale = Time.timeScale;
|
||||
Time.timeScale = 1f;
|
||||
settings = Object.Instantiate(AssetDatabase.LoadAssetAtPath<Defense25DComparisonSettings>(
|
||||
"Assets/_Project/Constants/Defense25DComparison/ComparisonSettings.asset"));
|
||||
Assert.That(settings, Is.Not.Null);
|
||||
world = new GameObject("Skeleton combat under test").AddComponent<Defense25DComparison>();
|
||||
world.Initialize(settings);
|
||||
world.AutoSpawn = false;
|
||||
world.ReadInput = false;
|
||||
world.SetPaused(false);
|
||||
Time.timeScale = 0f;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
[UnityTearDown]
|
||||
public IEnumerator TearDown()
|
||||
{
|
||||
if (world != null) Object.Destroy(world.gameObject);
|
||||
if (settings != null) Object.Destroy(settings);
|
||||
Time.timeScale = previousTimeScale;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator SkeletonSlashDamagesOnceWhenItsAuthoredActiveWindowBegins()
|
||||
{
|
||||
EnemyDefinition skeleton = AssetDatabase.LoadAssetAtPath<EnemyDefinition>(
|
||||
"Assets/_Project/Constants/Enemies/Skeleton.asset");
|
||||
attackClip = AssetDatabase.LoadAssetAtPath<AnimationClip>(
|
||||
"Assets/_Project/Art/Characters/Skeleton/Animations/Skeleton_Attack.anim");
|
||||
Assert.That(skeleton, Is.Not.Null);
|
||||
Assert.That(attackClip, Is.Not.Null);
|
||||
Defense25DEnemy enemy = world.Enemies[0];
|
||||
Assert.That(world.IsRunning, Is.True);
|
||||
enemy.Spawn(Vector2.zero);
|
||||
enemy.ConfigureSkeletonCombat(skeleton, 1.25f, attackClip);
|
||||
Assert.That(world.Settings.EnemyRadius, Is.EqualTo(.275f).Within(.0001f));
|
||||
Assert.That(world.Settings.EnemyColliderOffset, Is.EqualTo(new Vector2(0f, -.35f)));
|
||||
world.Player.ResetAt(new Vector2(.5f, 0f));
|
||||
Physics.SyncTransforms();
|
||||
|
||||
SetGameTime(0f);
|
||||
Assert.That(enemy.StepSkeletonCombat(Time.fixedDeltaTime), Is.True);
|
||||
Assert.That(world.IsRunning, Is.True);
|
||||
Assert.That(enemy.IsAttacking, Is.True);
|
||||
SetGameTime(.699f);
|
||||
enemy.StepSkeletonCombat(Time.fixedDeltaTime);
|
||||
Assert.That(world.Player.DamageEvents, Is.Zero,
|
||||
"The warning phase must not deal damage.");
|
||||
|
||||
SetGameTime(.7f);
|
||||
enemy.StepSkeletonCombat(Time.fixedDeltaTime);
|
||||
Assert.That(world.Player.DamageEvents, Is.EqualTo(1));
|
||||
Assert.That(world.Player.CurrentHealth, Is.EqualTo(world.Player.MaxHealth - 12f).Within(.001f));
|
||||
|
||||
SetGameTime(.72f);
|
||||
enemy.StepSkeletonCombat(Time.fixedDeltaTime);
|
||||
Assert.That(world.Player.DamageEvents, Is.EqualTo(1),
|
||||
"A successful slash is latched for the rest of its active window.");
|
||||
yield return null;
|
||||
}
|
||||
|
||||
private void SetGameTime(float value)
|
||||
{
|
||||
typeof(Defense25DComparison).GetProperty(nameof(Defense25DComparison.GameTime))
|
||||
.GetSetMethod(true).Invoke(world, new object[] { value });
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user