using Content.Shared.Hands;
using Content.Shared.Interaction.Components;
using Content.Shared.Interaction.Events;
using Content.Shared.Item;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events;
namespace Content.Shared.Interaction;
// TODO deduplicate with AdminFrozenComponent
///
/// Handles , which prevents various
/// kinds of movement and interactions when attached to an entity.
///
public partial class SharedInteractionSystem
{
private void InitializeBlocking()
{
SubscribeLocalEvent(OnMoveAttempt);
SubscribeLocalEvent(CancelEvent);
SubscribeLocalEvent(CancelInteractEvent);
SubscribeLocalEvent(CancelEvent);
SubscribeLocalEvent(CancelEvent);
SubscribeLocalEvent(CancelEvent);
SubscribeLocalEvent(OnBlockingStartup);
SubscribeLocalEvent(OnBlockingShutdown);
}
private void CancelInteractEvent(Entity ent, ref InteractionAttemptEvent args)
{
if (ent.Comp.BlockInteraction)
args.Cancelled = true;
}
private void OnMoveAttempt(EntityUid uid, BlockMovementComponent component, UpdateCanMoveEvent args)
{
// If we're relaying then don't cancel.
if (HasComp(uid))
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);
}
}