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
@@ -53,29 +53,29 @@ namespace BumpCombat.Tests
[UnityTest]
public IEnumerator ValidHitPopups_MatchNormalSideBackAndArtifactContracts()
{
GameObject target = world.Enemies[0].gameObject;
GameObject target = SpawnPopupTarget().gameObject;
RaiseHit(target, HitSide.Front, 31.9f);
AssertPopup(0, "31", Color.white);
world.ResetRun();
target = world.Enemies[0].gameObject;
target = SpawnPopupTarget().gameObject;
RaiseHit(target, HitSide.Side, 22.8f);
AssertPopup(0, "SIDE ×1.2 22", new Color(0.65f, 1f, 0.3f));
world.ResetRun();
target = world.Enemies[0].gameObject;
target = SpawnPopupTarget().gameObject;
RaiseHit(target, HitSide.Back, 9.8f);
AssertPopup(0, "BACK ×1.5 9", new Color(1f, 0.75f, 0.2f));
world.ResetRun();
target = world.Enemies[0].gameObject;
target = SpawnPopupTarget().gameObject;
CombatEvents.RaiseValidHit(new CombatHitResult(
world.Player.gameObject, target, true, HitSide.Front, 13f,
Vector2.right, 0f, Vector2.zero, launchSucceeded: true));
AssertPopup(0, "LAUNCH 13", new Color(0.95f, 0.55f, 1f));
world.ResetRun();
target = world.Enemies[0].gameObject;
target = SpawnPopupTarget().gameObject;
ActiveArtifactDefinition dash = world.Loadout.FindArtifact(ActiveArtifactEffect.Dash);
Assert.That(dash, Is.Not.Null);
CombatEvents.RaiseValidHit(new CombatHitResult(
@@ -86,7 +86,7 @@ namespace BumpCombat.Tests
ActiveArtifactDefinition.GetArtifactPaletteColor(dash.ArtifactColor));
world.ResetRun();
target = world.Enemies[0].gameObject;
target = SpawnPopupTarget().gameObject;
ActiveArtifactDefinition cyclone = world.Loadout.FindArtifact(ActiveArtifactEffect.Cyclone);
Assert.That(cyclone, Is.Not.Null);
CombatEvents.RaiseValidHit(CombatHitResult.ForArtifactContact(
@@ -100,7 +100,12 @@ namespace BumpCombat.Tests
[UnityTest]
public IEnumerator PopupEvents_AreWorldScopedResettableAndRemovedOnDisable()
{
GameObject worldTarget = world.Enemies[0].gameObject;
Defense25DEnemy unspawnedEnemy = world.Enemies[0];
Assert.That(unspawnedEnemy.IsAvailable, Is.False);
Assert.That(unspawnedEnemy.gameObject.activeInHierarchy, Is.False);
Assert.That(unspawnedEnemy.gameObject.GetComponentInParent<Defense25DEnemy>(), Is.Null,
"The default parent lookup excludes the inactive, unsupplied enemy fixture.");
GameObject worldTarget = unspawnedEnemy.gameObject;
GameObject unrelatedTarget = new("Unrelated popup target");
GameObject unrelatedAttacker = new("Unrelated popup attacker");
try
@@ -113,10 +118,18 @@ namespace BumpCombat.Tests
Assert.That(world.ActiveCombatDamagePopupCount, Is.Zero,
"Hits from another attacker against this world's enemy are ignored.");
Assert.That(world.ActiveCombatDamagePopupCount, Is.Zero,
"An event targeting an inactive, unsupplied enemy cannot create a popup.");
Defense25DEnemy activeEnemy = SpawnPopupTarget();
worldTarget = activeEnemy.gameObject;
Assert.That(worldTarget.GetComponentInParent<Defense25DEnemy>(), Is.SameAs(activeEnemy));
RaiseHit(worldTarget, HitSide.Front, 10f);
Assert.That(world.ActiveCombatDamagePopupCount, Is.EqualTo(1));
Assert.That(world.ActiveCombatDamagePopupCount, Is.EqualTo(1),
"A valid hit against an active, supplied enemy must be received by this world's popup handler.");
world.ResetRun();
Assert.That(world.ActiveCombatDamagePopupCount, Is.Zero);
activeEnemy = SpawnPopupTarget();
worldTarget = activeEnemy.gameObject;
world.enabled = false;
RaiseHit(worldTarget, HitSide.Front, 10f);
@@ -125,7 +138,7 @@ namespace BumpCombat.Tests
world.enabled = true;
Assert.That(world.ActiveCombatDamagePopupCount, Is.Zero,
"A disabled comparison must reject event and direct popup additions.");
RaiseHit(world.Enemies[0].gameObject, HitSide.Front, 10f);
RaiseHit(worldTarget, HitSide.Front, 10f);
Assert.That(world.ActiveCombatDamagePopupCount, Is.EqualTo(1),
"Re-enabling the comparison must restore one event subscription.");
}
@@ -172,6 +185,15 @@ namespace BumpCombat.Tests
0f, Vector2.zero, isOffsetHit: false));
}
private Defense25DEnemy SpawnPopupTarget()
{
Defense25DEnemy enemy = world.SpawnNextEnemy();
Assert.That(enemy, Is.Not.Null, "The popup fixture needs a supplied enemy from the world factory.");
Assert.That(enemy.IsAvailable, Is.True);
Assert.That(enemy.gameObject.GetComponentInParent<Defense25DEnemy>(), Is.SameAs(enemy));
return enemy;
}
private void AssertPopup(int index, string text, Color color)
{
FieldInfo popupArrayField = typeof(Defense25DComparison).GetField(