2.5 update

This commit is contained in:
2026-09-28 11:07:17 +09:00
parent abd2da2057
commit 7978d82196
976 changed files with 111965 additions and 313 deletions
@@ -0,0 +1,73 @@
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);
}
}
}
}