Files
tbd-station-14/Content.Server/_Offbrand/EntityEffects/MetaboliteThresholdSystem.cs
Janet Blackquill 5fa17e22a1 De-MPL Offbrand
2025-09-27 22:43:24 -04:00

51 lines
1.5 KiB
C#

using Content.Server.Body.Components;
using Content.Shared._Offbrand.EntityEffects;
using Content.Shared.EntityEffects;
using Content.Shared.FixedPoint;
namespace Content.Server._Offbrand.EntityEffects;
public sealed class MetaboliteThresholdSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CheckEntityEffectConditionEvent<MetaboliteThreshold>>(OnCheckMetaboliteThreshold);
}
private void OnCheckMetaboliteThreshold(ref CheckEntityEffectConditionEvent<MetaboliteThreshold> args)
{
if (args.Args is not EntityEffectReagentArgs reagentArgs)
throw new NotImplementedException();
var reagent = args.Condition.Reagent;
if (reagent == null)
reagent = reagentArgs.Reagent?.ID;
if (reagent is not { } metaboliteReagent)
{
args.Result = true;
return;
}
if (!TryComp<MetabolizerComponent>(reagentArgs.OrganEntity, out var metabolizer))
{
args.Result = true;
return;
}
var metabolites = metabolizer.Metabolites;
var quant = FixedPoint2.Zero;
metabolites.TryGetValue(metaboliteReagent, out quant);
if (args.Condition.IncludeBloodstream && reagentArgs.Source != null)
{
quant += reagentArgs.Source.GetTotalPrototypeQuantity(metaboliteReagent);
}
args.Result = quant >= args.Condition.Min && quant <= args.Condition.Max;
}
}