LANTERN purge B3+B5: delete the cycle/core/win-lose spine + onboarding; save epoch v7
Deletes CyclePhaseSystem, GoalReachedSystem, CoreDamage/CoreRestore, ThreatDirector, CoreIntegrity/GoalProgress/RunPhase/RunOutcome/ThreatState components, CoreVisualFeedbackSystem, and the whole Client/Onboarding slice (+6 test files). Keepers reworked: RunDirectorSystem (UpdateBefore attr + launch guard + goal/threat bank removed; sole SaveRequest raiser now), CycleDirectorSpawnSystem (ledger/meta host only), WaveSystem UNGATED (waves run wherever a WaveDirector is baked), EnemyAISystem core-fallback stripped, AmbientAudioSystem reworked (bed + run cues; no CycleState gate), MusicSystem RunInfo-only, HudSystem big trim (goal meter, core bar, siege banner, terminal banner, outcome flash, onboarding hook all gone), MetaShop/ClassPrep/AimReticle siege gates dropped, DebugOverlay/ops re-meant (SpawnWave=force next wave, EndSiege=quiet arena; SetCalm/AdvanceGoal/SetHeat retired, bytes reserved), TuningConfig Core knobs retired (ids 20-23 reserved), StorageMath.DrainFraction deleted, HowToPlay copy rewritten. Save epoch v7 (fresh epoch, operator-approved): SaveData drops goal/core/outcome + conveyor/machine-IO fields; MinLoadableVersion=7; PendingSave/PendingStructure trimmed; RollTerminalCampaignForward deleted; SaveStructureScan signature slimmed. 390 tests green; Play world-creation clean (player + waves live, no exceptions). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,49 +18,11 @@ namespace ProjectM.Tests
|
||||
return (world, e);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DrainFraction_Removes_Floored_Fraction_Of_Each_Row()
|
||||
{
|
||||
var (world, e) = MakeWorld();
|
||||
try
|
||||
{
|
||||
var buf = world.EntityManager.GetBuffer<StorageEntry>(e);
|
||||
StorageMath.Deposit(buf, 2, 100); // Ore
|
||||
StorageMath.Deposit(buf, 4, 51); // Charge
|
||||
StorageMath.DrainFraction(buf, 0.5f);
|
||||
Assert.AreEqual(50, StorageMath.TotalOf(buf, 2), "100 -> floor(50) drained -> 50 left");
|
||||
Assert.AreEqual(26, StorageMath.TotalOf(buf, 4), "51 -> floor(25) drained -> 26 left");
|
||||
}
|
||||
finally { world.Dispose(); }
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DrainFraction_Drops_Rows_That_Hit_Zero_And_Clamps_Above_One()
|
||||
{
|
||||
var (world, e) = MakeWorld();
|
||||
try
|
||||
{
|
||||
var buf = world.EntityManager.GetBuffer<StorageEntry>(e);
|
||||
StorageMath.Deposit(buf, 2, 4);
|
||||
StorageMath.DrainFraction(buf, 1.5f); // clamps to 1.0 -> removes all -> row dropped
|
||||
Assert.AreEqual(0, buf.Length, "a fully-drained row is removed");
|
||||
}
|
||||
finally { world.Dispose(); }
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DrainFraction_Zero_Is_NoOp()
|
||||
{
|
||||
var (world, e) = MakeWorld();
|
||||
try
|
||||
{
|
||||
var buf = world.EntityManager.GetBuffer<StorageEntry>(e);
|
||||
StorageMath.Deposit(buf, 2, 10);
|
||||
StorageMath.DrainFraction(buf, 0f);
|
||||
Assert.AreEqual(10, StorageMath.TotalOf(buf, 2), "0 fraction drains nothing");
|
||||
}
|
||||
finally { world.Dispose(); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
|
||||
Reference in New Issue
Block a user