TriggerOnIngested (#41875)

* init

* nobody will ever know i copy paste

* i hate these names

* comment

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
This commit is contained in:
ScarKy0
2025-12-17 00:45:34 +01:00
committed by GitHub
parent 4aa7a963dc
commit 2ef64bd5cc
2 changed files with 40 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Trigger.Components.Triggers;
/// <summary>
/// Triggers when the owner of this component is ingested, like a pill or food.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class TriggerOnIngestedComponent : BaseTriggerOnXComponent
{
/// <summary>
/// Whether the fed entity is the user.
/// If false, the entity feeding will be the user.
/// </summary>
[DataField, AutoNetworkedField]
public bool EatingIsUser = true;
}

View File

@@ -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<TriggerOnIngestedComponent, IngestedEvent>(OnIngested);
}
private void OnIngested(Entity<TriggerOnIngestedComponent> 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);
}
}