using Content.Server.Body.Systems; using Content.Server.Nutrition.EntitySystems; using Content.Shared.FixedPoint; using Content.Shared.Whitelist; namespace Content.Server.Body.Components { [RegisterComponent, Access(typeof(StomachSystem), typeof(FoodSystem))] public sealed partial class StomachComponent : Component { public float AccumulatedFrameTime; /// /// How fast should this component update, in seconds? /// [DataField("updateInterval")] public float UpdateInterval = 1.0f; /// /// What solution should this stomach push reagents into, on the body? /// [DataField("bodySolutionName")] public string BodySolutionName = BloodstreamComponent.DefaultChemicalsSolutionName; /// /// Time in seconds between reagents being ingested and them being /// transferred to /// [DataField("digestionDelay")] public float DigestionDelay = 20; /// /// A whitelist for what special-digestible-required foods this stomach is capable of eating. /// [DataField("specialDigestible")] public EntityWhitelist? SpecialDigestible = null; /// /// Used to track how long each reagent has been in the stomach /// [ViewVariables] public readonly List ReagentDeltas = new(); /// /// Used to track quantity changes when ingesting & digesting reagents /// public sealed class ReagentDelta { public readonly string ReagentId; public readonly FixedPoint2 Quantity; public float Lifetime { get; private set; } public ReagentDelta(string reagentId, FixedPoint2 quantity) { ReagentId = reagentId; Quantity = quantity; Lifetime = 0.0f; } public void Increment(float delta) => Lifetime += delta; } } }