From 44657522f0ae6af85bac337c67be29442a8742db Mon Sep 17 00:00:00 2001 From: Kara Date: Sat, 20 May 2023 20:05:22 -0700 Subject: [PATCH] Puddle drink fixes (#16661) --- .../Nutrition/Components/DrinkComponent.cs | 3 +++ .../Nutrition/EntitySystems/DrinkSystem.cs | 23 ++++++++++++++----- .../Prototypes/Entities/Effects/puddle.yml | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Content.Server/Nutrition/Components/DrinkComponent.cs b/Content.Server/Nutrition/Components/DrinkComponent.cs index 664e648474..2ffaa8a357 100644 --- a/Content.Server/Nutrition/Components/DrinkComponent.cs +++ b/Content.Server/Nutrition/Components/DrinkComponent.cs @@ -42,6 +42,9 @@ namespace Content.Server.Nutrition.Components [DataField("delay")] public float Delay = 1; + [DataField("examinable")] + public bool Examinable = true; + /// /// This is how many seconds it takes to force feed someone this drink. /// diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index d045926170..99e71f1f8d 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -67,17 +67,28 @@ namespace Content.Server.Nutrition.EntitySystems SubscribeLocalEvent(OnDoAfter); } + private FixedPoint2 DrinkVolume(EntityUid uid, DrinkComponent? component = null) + { + if(!Resolve(uid, ref component)) + return FixedPoint2.Zero; + + if (!_solutionContainerSystem.TryGetSolution(uid, component.SolutionName, out var sol)) + return FixedPoint2.Zero; + + return sol.Volume; + } + public bool IsEmpty(EntityUid uid, DrinkComponent? component = null) { if(!Resolve(uid, ref component)) return true; - return _solutionContainerSystem.DrainAvailable(uid) <= 0; + return DrinkVolume(uid, component) <= 0; } private void OnExamined(EntityUid uid, DrinkComponent component, ExaminedEvent args) { - if (!component.Opened || !args.IsInDetailsRange) + if (!component.Opened || !args.IsInDetailsRange || !component.Examinable) return; var color = IsEmpty(uid, component) ? "gray" : "yellow"; @@ -89,7 +100,7 @@ namespace Content.Server.Nutrition.EntitySystems if (TryComp(uid, out var comp)) { //provide exact measurement for beakers - args.Message.AddMarkup($" - {Loc.GetString("drink-component-on-examine-exact-volume", ("amount", _solutionContainerSystem.DrainAvailable(uid)))}"); + args.Message.AddMarkup($" - {Loc.GetString("drink-component-on-examine-exact-volume", ("amount", DrinkVolume(uid, component)))}"); } else { @@ -160,7 +171,7 @@ namespace Content.Server.Nutrition.EntitySystems component.Opened = true; UpdateAppearance(component); - var solution = _solutionContainerSystem.Drain(uid, interactions, interactions.Volume); + var solution = _solutionContainerSystem.SplitSolution(uid, interactions, interactions.Volume); _puddleSystem.TrySpillAt(uid, solution, out _); _audio.PlayPvs(_audio.GetSound(component.BurstSound), uid, AudioParams.Default.WithVolume(-4)); @@ -203,7 +214,7 @@ namespace Content.Server.Nutrition.EntitySystems return; } - var drainAvailable = _solutionContainerSystem.DrainAvailable((component).Owner); + var drainAvailable = DrinkVolume((component.Owner), component); _appearanceSystem.SetData(component.Owner, FoodVisuals.Visual, drainAvailable.Float(), appearance); _appearanceSystem.SetData(component.Owner, DrinkCanStateVisual.Opened, component.Opened, appearance); } @@ -311,7 +322,7 @@ namespace Content.Server.Nutrition.EntitySystems return; var transferAmount = FixedPoint2.Min(component.TransferAmount, solution.Volume); - var drained = _solutionContainerSystem.Drain(uid, solution, transferAmount); + var drained = _solutionContainerSystem.SplitSolution(uid, solution, transferAmount); var forceDrink = args.User != args.Target; args.Handled = true; diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index ebdbdbf046..b9d869e01d 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -121,3 +121,4 @@ delay: 3 transferAmount: 1 solution: puddle + examinable: false