Added a component to eat bodies for health #8922 (#16345)

This commit is contained in:
PilgrimViis
2023-05-16 00:44:35 +02:00
committed by GitHub
parent 4d66f817b8
commit 832ba7b6f3
8 changed files with 248 additions and 161 deletions

View File

@@ -0,0 +1,51 @@
using Content.Shared.Devour;
using Content.Server.Body.Systems;
using Content.Shared.Humanoid;
using Content.Shared.Chemistry.Components;
using Content.Server.Devour.Components;
using Content.Shared.DoAfter;
using Robust.Shared.Serialization;
namespace Content.Server.Devour;
public sealed class DevourSystem : SharedDevourSystem
{
[Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DevourerComponent, DevourDoAfterEvent>(OnDoAfter);
}
private void OnDoAfter(EntityUid uid, DevourerComponent component, DevourDoAfterEvent args)
{
if (args.Handled || args.Cancelled)
return;
var ichorInjection = new Solution(component.Chemical, component.HealRate);
if (component.FoodPreference == FoodPreference.All ||
(component.FoodPreference == FoodPreference.Humanoid && HasComp<HumanoidAppearanceComponent>(args.Args.Target)))
{
ichorInjection.ScaleSolution(0.5f);
if (component.ShouldStoreDevoured && args.Args.Target is not null)
{
component.Stomach.Insert(args.Args.Target.Value);
}
_bloodstreamSystem.TryAddToChemicals(uid, ichorInjection);
}
//TODO: Figure out a better way of removing structures via devour that still entails standing still and waiting for a DoAfter. Somehow.
//If it's not human, it must be a structure
else if (args.Args.Target != null)
{
QueueDel(args.Args.Target.Value);
}
_audioSystem.PlayPvs(component.SoundDevour, uid);
}
}