64 lines
2.7 KiB
C#
64 lines
2.7 KiB
C#
using System.Collections;
|
|
using System.Reflection;
|
|
using BumpCombat.Combat;
|
|
using BumpCombat.Core;
|
|
using BumpCombat.Enemies;
|
|
using BumpCombat.Player;
|
|
using BumpCombat.Progression;
|
|
using BumpCombat.Spawning;
|
|
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.TestTools;
|
|
|
|
namespace BumpCombat.PlayModeTests
|
|
{
|
|
public sealed class HurtRecoveryVisualTests
|
|
{
|
|
[UnityTest]
|
|
public IEnumerator HurtBlink_PausesWithImmunityAndClearsAfterRecovery()
|
|
{
|
|
ArtifactRewardController.GrantCatalogForTests = true;
|
|
RunManager.ForceProductionModeForTests = false;
|
|
Time.timeScale = 1f;
|
|
yield return SceneManager.LoadSceneAsync("CombatPrototype");
|
|
yield return null;
|
|
yield return null;
|
|
Object.FindAnyObjectByType<SpawnDirector>().enabled = false;
|
|
foreach (var enemy in Object.FindObjectsByType<EnemyController>(FindObjectsSortMode.None))
|
|
enemy.gameObject.SetActive(false);
|
|
var health = Object.FindAnyObjectByType<PlayerHealth>();
|
|
var feedback = health.GetComponent<CombatFeedback>();
|
|
var body = health.GetComponent<SpriteRenderer>();
|
|
var routine = typeof(CombatFeedback).GetField("playerVisualCoroutine", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
Color original = body.color;
|
|
Assert.That(health.TryTakeDamage(1f, Vector2.zero, 0f), Is.True);
|
|
yield return new WaitForSeconds(0.2f);
|
|
Assert.That(RunManager.Instance.TryOpenPause(), Is.True);
|
|
yield return null;
|
|
Color paused = body.color;
|
|
yield return new WaitForSecondsRealtime(1.2f);
|
|
Assert.That(health.IsInvulnerable, Is.True);
|
|
Assert.That(routine.GetValue(feedback), Is.Not.Null, "Damage blink must not expire on real time during pause.");
|
|
Assert.That(body.color, Is.EqualTo(paused), "Blink phase freezes with game time.");
|
|
Assert.That(RunManager.Instance.ClosePause(), Is.True);
|
|
yield return new WaitForSeconds(0.4f);
|
|
Assert.That(health.IsHurtMovementLocked, Is.False);
|
|
Assert.That(health.IsInvulnerable, Is.True);
|
|
Assert.That(routine.GetValue(feedback), Is.Not.Null);
|
|
yield return new WaitForSeconds(0.5f);
|
|
Assert.That(health.IsInvulnerable, Is.False);
|
|
Assert.That(routine.GetValue(feedback), Is.Null);
|
|
Assert.That(body.color, Is.EqualTo(original));
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
ArtifactRewardController.GrantCatalogForTests = false;
|
|
RunManager.ForceProductionModeForTests = false;
|
|
Time.timeScale = 1f;
|
|
}
|
|
}
|
|
}
|