| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- using Content.Shared.Chemistry.Components;
- using Content.Shared.Kitchen.Components;
- using Content.Shared.Chemistry.Components.SolutionManager;
- using Content.Shared.Chemistry.Reaction;
- using Content.Shared.FixedPoint;
- using Robust.Shared.Utility;
- using System.Diagnostics.CodeAnalysis;
- using System.Text;
- namespace Content.Shared.Chemistry.EntitySystems;
- public abstract partial class SharedSolutionContainerSystem
- {
- #region Solution Accessors
- public bool TryGetRefillableSolution(Entity<RefillableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetDrainableSolution(Entity<DrainableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetExtractableSolution(Entity<ExtractableComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.GrindableSolution, out soln, out solution);
- }
- public bool TryGetDumpableSolution(Entity<DumpableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetDrawableSolution(Entity<DrawableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetInjectableSolution(Entity<InjectableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetFitsInDispenser(Entity<FitsInDispenserComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- public bool TryGetMixableSolution(Entity<MixableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
- {
- if (!Resolve(entity, ref entity.Comp1, logMissing: false))
- {
- (soln, solution) = (default!, null);
- return false;
- }
- return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
- }
- #endregion Solution Accessors
- #region Solution Modifiers
- public void Refill(Entity<RefillableSolutionComponent?> entity, Entity<SolutionComponent> soln, Solution refill)
- {
- if (!Resolve(entity, ref entity.Comp, logMissing: false))
- return;
- AddSolution(soln, refill);
- }
- public void Inject(Entity<InjectableSolutionComponent?> entity, Entity<SolutionComponent> soln, Solution inject)
- {
- if (!Resolve(entity, ref entity.Comp, logMissing: false))
- return;
- AddSolution(soln, inject);
- }
- public Solution Drain(Entity<DrainableSolutionComponent?> entity, Entity<SolutionComponent> soln, FixedPoint2 quantity)
- {
- if (!Resolve(entity, ref entity.Comp, logMissing: false))
- return new();
- return SplitSolution(soln, quantity);
- }
- public Solution Draw(Entity<DrawableSolutionComponent?> entity, Entity<SolutionComponent> soln, FixedPoint2 quantity)
- {
- if (!Resolve(entity, ref entity.Comp, logMissing: false))
- return new();
- return SplitSolution(soln, quantity);
- }
- #endregion Solution Modifiers
- public float PercentFull(EntityUid uid)
- {
- if (!TryGetDrainableSolution(uid, out _, out var solution) || solution.MaxVolume.Equals(FixedPoint2.Zero))
- return 0;
- return solution.FillFraction * 100;
- }
- #region Static Methods
- public static string ToPrettyString(Solution solution)
- {
- var sb = new StringBuilder();
- if (solution.Name == null)
- sb.Append("[");
- else
- sb.Append($"{solution.Name}:[");
- var first = true;
- foreach (var (id, quantity) in solution.Contents)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- sb.Append(", ");
- }
- sb.AppendFormat("{0}: {1}u", id, quantity);
- }
- sb.Append(']');
- return sb.ToString();
- }
- #endregion Static Methods
- }
|