Predict blocking examine + fix blocking breaking persistence (#36619)
* Predict blocking examine No idea why this was blocked. * Fix blocking * remove nullcheck that made no sense * predict popups --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
@@ -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,8 +150,6 @@ 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)
|
||||
{
|
||||
@@ -166,7 +158,7 @@ public sealed partial class BlockingSystem : EntitySystem
|
||||
}
|
||||
|
||||
// Don't allow someone to block if they're not holding the shield
|
||||
if(!_handsSystem.IsHolding(user, item, out _))
|
||||
if (!_handsSystem.IsHolding(user, item, out _))
|
||||
{
|
||||
CantBlockError(user);
|
||||
return false;
|
||||
@@ -196,13 +188,7 @@ public sealed partial class BlockingSystem : EntitySystem
|
||||
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);
|
||||
}
|
||||
}
|
||||
_popupSystem.PopupPredicted(msgUser, msgOther, user, user);
|
||||
|
||||
if (TryComp<PhysicsComponent>(user, out var physicsComponent))
|
||||
{
|
||||
@@ -210,7 +196,7 @@ public sealed partial class BlockingSystem : EntitySystem
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -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<BlockingUserComponent>(user, out var blockingUserComponent)
|
||||
&& TryComp<PhysicsComponent>(user, out var physicsComponent))
|
||||
if (TryComp<BlockingUserComponent>(user, out var blockingUserComponent) && TryComp<PhysicsComponent>(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<ExamineVerb> args)
|
||||
{
|
||||
if (!args.CanInteract || !args.CanAccess || !_net.IsServer)
|
||||
if (!args.CanInteract || !args.CanAccess)
|
||||
return;
|
||||
|
||||
var fraction = component.IsBlocking ? component.ActiveBlockFraction : component.PassiveBlockFraction;
|
||||
|
||||
@@ -16,13 +16,13 @@ public sealed partial class BlockingComponent : Component
|
||||
/// <summary>
|
||||
/// The entity that's blocking
|
||||
/// </summary>
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? User;
|
||||
|
||||
/// <summary>
|
||||
/// Is it currently blocking?
|
||||
/// </summary>
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
[DataField, AutoNetworkedField]
|
||||
public bool IsBlocking;
|
||||
|
||||
/// <summary>
|
||||
@@ -33,7 +33,7 @@ public sealed partial class BlockingComponent : Component
|
||||
/// <summary>
|
||||
/// The shape of the blocking fixture that will be dynamically spawned
|
||||
/// </summary>
|
||||
[DataField("shape"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public IPhysShape Shape = new PhysShapeCircle(0.5f);
|
||||
|
||||
/// <summary>
|
||||
@@ -48,8 +48,8 @@ public sealed partial class BlockingComponent : Component
|
||||
[DataField("activeBlockModifier", required: true)]
|
||||
public DamageModifierSet ActiveBlockDamageModifier = default!;
|
||||
|
||||
[DataField("blockingToggleAction", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string BlockingToggleAction = "ActionToggleBlock";
|
||||
[DataField]
|
||||
public EntProtoId BlockingToggleAction = "ActionToggleBlock";
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? BlockingToggleActionEntity;
|
||||
@@ -57,7 +57,7 @@ public sealed partial class BlockingComponent : Component
|
||||
/// <summary>
|
||||
/// The sound to be played when you get hit while actively blocking
|
||||
/// </summary>
|
||||
[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
|
||||
/// </summary>
|
||||
[DataField("passiveBlockFraction"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float PassiveBlockFraction = 0.5f;
|
||||
|
||||
/// <summary>
|
||||
/// Fraction of original damage shield will take instead of user
|
||||
/// when blocking
|
||||
/// </summary>
|
||||
[DataField("activeBlockFraction"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float ActiveBlockFraction = 1.0f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user