EB-2: felt spend - turrets burn a shared Charge pool, ledger-fed Fabricator mints it from Ore
Mined Ore now has an ongoing sink: a ledger-fed Fabricator converts Ore->Charge (1 Ore -> 3 Charge / 30t) and turrets spend Charge per shot, soft-failing (no shot, no cooldown burn) when the shared pool runs dry. - ResourceId.Charge=4 rides the existing [GhostField] StorageEntry ledger (no new wire). - TurretFireSystem: single ledger resolve + atomic spend / soft-fail / partial-refund. - Fabricator.InputFromLedger (byte, server-only) feeds input from the shared ledger, read live in-loop so two machines split a finite pool; both modes deposit to ledger. - HudSystem: violet Charge chip + global quiet-turret cue when siege && Charge==0. - StorageMath.TotalOf backs the affordability read; catalog re-enables the Fabricator (4 entries). See DR-033. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -58,5 +58,18 @@ namespace ProjectM.Simulation
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>Total count of <paramref name="itemId"/> across the buffer (0 if absent / itemId 0). EB-2 ledger
|
||||
/// affordability read; mirrors MachineSlotMath.TotalOf. Pure, non-generic, Burst-safe.</summary>
|
||||
public static int TotalOf(DynamicBuffer<StorageEntry> buffer, ushort itemId)
|
||||
{
|
||||
if (itemId == 0)
|
||||
return 0;
|
||||
int total = 0;
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
if (buffer[i].ItemId == itemId)
|
||||
total += buffer[i].Count;
|
||||
return total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user