using Content.Server.Body.Systems; using Content.Server.Nutrition.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Reagent; 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] public float UpdateInterval = 1.0f; /// /// The solution inside of this stomach this transfers reagents to the body. /// [DataField] public Entity? Solution = null; /// /// What solution should this stomach push reagents into, on the body? /// [DataField] public string BodySolutionName = BloodstreamComponent.DefaultChemicalsSolutionName; /// /// Time in seconds between reagents being ingested and them being /// transferred to /// [DataField] public float DigestionDelay = 20; /// /// A whitelist for what special-digestible-required foods this stomach is capable of eating. /// [DataField] 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 ReagentQuantity ReagentQuantity; public float Lifetime { get; private set; } public ReagentDelta(ReagentQuantity reagentQuantity) { ReagentQuantity = reagentQuantity; Lifetime = 0.0f; } public void Increment(float delta) => Lifetime += delta; } } }