using Content.Shared.Hands; using Content.Shared.Interaction.Components; using Content.Shared.Interaction.Events; using Content.Shared.Item; using Content.Shared.Movement.Events; namespace Content.Shared.Interaction; /// /// Handles , which prevents various /// kinds of movement and interactions when attached to an entity. /// public partial class SharedInteractionSystem { public void InitializeBlocking() { SubscribeLocalEvent(OnMoveAttempt); SubscribeLocalEvent(CancelEvent); SubscribeLocalEvent(CancelEvent); SubscribeLocalEvent(CancelEvent); SubscribeLocalEvent(CancelEvent); SubscribeLocalEvent(CancelEvent); SubscribeLocalEvent(OnBlockingStartup); SubscribeLocalEvent(OnBlockingShutdown); } private void OnMoveAttempt(EntityUid uid, BlockMovementComponent component, UpdateCanMoveEvent args) { if (component.LifeStage > ComponentLifeStage.Running) return; args.Cancel(); // no more scurrying around } private void CancelEvent(EntityUid uid, BlockMovementComponent component, CancellableEntityEventArgs args) { args.Cancel(); } private void OnBlockingStartup(EntityUid uid, BlockMovementComponent component, ComponentStartup args) { _actionBlockerSystem.UpdateCanMove(uid); } private void OnBlockingShutdown(EntityUid uid, BlockMovementComponent component, ComponentShutdown args) { _actionBlockerSystem.UpdateCanMove(uid); } }