-using Content.Shared.Construction.Components;
using Content.Shared.Eye;
using Content.Shared.SubFloor;
using Robust.Server.Player;
using Robust.Shared.Enums;
-using Robust.Shared.Map.Components;
using Robust.Shared.Player;
namespace Content.Server.SubFloor;
public override void Initialize()
{
base.Initialize();
- SubscribeLocalEvent<SubFloorHideComponent, AnchorAttemptEvent>(OnAnchorAttempt);
- SubscribeLocalEvent<SubFloorHideComponent, UnanchorAttemptEvent>(OnUnanchorAttempt);
SubscribeNetworkEvent<ShowSubfloorRequestEvent>(OnShowSubfloor);
SubscribeLocalEvent<GetVisMaskEvent>(OnGetVisibility);
Value = ev.Value,
}, args.SenderSession);
}
-
- private void OnAnchorAttempt(EntityUid uid, SubFloorHideComponent component, AnchorAttemptEvent args)
- {
- // No teleporting entities through floor tiles when anchoring them.
- var xform = Transform(uid);
-
- if (TryComp<MapGridComponent>(xform.GridUid, out var grid)
- && HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates)))
- {
- args.Cancel();
- }
- }
-
- private void OnUnanchorAttempt(EntityUid uid, SubFloorHideComponent component, UnanchorAttemptEvent args)
- {
- // No un-anchoring things under the floor. Only required for something like vents, which are still interactable
- // despite being partially under the floor.
- if (component.IsUnderCover)
- args.Cancel();
- }
}
using Content.Shared.Audio;
+using Content.Shared.Construction.Components;
using Content.Shared.Explosion;
using Content.Shared.Eye;
using Content.Shared.Interaction.Events;
using Content.Shared.Maps;
+using Content.Shared.Popups;
using JetBrains.Annotations;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
[Dependency] protected readonly SharedMapSystem Map = default!;
[Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
[Dependency] private readonly SharedVisibilitySystem _visibility = default!;
+ [Dependency] protected readonly SharedPopupSystem _popup = default!;
private EntityQuery<SubFloorHideComponent> _hideQuery;
SubscribeLocalEvent<SubFloorHideComponent, GettingInteractedWithAttemptEvent>(OnInteractionAttempt);
SubscribeLocalEvent<SubFloorHideComponent, GettingAttackedAttemptEvent>(OnAttackAttempt);
SubscribeLocalEvent<SubFloorHideComponent, GetExplosionResistanceEvent>(OnGetExplosionResistance);
+ SubscribeLocalEvent<SubFloorHideComponent, AnchorAttemptEvent>(OnAnchorAttempt);
+ SubscribeLocalEvent<SubFloorHideComponent, UnanchorAttemptEvent>(OnUnanchorAttempt);
+ }
+
+ private void OnAnchorAttempt(EntityUid uid, SubFloorHideComponent component, AnchorAttemptEvent args)
+ {
+ // No teleporting entities through floor tiles when anchoring them.
+ var xform = Transform(uid);
+
+ if (TryComp<MapGridComponent>(xform.GridUid, out var grid)
+ && HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates)))
+ {
+ _popup.PopupClient(Loc.GetString("subfloor-anchor-failure", ("entity", uid)), args.User);
+ args.Cancel();
+ }
+ }
+
+ private void OnUnanchorAttempt(EntityUid uid, SubFloorHideComponent component, UnanchorAttemptEvent args)
+ {
+ // No un-anchoring things under the floor. Only required for something like vents, which are still interactable
+ // despite being partially under the floor.
+ if (component.IsUnderCover)
+ {
+ _popup.PopupClient(Loc.GetString("subfloor-unanchor-failure", ("entity", uid)), args.User);
+ args.Cancel();
+ }
}
private void OnGetExplosionResistance(EntityUid uid, SubFloorHideComponent component, ref GetExplosionResistanceEvent args)