mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-02-15 05:50:54 +01:00
* Physics asserts and Xenoarch fixes * Fix blocking asserts * Alright ready for the test fails * Fix whitespace issues * Fix whitespace * Okay fix whitespace issues for real * Fix test fails * Temp fix * Fix * Whitespace * Added a big ass comment * Right * A * Should work * Debug performance * Mothership * fix test fails real * push * fix --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
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
|
|
/// <summary>
|
|
/// Handles <see cref="BlockMovementComponent"/>, which prevents various
|
|
/// kinds of movement and interactions when attached to an entity.
|
|
/// </summary>
|
|
public partial class SharedInteractionSystem
|
|
{
|
|
private void InitializeBlocking()
|
|
{
|
|
SubscribeLocalEvent<BlockMovementComponent, UpdateCanMoveEvent>(OnMoveAttempt);
|
|
SubscribeLocalEvent<BlockMovementComponent, UseAttemptEvent>(CancelUseEvent);
|
|
SubscribeLocalEvent<BlockMovementComponent, InteractionAttemptEvent>(CancelInteractEvent);
|
|
SubscribeLocalEvent<BlockMovementComponent, DropAttemptEvent>(CancellableInteractEvent);
|
|
SubscribeLocalEvent<BlockMovementComponent, PickupAttemptEvent>(CancellableInteractEvent);
|
|
SubscribeLocalEvent<BlockMovementComponent, ChangeDirectionAttemptEvent>(CancelEvent);
|
|
|
|
SubscribeLocalEvent<BlockMovementComponent, ComponentStartup>(OnBlockingStartup);
|
|
SubscribeLocalEvent<BlockMovementComponent, ComponentShutdown>(OnBlockingShutdown);
|
|
}
|
|
|
|
private void CancelInteractEvent(Entity<BlockMovementComponent> ent, ref InteractionAttemptEvent args)
|
|
{
|
|
if (ent.Comp.BlockInteraction)
|
|
args.Cancelled = true;
|
|
}
|
|
|
|
private void CancelUseEvent(Entity<BlockMovementComponent> ent, ref UseAttemptEvent args)
|
|
{
|
|
if (ent.Comp.BlockUse)
|
|
args.Cancel();
|
|
}
|
|
|
|
private void OnMoveAttempt(EntityUid uid, BlockMovementComponent component, UpdateCanMoveEvent args)
|
|
{
|
|
// If we're relaying then don't cancel.
|
|
if (HasComp<RelayInputMoverComponent>(uid))
|
|
return;
|
|
|
|
args.Cancel(); // no more scurrying around
|
|
}
|
|
|
|
private void CancellableInteractEvent(EntityUid uid, BlockMovementComponent component, CancellableEntityEventArgs args)
|
|
{
|
|
if (component.BlockInteraction)
|
|
args.Cancel();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|