Make the material ejection control completely generic (#23308)

* Finish decoupling material ejection from lathes

* commented
This commit is contained in:
Nemanja
2024-01-01 02:16:25 -05:00
committed by GitHub
parent 10c09c7655
commit 2b01899d63
12 changed files with 282 additions and 166 deletions

View File

@@ -18,6 +18,11 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
/// <summary>
/// Default volume for a sheet if the material's entity prototype has no material composition.
/// </summary>
private const int DefaultSheetVolume = 100;
/// <inheritdoc/>
public override void Initialize()
{
@@ -249,4 +254,17 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
return;
args.Handled = TryInsertMaterialEntity(args.User, args.Used, uid, component);
}
public int GetSheetVolume(MaterialPrototype material)
{
if (material.StackEntity == null)
return DefaultSheetVolume;
var proto = _prototype.Index<EntityPrototype>(material.StackEntity);
if (!proto.TryGetComponent<PhysicalCompositionComponent>(out var composition))
return DefaultSheetVolume;
return composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == material.ID).Value;
}
}