74 lines
4.3 KiB
C#
74 lines
4.3 KiB
C#
using System.Linq;
|
|
using BumpCombat.Constants;
|
|
using BumpCombat.Defense.Comparison;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace BumpCombat.Tests
|
|
{
|
|
public sealed class Defense25DRunAssetTests
|
|
{
|
|
private const string WaveConstantsPath = "Assets/_Project/Constants/Defense25DComparison/LongDefenseWaveDirector.asset";
|
|
private const string RunDefinitionPath = "Assets/_Project/Constants/Defense25DComparison/LongDefenseRun.asset";
|
|
private const string MonsterPoolPath = "Assets/_Project/Constants/Defense25DComparison/MonsterPools.asset";
|
|
private const string ArtifactDropConstantsPath = "Assets/_Project/Constants/Defense25DComparison/ArtifactDropConstants.asset";
|
|
private const string ScenePath = "Assets/_Project/Scenes/Defense25DRun.unity";
|
|
|
|
[Test]
|
|
public void SavedRunAssetsReloadAndSceneReferencesTheRunDefinition()
|
|
{
|
|
Defense25DWaveDirectorConstants waveConstants =
|
|
AssetDatabase.LoadAssetAtPath<Defense25DWaveDirectorConstants>(WaveConstantsPath);
|
|
Defense25DRunDefinition runDefinition =
|
|
AssetDatabase.LoadAssetAtPath<Defense25DRunDefinition>(RunDefinitionPath);
|
|
Defense25DMonsterPoolDefinition monsterPool =
|
|
AssetDatabase.LoadAssetAtPath<Defense25DMonsterPoolDefinition>(MonsterPoolPath);
|
|
Defense25DArtifactDropConstants artifactDropConstants =
|
|
AssetDatabase.LoadAssetAtPath<Defense25DArtifactDropConstants>(ArtifactDropConstantsPath);
|
|
|
|
Assert.That(waveConstants, Is.Not.Null, "The Wave Director constants must be a persistent standalone asset.");
|
|
Assert.That(runDefinition, Is.Not.Null, "The long-defense RunDefinition must be a persistent asset.");
|
|
Assert.That(runDefinition.WaveDirectorConstants, Is.SameAs(waveConstants));
|
|
Assert.That(monsterPool, Is.Not.Null);
|
|
Assert.That(artifactDropConstants, Is.Not.Null);
|
|
Assert.That(runDefinition.MonsterPoolDefinition, Is.SameAs(monsterPool));
|
|
Assert.That(runDefinition.ArtifactDropConstants, Is.SameAs(artifactDropConstants));
|
|
Assert.That(runDefinition.PreparationSeconds, Is.EqualTo(20f));
|
|
Assert.That(waveConstants.SpawnWindowSeconds, Is.EqualTo(18f));
|
|
Assert.That(waveConstants.MicroBreakSeconds, Is.EqualTo(6f));
|
|
Assert.That(waveConstants.StrategyBreakEvery, Is.EqualTo(3));
|
|
Assert.That(waveConstants.StrategyBreakSeconds, Is.EqualTo(15f));
|
|
Assert.That(waveConstants.TelegraphSeconds, Is.EqualTo(8f));
|
|
Assert.That(waveConstants.EliteFirstAtSeconds, Is.EqualTo(90f));
|
|
Assert.That(waveConstants.EliteIntervalSeconds, Is.EqualTo(90f));
|
|
Assert.That(waveConstants.StrongEventMinimumIntervalSeconds, Is.EqualTo(1f));
|
|
Assert.That(waveConstants.MidBossTimes, Is.EqualTo(new[] { 240f, 480f }));
|
|
Assert.That(waveConstants.ThreatCurve.Last().ThreatBudget, Is.EqualTo(84f));
|
|
Assert.That(waveConstants.Validate(out string constantsError), Is.True, constantsError);
|
|
Assert.That(runDefinition.PortalDefinitions.Select(portal => portal.PortalId).Distinct().Count(), Is.EqualTo(12));
|
|
Assert.That(runDefinition.PortalDefinitions.All(portal => portal.TelegraphSeconds == 10f), Is.True);
|
|
Assert.That(runDefinition.PortalDefinitions.Select(portal => portal.OpenAt),
|
|
Is.EqualTo(new[] { 0f, 0f, 120f, 120f, 240f, 240f, 360f, 360f, 480f, 480f, 600f, 600f }));
|
|
Assert.That(runDefinition.Validate(out string error), Is.True, error);
|
|
|
|
Scene scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
|
|
try
|
|
{
|
|
Defense25DRunSceneProfile[] profiles = scene.GetRootGameObjects()
|
|
.Select(root => root.GetComponent<Defense25DRunSceneProfile>())
|
|
.Where(profile => profile != null)
|
|
.ToArray();
|
|
Assert.That(profiles.Length, Is.EqualTo(1));
|
|
Assert.That(profiles[0].RunDefinition, Is.SameAs(runDefinition));
|
|
}
|
|
finally
|
|
{
|
|
if (scene.IsValid() && scene.isLoaded)
|
|
EditorSceneManager.CloseScene(scene, true);
|
|
}
|
|
}
|
|
}
|
|
}
|