diff --git a/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs b/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs index c43149b88f..9fb4bc398a 100644 --- a/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs +++ b/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs @@ -1,34 +1,11 @@ -using System; -using Content.Server.Explosion.EntitySystems; -using Content.Shared.Interaction; -using Content.Shared.Trigger; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; +using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; namespace Content.Server.Explosion.Components { - [RegisterComponent] - public class OnUseTimerTriggerComponent : Component, IUse + [RegisterComponent, ComponentProtoName("OnUseTimerTrigger")] + public class OnUseTimerTriggerComponent : Component { - public override string Name => "OnUseTimerTrigger"; - - [DataField("delay")] - private float _delay = 0f; - - // TODO: Need to split this out so it's a generic "OnUseTimerTrigger" component. - public void Trigger(EntityUid user) - { - if (IoCManager.Resolve().TryGetComponent(Owner, out AppearanceComponent? appearance)) - appearance.SetData(TriggerVisuals.VisualState, TriggerVisualState.Primed); - - EntitySystem.Get().HandleTimerTrigger(TimeSpan.FromSeconds(_delay), Owner, user); - } - - bool IUse.UseEntity(UseEntityEventArgs eventArgs) - { - Trigger(eventArgs.User); - return true; - } + [DataField("delay")] public float Delay = 0f; } } diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs new file mode 100644 index 0000000000..b37868c1c8 --- /dev/null +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs @@ -0,0 +1,32 @@ +using System; +using Content.Server.Explosion.Components; +using Content.Shared.Interaction; +using Content.Shared.Trigger; +using Robust.Shared.GameObjects; + +namespace Content.Server.Explosion.EntitySystems; + +public sealed partial class TriggerSystem +{ + private void InitializeOnUse() + { + SubscribeLocalEvent(OnTimerUse); + } + + private void OnTimerUse(EntityUid uid, OnUseTimerTriggerComponent component, UseInHandEvent args) + { + if (args.Handled) return; + + Trigger(uid, args.User, component); + args.Handled = true; + } + + // TODO: Need to split this out so it's a generic "OnUseTimerTrigger" component. + private void Trigger(EntityUid uid, EntityUid user, OnUseTimerTriggerComponent component) + { + if (TryComp(uid, out var appearance)) + appearance.SetData(TriggerVisuals.VisualState, TriggerVisualState.Primed); + + HandleTimerTrigger(TimeSpan.FromSeconds(component.Delay), uid, user); + } +} diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index ce20a1d209..5d1b5e5c3b 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -35,7 +35,7 @@ namespace Content.Server.Explosion.EntitySystems } [UsedImplicitly] - public sealed class TriggerSystem : EntitySystem + public sealed partial class TriggerSystem : EntitySystem { [Dependency] private readonly ExplosionSystem _explosions = default!; [Dependency] private readonly FlashSystem _flashSystem = default!; @@ -43,6 +43,9 @@ namespace Content.Server.Explosion.EntitySystems public override void Initialize() { base.Initialize(); + + InitializeOnUse(); + SubscribeLocalEvent(HandleCollide); SubscribeLocalEvent(HandleDeleteTrigger);