From 2ef64bd5cc761d7864149ce9c30629aed9a6366b Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Wed, 17 Dec 2025 00:45:34 +0100 Subject: [PATCH] TriggerOnIngested (#41875) * init * nobody will ever know i copy paste * i hate these names * comment --------- Co-authored-by: iaada --- .../Triggers/TriggerOnIngestedComponent.cs | 17 ++++++++++++++ .../Systems/TriggerOnIngestedSystem.cs | 23 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Content.Shared/Trigger/Components/Triggers/TriggerOnIngestedComponent.cs create mode 100644 Content.Shared/Trigger/Systems/TriggerOnIngestedSystem.cs diff --git a/Content.Shared/Trigger/Components/Triggers/TriggerOnIngestedComponent.cs b/Content.Shared/Trigger/Components/Triggers/TriggerOnIngestedComponent.cs new file mode 100644 index 0000000000..e8bd920e64 --- /dev/null +++ b/Content.Shared/Trigger/Components/Triggers/TriggerOnIngestedComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Triggers; + +/// +/// Triggers when the owner of this component is ingested, like a pill or food. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TriggerOnIngestedComponent : BaseTriggerOnXComponent +{ + /// + /// Whether the fed entity is the user. + /// If false, the entity feeding will be the user. + /// + [DataField, AutoNetworkedField] + public bool EatingIsUser = true; +} diff --git a/Content.Shared/Trigger/Systems/TriggerOnIngestedSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnIngestedSystem.cs new file mode 100644 index 0000000000..1e199e840e --- /dev/null +++ b/Content.Shared/Trigger/Systems/TriggerOnIngestedSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Nutrition; +using Content.Shared.Trigger.Components.Triggers; + +namespace Content.Shared.Trigger.Systems; + +public sealed partial class TriggerOnIngestedSystem : TriggerOnXSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnIngested); + } + + private void OnIngested(Entity ent, ref IngestedEvent args) + { + // args.Target is the entity being fed, while args.User is the entity doing the feeding. + // Since they are not always equal (feeding someone by force, for example) we use a bool to decide which one is the trigger user. + var user = ent.Comp.EatingIsUser ? args.Target : args.User; + + Trigger.Trigger(ent.Owner, user, ent.Comp.KeyOut); + } +} -- 2.52.0