using Content.Shared.Chemistry.Reagent; using Robust.Shared.GameObjects; namespace Content.Shared.Chemistry.Solution.Components { /// /// High-level solution transferring operations like "what happens when a syringe tries to inject this entity." /// /// /// This interface is most often implemented by using /// and setting the appropriate /// public interface ISolutionInteractionsComponent : IComponent { // // INJECTING // /// /// Whether we CAN POTENTIALLY be injected with solutions by items like syringes. /// /// /// /// This should NOT change to communicate behavior like "the container is full". /// Change to 0 for that. /// /// /// If refilling is allowed () you should also always allow injecting. /// /// bool CanInject => false; /// /// The amount of solution space available for injecting. /// ReagentUnit InjectSpaceAvailable => ReagentUnit.Zero; /// /// Actually inject reagents. /// void Inject(Solution solution) { } // // DRAWING // bool CanDraw => false; ReagentUnit DrawAvailable => ReagentUnit.Zero; Solution Draw(ReagentUnit amount) { return new(); } // // REFILLING // bool CanRefill => false; ReagentUnit RefillSpaceAvailable => ReagentUnit.Zero; /// /// The amount that will transfer if something is spilled on the container. /// ReagentUnit MaxSpillRefill => ReagentUnit.Zero; void Refill(Solution solution) { } // // DRAINING // bool CanDrain => false; ReagentUnit DrainAvailable => ReagentUnit.Zero; Solution Drain(ReagentUnit amount) { return new(); } } }