using System.Collections; using BumpCombat.Combat; using BumpCombat.Player; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; namespace BumpCombat.PlayModeTests { public sealed class ArtifactImpactFeedbackPlayModeTests { private GameObject feedbackObject; private GameObject targetObject; [SetUp] public void SetUp() { Time.timeScale = 1f; feedbackObject = new GameObject("Artifact Feedback Test Host"); feedbackObject.AddComponent(); feedbackObject.AddComponent(); targetObject = new GameObject("Artifact Feedback Test Target"); } [TearDown] public void TearDown() { if (targetObject != null) { Object.Destroy(targetObject); } if (feedbackObject != null) { Object.Destroy(feedbackObject); } Time.timeScale = 1f; } [UnityTest] public IEnumerator SixArtifacts_RenderNormalAndChargedContacts_AndCleanUp() { CombatFeedback feedback = feedbackObject.GetComponent(); ActiveArtifactEffect[] effects = { ActiveArtifactEffect.Dash, ActiveArtifactEffect.Pulse, ActiveArtifactEffect.Phoenix, ActiveArtifactEffect.Cyclone, ActiveArtifactEffect.ThunderCrash, ActiveArtifactEffect.ChainLightning, }; for (int i = 0; i < effects.Length; i++) { ActiveArtifactEffect effect = effects[i]; CombatEvents.RaiseValidHit(new CombatHitResult( feedbackObject, targetObject, false, HitSide.Front, 0f, Vector2.up, 0f, new Vector2(i, 0f), isArtifactHit: true, artifactEffect: effect, isChargedArtifact: false)); CombatEvents.RaiseValidHit(new CombatHitResult( feedbackObject, targetObject, false, HitSide.Front, 0f, Vector2.up, 0f, new Vector2(i, 0.5f), showsHitFeedback: false, isArtifactHit: true, artifactEffect: effect, isChargedArtifact: true)); string effectName = effect switch { ActiveArtifactEffect.Phoenix => "SearingRay", ActiveArtifactEffect.ChainLightning => "Arc", _ => effect.ToString(), }; Assert.That( GameObject.Find($"Artifact Impact {effectName} Normal"), Is.Not.Null); Assert.That( GameObject.Find($"Artifact Impact {effectName} Charged"), Is.Not.Null); } Assert.That(feedback.ActiveArtifactImpactVisualCount, Is.EqualTo(12)); Assert.That(GameObject.Find("Hit Impact"), Is.Null); Assert.That(GameObject.Find("Attack Slash"), Is.Null); Time.timeScale = 1f; yield return new WaitForSecondsRealtime(0.25f); Assert.That(feedback.ActiveArtifactImpactVisualCount, Is.Zero); LogAssert.NoUnexpectedReceived(); } } }