From 37cd12524e85b6a3b31827e4751a94ca51268694 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Wed, 13 Mar 2024 02:35:48 -0700 Subject: [PATCH] Syringe doafter based on Syringe contents (#25890) Syringe delay based on amount in syringe Co-authored-by: Plykiya --- .../Chemistry/EntitySystems/InjectorSystem.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs b/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs index 40e637615e..e718e14683 100644 --- a/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs @@ -128,9 +128,21 @@ public sealed class InjectorSystem : SharedInjectorSystem return; var actualDelay = MathHelper.Max(injector.Comp.Delay, TimeSpan.FromSeconds(1)); + float amountToInject; + if (injector.Comp.ToggleState == InjectorToggleMode.Draw) + { + // additional delay is based on actual volume left to draw in syringe when smaller than transfer amount + amountToInject = Math.Min(injector.Comp.TransferAmount.Float(), (solution.MaxVolume - solution.Volume).Float()); + } + else + { + // additional delay is based on actual volume left to inject in syringe when smaller than transfer amount + amountToInject = Math.Min(injector.Comp.TransferAmount.Float(), solution.Volume.Float()); + } + + // Injections take 0.5 seconds longer per 5u of possible space/content + actualDelay += TimeSpan.FromSeconds(amountToInject / 10); - // Injections take 0.5 seconds longer per additional 5u - actualDelay += TimeSpan.FromSeconds(injector.Comp.TransferAmount.Float() / injector.Comp.Delay.TotalSeconds - 0.5f); var isTarget = user != target; -- 2.51.2