convert game playing..

This commit is contained in:
2026-09-23 12:53:52 +09:00
parent 37c7942b71
commit 5d11288a6f
136 changed files with 15856 additions and 299 deletions
@@ -141,7 +141,7 @@ namespace BumpCombat.PlayModeTests
}
[UnityTest]
public IEnumerator EnemyStatusVisual_LoadsBothSheetsAndSharesGroundAnchor()
public IEnumerator EnemyStatusVisual_LoadsBothSheetsAndFollowsRenderedAnchor()
{
yield return LoadCombatPrototype();
EnemyController enemy = FindOrSpawnEnemy();
@@ -151,7 +151,7 @@ namespace BumpCombat.PlayModeTests
Assert.That(source == null, Is.False);
enemy.transform.localScale = Vector3.one * 0.8f;
source.flipX = true;
source.flipY = false;
source.flipY = true;
Assert.That(enemy.ApplyIgnite(3f, 0.5f, 0.01f), Is.True);
Assert.That(enemy.ApplyShock(3f, 0.2f), Is.True);
@@ -172,15 +172,18 @@ namespace BumpCombat.PlayModeTests
Assert.That(ignite.sprite.pixelsPerUnit, Is.EqualTo(32f).Within(0.01f));
Assert.That(shock.sprite.pixelsPerUnit, Is.EqualTo(32f).Within(0.01f));
Vector3 expectedStatusPosition = ExpectedStatusPosition(enemy, source);
Assert.That(
Vector3.Distance(
ignite.transform.position,
(Vector3)enemy.GroundAnchorPosition),
ignite.transform.parent,
Is.EqualTo(GetCurrentVisualTransform(enemy)));
Assert.That(
shock.transform.parent,
Is.EqualTo(GetCurrentVisualTransform(enemy)));
Assert.That(
Vector3.Distance(ignite.transform.position, expectedStatusPosition),
Is.LessThan(0.0001f));
Assert.That(
Vector3.Distance(
shock.transform.position,
(Vector3)enemy.GroundAnchorPosition),
Vector3.Distance(shock.transform.position, expectedStatusPosition),
Is.LessThan(0.0001f));
Assert.That(ignite.flipX, Is.EqualTo(source.flipX));
Assert.That(shock.flipX, Is.EqualTo(source.flipX));
@@ -203,6 +206,122 @@ namespace BumpCombat.PlayModeTests
Assert.That(enemy.transform.Find("Stun Runes") == null, Is.False);
}
[UnityTest]
public IEnumerator EnemyStatusVisual_UsesRenderedTransformWhenPhysicsPositionDiffers()
{
yield return LoadCombatPrototype();
EnemyController enemy = FindOrSpawnEnemy();
Assert.That(enemy, Is.Not.Null);
Rigidbody2D body = enemy.GetComponent<Rigidbody2D>();
SpriteRenderer source = enemy.GetComponent<SpriteRenderer>();
Assert.That(body, Is.Not.Null);
Assert.That(source, Is.Not.Null);
Time.timeScale = 0f;
body.simulated = false;
Vector2 physicalPosition = (Vector2)enemy.transform.position
+ Vector2.down * 3f;
Vector3 renderedPosition = enemy.transform.position
+ Vector3.up * 1.5f;
body.position = physicalPosition;
enemy.transform.position = renderedPosition;
Assert.That(
Vector2.Distance(body.position, enemy.transform.position),
Is.GreaterThan(1f));
Assert.That(enemy.ApplyIgnite(3f, 0.5f, 0.01f), Is.True);
ArtifactStatusVisual statusVisual =
enemy.GetComponent<ArtifactStatusVisual>();
Assert.That(statusVisual, Is.Not.Null);
statusVisual.SendMessage(
"LateUpdate",
SendMessageOptions.RequireReceiver);
SpriteRenderer ignite = FindChildRenderer(enemy, IgniteVisualName);
Assert.That(ignite, Is.Not.Null);
Assert.That(
Vector3.Distance(
ignite.transform.position,
ExpectedStatusPosition(enemy, source)),
Is.LessThan(0.0001f));
Assert.That(
Vector2.Distance(ignite.transform.position, body.position),
Is.GreaterThan(0.5f));
body.simulated = true;
}
[UnityTest]
public IEnumerator EnemyStatusVisual_FollowsLaunchAndFogVisibility()
{
yield return LoadCombatPrototype();
EnemyController enemy = FindOrSpawnEnemy();
Assert.That(enemy, Is.Not.Null);
SpriteRenderer source = enemy.GetComponent<SpriteRenderer>();
Assert.That(source, Is.Not.Null);
Assert.That(enemy.ApplyIgnite(3f, 0.5f, 0.01f), Is.True);
yield return null;
SpriteRenderer ignite = FindChildRenderer(enemy, IgniteVisualName);
Assert.That(ignite, Is.Not.Null);
enemy.PlayLaunchVisual(Vector2.right, 0.8f, 0.4f);
yield return null;
Transform launchVisual = GetCurrentVisualTransform(enemy);
Assert.That(enemy.IsLaunchVisualActive, Is.True);
Assert.That(launchVisual, Is.Not.EqualTo(enemy.transform));
Assert.That(ignite.transform.parent, Is.EqualTo(launchVisual));
Assert.That(
Vector3.Distance(
ignite.transform.position,
ExpectedStatusPosition(enemy, source)),
Is.LessThan(0.0001f));
enemy.SetFogVisibility(false);
yield return null;
Assert.That(ignite.forceRenderingOff, Is.True);
SpriteRenderer airborneRenderer =
launchVisual.GetComponent<SpriteRenderer>();
Assert.That(airborneRenderer, Is.Not.Null);
Assert.That(airborneRenderer.forceRenderingOff, Is.True);
Assert.That(enemy.ApplyShock(3f, 0.2f), Is.True);
yield return null;
SpriteRenderer shock = FindChildRenderer(enemy, ShockVisualName);
Assert.That(shock, Is.Not.Null);
Assert.That(shock.forceRenderingOff, Is.True);
enemy.SetFogVisibility(true);
yield return null;
Assert.That(ignite.forceRenderingOff, Is.False);
Assert.That(shock.forceRenderingOff, Is.False);
Assert.That(airborneRenderer.forceRenderingOff, Is.False);
yield return new WaitForSeconds(0.45f);
yield return null;
Assert.That(enemy.IsLaunchVisualActive, Is.False);
Assert.That(enemy.IsIgnited, Is.True);
SpriteRenderer landedIgnite =
FindChildRenderer(enemy, IgniteVisualName);
Assert.That(landedIgnite, Is.Not.Null);
Assert.That(
landedIgnite.transform.parent,
Is.EqualTo(enemy.transform));
Assert.That(
Vector3.Distance(
landedIgnite.transform.position,
ExpectedStatusPosition(enemy, source)),
Is.LessThan(0.0001f));
}
[UnityTest]
public IEnumerator EnemyStatusVisual_FreezesDuringPauseAndAdvancesAfterResume()
{
@@ -438,6 +557,26 @@ namespace BumpCombat.PlayModeTests
return null;
}
private static Transform GetCurrentVisualTransform(EnemyController enemy)
{
Transform airborneVisual =
enemy.transform.Find("Airborne Enemy Visual");
return airborneVisual != null
? airborneVisual
: enemy.transform;
}
private static Vector3 ExpectedStatusPosition(
EnemyController enemy,
SpriteRenderer source)
{
float anchorOffsetY = source.flipY
? 13f / 32f
: -13f / 32f;
return GetCurrentVisualTransform(enemy).TransformPoint(
new Vector3(0f, anchorOffsetY, 0f));
}
private static SpriteRenderer FindChildRenderer(
EnemyController enemy,
string objectName)