diff --git a/Content.Shared/Blocking/BlockingSystem.cs b/Content.Shared/Blocking/BlockingSystem.cs index 594d1baf6c..c920fde13b 100644 --- a/Content.Shared/Blocking/BlockingSystem.cs +++ b/Content.Shared/Blocking/BlockingSystem.cs @@ -13,13 +13,9 @@ using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Toggleable; using Content.Shared.Verbs; -using Robust.Shared.Network; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Content.Shared.Blocking; @@ -35,8 +31,6 @@ public sealed partial class BlockingSystem : EntitySystem [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; - [Dependency] private readonly INetManager _net = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Initialize() { @@ -156,61 +150,53 @@ public sealed partial class BlockingSystem : EntitySystem var msgUser = Loc.GetString("action-popup-blocking-user", ("shield", shieldName)); var msgOther = Loc.GetString("action-popup-blocking-other", ("blockerName", blockerName), ("shield", shieldName)); - if (component.BlockingToggleAction != null) + //Don't allow someone to block if they're not parented to a grid + if (xform.GridUid != xform.ParentUid) { - //Don't allow someone to block if they're not parented to a grid - if (xform.GridUid != xform.ParentUid) - { - CantBlockError(user); - return false; - } + CantBlockError(user); + return false; + } - // Don't allow someone to block if they're not holding the shield - if(!_handsSystem.IsHolding(user, item, out _)) - { - CantBlockError(user); - return false; - } + // Don't allow someone to block if they're not holding the shield + if (!_handsSystem.IsHolding(user, item, out _)) + { + CantBlockError(user); + return false; + } - //Don't allow someone to block if someone else is on the same tile - var playerTileRef = xform.Coordinates.GetTileRef(); - if (playerTileRef != null) + //Don't allow someone to block if someone else is on the same tile + var playerTileRef = xform.Coordinates.GetTileRef(); + if (playerTileRef != null) + { + var intersecting = _lookup.GetLocalEntitiesIntersecting(playerTileRef.Value, 0f); + var mobQuery = GetEntityQuery(); + foreach (var uid in intersecting) { - var intersecting = _lookup.GetLocalEntitiesIntersecting(playerTileRef.Value, 0f); - var mobQuery = GetEntityQuery(); - foreach (var uid in intersecting) + if (uid != user && mobQuery.HasComponent(uid)) { - if (uid != user && mobQuery.HasComponent(uid)) - { - TooCloseError(user); - return false; - } + TooCloseError(user); + return false; } } - - //Don't allow someone to block if they're somehow not anchored. - _transformSystem.AnchorEntity(user, xform); - if (!xform.Anchored) - { - CantBlockError(user); - return false; - } - _actionsSystem.SetToggled(component.BlockingToggleActionEntity, true); - if (_gameTiming.IsFirstTimePredicted) - { - _popupSystem.PopupEntity(msgOther, user, Filter.PvsExcept(user), true); - if(_gameTiming.InPrediction) - _popupSystem.PopupEntity(msgUser, user, user); - } } + //Don't allow someone to block if they're somehow not anchored. + _transformSystem.AnchorEntity(user, xform); + if (!xform.Anchored) + { + CantBlockError(user); + return false; + } + _actionsSystem.SetToggled(component.BlockingToggleActionEntity, true); + _popupSystem.PopupPredicted(msgUser, msgOther, user, user); + if (TryComp(user, out var physicsComponent)) { _fixtureSystem.TryCreateFixture(user, component.Shape, BlockingComponent.BlockFixtureID, hard: true, - collisionLayer: (int) CollisionGroup.WallLayer, + collisionLayer: (int)CollisionGroup.WallLayer, body: physicsComponent); } @@ -223,13 +209,13 @@ public sealed partial class BlockingSystem : EntitySystem private void CantBlockError(EntityUid user) { var msgError = Loc.GetString("action-popup-blocking-user-cant-block"); - _popupSystem.PopupEntity(msgError, user, user); + _popupSystem.PopupClient(msgError, user, user); } private void TooCloseError(EntityUid user) { var msgError = Loc.GetString("action-popup-blocking-user-too-close"); - _popupSystem.PopupEntity(msgError, user, user); + _popupSystem.PopupClient(msgError, user, user); } /// @@ -255,8 +241,7 @@ public sealed partial class BlockingSystem : EntitySystem //If the component blocking toggle isn't null, grab the users SharedBlockingUserComponent and PhysicsComponent //then toggle the action to false, unanchor the user, remove the hard fixture //and set the users bodytype back to their original type - if (component.BlockingToggleAction != null && TryComp(user, out var blockingUserComponent) - && TryComp(user, out var physicsComponent)) + if (TryComp(user, out var blockingUserComponent) && TryComp(user, out var physicsComponent)) { if (xform.Anchored) _transformSystem.Unanchor(user, xform); @@ -264,12 +249,7 @@ public sealed partial class BlockingSystem : EntitySystem _actionsSystem.SetToggled(component.BlockingToggleActionEntity, false); _fixtureSystem.DestroyFixture(user, BlockingComponent.BlockFixtureID, body: physicsComponent); _physics.SetBodyType(user, blockingUserComponent.OriginalBodyType, body: physicsComponent); - if (_gameTiming.IsFirstTimePredicted) - { - _popupSystem.PopupEntity(msgOther, user, Filter.PvsExcept(user), true); - if(_gameTiming.InPrediction) - _popupSystem.PopupEntity(msgUser, user, user); - } + _popupSystem.PopupPredicted(msgUser, msgOther, user, user); } component.IsBlocking = false; @@ -313,7 +293,7 @@ public sealed partial class BlockingSystem : EntitySystem private void OnVerbExamine(EntityUid uid, BlockingComponent component, GetVerbsEvent args) { - if (!args.CanInteract || !args.CanAccess || !_net.IsServer) + if (!args.CanInteract || !args.CanAccess) return; var fraction = component.IsBlocking ? component.ActiveBlockFraction : component.PassiveBlockFraction; diff --git a/Content.Shared/Blocking/Components/BlockingComponent.cs b/Content.Shared/Blocking/Components/BlockingComponent.cs index f869c20679..126b64a459 100644 --- a/Content.Shared/Blocking/Components/BlockingComponent.cs +++ b/Content.Shared/Blocking/Components/BlockingComponent.cs @@ -16,13 +16,13 @@ public sealed partial class BlockingComponent : Component /// /// The entity that's blocking /// - [ViewVariables, AutoNetworkedField] + [DataField, AutoNetworkedField] public EntityUid? User; /// /// Is it currently blocking? /// - [ViewVariables, AutoNetworkedField] + [DataField, AutoNetworkedField] public bool IsBlocking; /// @@ -33,7 +33,7 @@ public sealed partial class BlockingComponent : Component /// /// The shape of the blocking fixture that will be dynamically spawned /// - [DataField("shape"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public IPhysShape Shape = new PhysShapeCircle(0.5f); /// @@ -48,8 +48,8 @@ public sealed partial class BlockingComponent : Component [DataField("activeBlockModifier", required: true)] public DamageModifierSet ActiveBlockDamageModifier = default!; - [DataField("blockingToggleAction", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string BlockingToggleAction = "ActionToggleBlock"; + [DataField] + public EntProtoId BlockingToggleAction = "ActionToggleBlock"; [DataField, AutoNetworkedField] public EntityUid? BlockingToggleActionEntity; @@ -57,7 +57,7 @@ public sealed partial class BlockingComponent : Component /// /// The sound to be played when you get hit while actively blocking /// - [DataField("blockSound")] public SoundSpecifier BlockSound = + [DataField] public SoundSpecifier BlockSound = new SoundPathSpecifier("/Audio/Weapons/block_metal1.ogg") { Params = AudioParams.Default.WithVariation(0.25f) @@ -67,13 +67,13 @@ public sealed partial class BlockingComponent : Component /// Fraction of original damage shield will take instead of user /// when not blocking /// - [DataField("passiveBlockFraction"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float PassiveBlockFraction = 0.5f; /// /// Fraction of original damage shield will take instead of user /// when blocking /// - [DataField("activeBlockFraction"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float ActiveBlockFraction = 1.0f; }