Predict pipe anchoring and unanchroing (#35977)
* yay prediction * Added cool popups * bruh * this is better!
This commit is contained in:
@@ -1,9 +1,7 @@
|
|||||||
using Content.Shared.Construction.Components;
|
|
||||||
using Content.Shared.Eye;
|
using Content.Shared.Eye;
|
||||||
using Content.Shared.SubFloor;
|
using Content.Shared.SubFloor;
|
||||||
using Robust.Server.Player;
|
using Robust.Server.Player;
|
||||||
using Robust.Shared.Enums;
|
using Robust.Shared.Enums;
|
||||||
using Robust.Shared.Map.Components;
|
|
||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
|
|
||||||
namespace Content.Server.SubFloor;
|
namespace Content.Server.SubFloor;
|
||||||
@@ -18,8 +16,6 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem
|
|||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
SubscribeLocalEvent<SubFloorHideComponent, AnchorAttemptEvent>(OnAnchorAttempt);
|
|
||||||
SubscribeLocalEvent<SubFloorHideComponent, UnanchorAttemptEvent>(OnUnanchorAttempt);
|
|
||||||
SubscribeNetworkEvent<ShowSubfloorRequestEvent>(OnShowSubfloor);
|
SubscribeNetworkEvent<ShowSubfloorRequestEvent>(OnShowSubfloor);
|
||||||
SubscribeLocalEvent<GetVisMaskEvent>(OnGetVisibility);
|
SubscribeLocalEvent<GetVisMaskEvent>(OnGetVisibility);
|
||||||
|
|
||||||
@@ -72,24 +68,4 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem
|
|||||||
Value = ev.Value,
|
Value = ev.Value,
|
||||||
}, args.SenderSession);
|
}, 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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
using Content.Shared.Audio;
|
using Content.Shared.Audio;
|
||||||
|
using Content.Shared.Construction.Components;
|
||||||
using Content.Shared.Explosion;
|
using Content.Shared.Explosion;
|
||||||
using Content.Shared.Eye;
|
using Content.Shared.Eye;
|
||||||
using Content.Shared.Interaction.Events;
|
using Content.Shared.Interaction.Events;
|
||||||
using Content.Shared.Maps;
|
using Content.Shared.Maps;
|
||||||
|
using Content.Shared.Popups;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Map.Components;
|
using Robust.Shared.Map.Components;
|
||||||
@@ -21,6 +23,7 @@ namespace Content.Shared.SubFloor
|
|||||||
[Dependency] protected readonly SharedMapSystem Map = default!;
|
[Dependency] protected readonly SharedMapSystem Map = default!;
|
||||||
[Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
|
[Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
|
||||||
[Dependency] private readonly SharedVisibilitySystem _visibility = default!;
|
[Dependency] private readonly SharedVisibilitySystem _visibility = default!;
|
||||||
|
[Dependency] protected readonly SharedPopupSystem _popup = default!;
|
||||||
|
|
||||||
private EntityQuery<SubFloorHideComponent> _hideQuery;
|
private EntityQuery<SubFloorHideComponent> _hideQuery;
|
||||||
|
|
||||||
@@ -38,6 +41,32 @@ namespace Content.Shared.SubFloor
|
|||||||
SubscribeLocalEvent<SubFloorHideComponent, GettingInteractedWithAttemptEvent>(OnInteractionAttempt);
|
SubscribeLocalEvent<SubFloorHideComponent, GettingInteractedWithAttemptEvent>(OnInteractionAttempt);
|
||||||
SubscribeLocalEvent<SubFloorHideComponent, GettingAttackedAttemptEvent>(OnAttackAttempt);
|
SubscribeLocalEvent<SubFloorHideComponent, GettingAttackedAttemptEvent>(OnAttackAttempt);
|
||||||
SubscribeLocalEvent<SubFloorHideComponent, GetExplosionResistanceEvent>(OnGetExplosionResistance);
|
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)
|
private void OnGetExplosionResistance(EntityUid uid, SubFloorHideComponent component, ref GetExplosionResistanceEvent args)
|
||||||
|
|||||||
2
Resources/Locale/en-US/subfloor/subfloor.ftl
Normal file
2
Resources/Locale/en-US/subfloor/subfloor.ftl
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
subfloor-anchor-failure = {CAPITALIZE(THE($entity))} can't be anchored here!
|
||||||
|
subfloor-unanchor-failure = {CAPITALIZE(THE($entity))} can't be unanchored here!
|
||||||
Reference in New Issue
Block a user