Solution Entities (#21916)
* Creates Content.Shared.Chemistry.Solutions Copies Solution class to new namespace Obsoletes old Solution class * Switches over to the Solutions.Solution Solution * Creates Content.Shared.Chemistry.Containers Copies relevant components/systems to the new namespace Obsoletes old versions * Switches over to the Containers.XYZ namespace * Creates SolutionSystem and obsoletes old SolutionContainerSystem methods * Start using SolutionSystem for Solution manipulation * EnumerateSolutions * Move TryGetMixableSolution * Move EnsureSolution to Server * Create Solution Entities * Stop using obsolete solution system methods * Fix prototype component tests * Add using ..Audio.Systems; back * Wrap solution container slots in ContainerSlots * Actually add the slot to the solution container map * Dirty SolutionContainerComponent when ensuring solutions * Revert namespace changes * Remerge SolutionSystem and SolutionContainerSystem * SolutionContainerManagerComponent refactor * Avoid wrapping necessary code in DebugTools.Assert as it is removed when compiling for release * Readd examine reagent sorting * Fix errors * Poke tests * Fix solution names not being applied * Fix WoolyComponent including statement * Fix merge skew * Fix compile errors * Make reactions use solntities * Reindent solution class namespace * Field attribute changes * AutoGenerateComponentState for SolutionContainerComponent * SolutionContainerComponent -> ContainedSolutionComponent * ref ReactionAttemptEvent * Denetwork preinit solutions * Misc 1 * Nullable TryGetSolution out vars * Cache associated solutions * Fix merge skew * Use explicit regions in SharedSolutionContainerSystem.Capabilities * Add debug assert * Use explicit regions in SharedSolutionContainerSystem.Relay + ref SolutionContainerChangedEvent * ContainedSolutionComponent.Name -> ContainedSolutionComponent.ContainerName * SolutionComponent doc comments * Implicit DataField names and property purge * ReagentEffect DataField names * Local variables for readability * Sort using statements + Entity<T> event handlers * Fix compile erros * Fix compile errors --------- Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
This commit is contained in:
@@ -1,17 +1,16 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.Chemistry.Containers.EntitySystems;
|
||||
using Content.Server.Fluids.EntitySystems;
|
||||
using Content.Server.Forensics;
|
||||
using Content.Server.Popups;
|
||||
using Content.Server.Stunnable;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Content.Shared.Chemistry.EntitySystems;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Nutrition.Components;
|
||||
using Content.Shared.Nutrition.EntitySystems;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Robust.Server.Audio;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
@@ -59,29 +58,32 @@ namespace Content.Server.Medical
|
||||
// Empty the stomach out into it
|
||||
foreach (var stomach in stomachList)
|
||||
{
|
||||
if (_solutionContainer.TryGetSolution(stomach.Comp.Owner, StomachSystem.DefaultSolutionName,
|
||||
out var sol))
|
||||
if (_solutionContainer.ResolveSolution(stomach.Comp.Owner, StomachSystem.DefaultSolutionName, ref stomach.Comp.Solution, out var sol))
|
||||
{
|
||||
solution.AddSolution(sol, _proto);
|
||||
sol.RemoveAllSolution();
|
||||
_solutionContainer.UpdateChemicals(stomach.Comp.Owner, sol);
|
||||
_solutionContainer.UpdateChemicals(stomach.Comp.Solution.Value);
|
||||
}
|
||||
}
|
||||
// Adds a tiny amount of the chem stream from earlier along with vomit
|
||||
if (TryComp<BloodstreamComponent>(uid, out var bloodStream))
|
||||
{
|
||||
var chemMultiplier = 0.1;
|
||||
var vomitMultiplier = 0.9;
|
||||
const float chemMultiplier = 0.1f;
|
||||
|
||||
// Makes a vomit solution the size of 90% of the chemicals removed from the chemstream
|
||||
var vomitAmount = new Solution("Vomit", solutionSize * vomitMultiplier);
|
||||
var vomitAmount = solutionSize;
|
||||
|
||||
// Takes 10% of the chemicals removed from the chem stream
|
||||
var vomitChemstreamAmount = _solutionContainer.SplitSolution(uid, bloodStream.ChemicalSolution, solutionSize * chemMultiplier);
|
||||
if (_solutionContainer.ResolveSolution(uid, bloodStream.ChemicalSolutionName, ref bloodStream.ChemicalSolution))
|
||||
{
|
||||
var vomitChemstreamAmount = _solutionContainer.SplitSolution(bloodStream.ChemicalSolution.Value, vomitAmount);
|
||||
vomitChemstreamAmount.ScaleSolution(chemMultiplier);
|
||||
solution.AddSolution(vomitChemstreamAmount, _proto);
|
||||
|
||||
_solutionContainer.SplitSolution(uid, bloodStream.ChemicalSolution, solutionSize * vomitMultiplier);
|
||||
solution.AddSolution(vomitAmount, _proto);
|
||||
solution.AddSolution(vomitChemstreamAmount, _proto);
|
||||
vomitAmount -= (float) vomitChemstreamAmount.Volume;
|
||||
}
|
||||
|
||||
// Makes a vomit solution the size of 90% of the chemicals removed from the chemstream
|
||||
solution.AddReagent("Vomit", vomitAmount); // TODO: Dehardcode vomit prototype
|
||||
}
|
||||
|
||||
if (_puddle.TrySpillAt(uid, solution, out var puddle, false))
|
||||
|
||||
Reference in New Issue
Block a user