refactor(engine-ambient): IsForecast/IsRandomDraw read ambient first, static fallback
Step 2 of multi-instancing migration. Both flags now resolve through BattleAmbient.Current when a scope is active, otherwise hit a static fallback that preserves today's behavior unchanged for unwrapped callers. Suite green: SVSim.BattleEngine.Tests pass; SVSim.UnitTests baseline holds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -81,4 +81,52 @@ public class BattleAmbientTests
|
|||||||
Assert.That(results[0], Is.EqualTo(100));
|
Assert.That(results[0], Is.EqualTo(100));
|
||||||
Assert.That(results[1], Is.EqualTo(200));
|
Assert.That(results[1], Is.EqualTo(200));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsForecast_ReadsAmbient_WhenScopeActive()
|
||||||
|
{
|
||||||
|
var ctx = new BattleAmbientContext { IsForecast = false };
|
||||||
|
using var _ = BattleAmbient.Enter(ctx);
|
||||||
|
Assert.That(BattleManagerBase.IsForecast, Is.False);
|
||||||
|
ctx.IsForecast = true;
|
||||||
|
Assert.That(BattleManagerBase.IsForecast, Is.True);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsForecast_WriteInsideScope_WritesAmbient_NotFallback()
|
||||||
|
{
|
||||||
|
var ctx = new BattleAmbientContext { IsForecast = false };
|
||||||
|
using (var _ = BattleAmbient.Enter(ctx))
|
||||||
|
{
|
||||||
|
BattleManagerBase.IsForecast = true;
|
||||||
|
Assert.That(ctx.IsForecast, Is.True);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsForecast_OutsideScope_FallsBackToStatic()
|
||||||
|
{
|
||||||
|
Assert.That(BattleAmbient.Current, Is.Null);
|
||||||
|
BattleManagerBase.IsForecast = true;
|
||||||
|
Assert.That(BattleManagerBase.IsForecast, Is.True);
|
||||||
|
BattleManagerBase.IsForecast = false;
|
||||||
|
Assert.That(BattleManagerBase.IsForecast, Is.False);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsRandomDraw_RoundtripsAmbient_And_Fallback()
|
||||||
|
{
|
||||||
|
Assert.That(BattleAmbient.Current, Is.Null);
|
||||||
|
BattleManagerBase.IsRandomDraw = true;
|
||||||
|
Assert.That(BattleManagerBase.IsRandomDraw, Is.True);
|
||||||
|
|
||||||
|
var ctx = new BattleAmbientContext { IsRandomDraw = false };
|
||||||
|
using (var _ = BattleAmbient.Enter(ctx))
|
||||||
|
{
|
||||||
|
Assert.That(BattleManagerBase.IsRandomDraw, Is.False);
|
||||||
|
}
|
||||||
|
Assert.That(BattleManagerBase.IsRandomDraw, Is.True);
|
||||||
|
|
||||||
|
BattleManagerBase.IsRandomDraw = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -412,9 +412,25 @@ public class BattleManagerBase
|
|||||||
|
|
||||||
private static BattleManagerBase main;
|
private static BattleManagerBase main;
|
||||||
|
|
||||||
public static bool IsRandomDraw = false;
|
private static bool _isRandomDrawFallback = false;
|
||||||
|
public static bool IsRandomDraw {
|
||||||
|
get => SVSim.BattleEngine.Ambient.BattleAmbient.Current?.IsRandomDraw ?? _isRandomDrawFallback;
|
||||||
|
set {
|
||||||
|
var c = SVSim.BattleEngine.Ambient.BattleAmbient.Current;
|
||||||
|
if (c != null) c.IsRandomDraw = value;
|
||||||
|
else _isRandomDrawFallback = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsForecast = false;
|
private static bool _isForecastFallback = false;
|
||||||
|
public static bool IsForecast {
|
||||||
|
get => SVSim.BattleEngine.Ambient.BattleAmbient.Current?.IsForecast ?? _isForecastFallback;
|
||||||
|
set {
|
||||||
|
var c = SVSim.BattleEngine.Ambient.BattleAmbient.Current;
|
||||||
|
if (c != null) c.IsForecast = value;
|
||||||
|
else _isForecastFallback = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BattleLifeTimeSharedObject BattleLifeTimeSharedObject;
|
public BattleLifeTimeSharedObject BattleLifeTimeSharedObject;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user