Remove IActionBlocker.CanMove (#4449)

* Remove IActionBlocker.CanMove

Ported the remainders over to using MovementAttemptEvent which should also help make mob movement a bit faster.

* Make that check faster
This commit is contained in:
metalgearsloth
2021-08-10 10:34:01 +10:00
committed by GitHub
parent 0f5f9a7f38
commit b2322864e9
19 changed files with 80 additions and 54 deletions

View File

@@ -0,0 +1,9 @@
using Content.Shared.Climbing;
namespace Content.Client.Climbing
{
public sealed class ClimbingSystem : SharedClimbSystem
{
}
}

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using Content.Server.Climbing.Components;
using Content.Shared.Climbing;
using Content.Shared.GameTicking;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
@@ -8,7 +9,7 @@ using Robust.Shared.GameObjects;
namespace Content.Server.Climbing
{
[UsedImplicitly]
internal sealed class ClimbSystem : EntitySystem
internal sealed class ClimbSystem : SharedClimbSystem
{
private readonly HashSet<ClimbingComponent> _activeClimbers = new();

View File

@@ -41,7 +41,7 @@ namespace Content.Server.Climbing.Components
}
}
protected override bool OwnerIsTransitioning
public override bool OwnerIsTransitioning
{
get => base.OwnerIsTransitioning;
set

View File

@@ -25,16 +25,6 @@ namespace Content.Shared.ActionBlocker
var ev = new MovementAttemptEvent(entity);
RaiseLocalEvent(entity.Uid, ev);
foreach (var blocker in entity.GetAllComponents<IActionBlocker>())
{
if (!blocker.CanMove())
{
ev.Cancel();
break;
}
}
return !ev.Cancelled;
}

View File

@@ -10,9 +10,6 @@ namespace Content.Shared.ActionBlocker
[Obsolete("Use events instead")]
public interface IActionBlocker
{
[Obsolete("Use MoveAttemptEvent instead")]
bool CanMove() => true;
[Obsolete("Use InteractAttemptEvent instead")]
bool CanInteract() => true;

View File

@@ -36,11 +36,6 @@ namespace Content.Shared.Buckle.Components
public abstract bool TryBuckle(IEntity? user, IEntity to);
bool IActionBlocker.CanMove()
{
return !Buckled;
}
bool IActionBlocker.CanChangeDirection()
{
return !Buckled;

View File

@@ -1,4 +1,5 @@
using Content.Shared.Buckle.Components;
using Content.Shared.Movement;
using Content.Shared.Standing;
using Content.Shared.Throwing;
using Robust.Shared.GameObjects;
@@ -15,6 +16,13 @@ namespace Content.Shared.Buckle
SubscribeLocalEvent<SharedBuckleComponent, DownAttemptEvent>(HandleDown);
SubscribeLocalEvent<SharedBuckleComponent, StandAttemptEvent>(HandleStand);
SubscribeLocalEvent<SharedBuckleComponent, ThrowPushbackAttemptEvent>(HandleThrowPushback);
SubscribeLocalEvent<SharedBuckleComponent, MovementAttemptEvent>(HandleMove);
}
private void HandleMove(EntityUid uid, SharedBuckleComponent component, MovementAttemptEvent args)
{
if (component.Buckled)
args.Cancel();
}
private void HandleStand(EntityUid uid, SharedBuckleComponent component, StandAttemptEvent args)

View File

@@ -0,0 +1,20 @@
using Content.Shared.Movement;
using Robust.Shared.GameObjects;
namespace Content.Shared.Climbing
{
public abstract class SharedClimbSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SharedClimbingComponent, MovementAttemptEvent>(HandleMoveAttempt);
}
private void HandleMoveAttempt(EntityUid uid, SharedClimbingComponent component, MovementAttemptEvent args)
{
if (component.OwnerIsTransitioning)
args.Cancel();
}
}
}

View File

@@ -29,10 +29,8 @@ namespace Content.Shared.Climbing
}
}
bool IActionBlocker.CanMove() => !OwnerIsTransitioning;
[ViewVariables]
protected virtual bool OwnerIsTransitioning
public virtual bool OwnerIsTransitioning
{
get => _ownerIsTransitioning;
set

View File

@@ -14,8 +14,6 @@ namespace Content.Shared.Cuffs.Components
{
public override string Name => "Cuffable";
[ComponentDependency] private readonly SharedPullableComponent? _pullable = default!;
[ViewVariables]
public bool CanStillInteract { get; set; } = true;
@@ -28,8 +26,6 @@ namespace Content.Shared.Cuffs.Components
bool IActionBlocker.CanAttack() => CanStillInteract;
bool IActionBlocker.CanEquip() => CanStillInteract;
bool IActionBlocker.CanUnequip() => CanStillInteract;
bool IActionBlocker.CanMove() => _pullable == null || !_pullable.BeingPulled || CanStillInteract;
#endregion
[Serializable, NetSerializable]

View File

@@ -1,4 +1,5 @@
using Content.Shared.Cuffs.Components;
using Content.Shared.Movement;
using Content.Shared.Pulling.Components;
using Robust.Shared.GameObjects;
@@ -10,6 +11,15 @@ namespace Content.Shared.Cuffs
{
base.Initialize();
SubscribeLocalEvent<SharedCuffableComponent, StopPullingEvent>(HandleStopPull);
SubscribeLocalEvent<SharedCuffableComponent, MovementAttemptEvent>(HandleMoveAttempt);
}
private void HandleMoveAttempt(EntityUid uid, SharedCuffableComponent component, MovementAttemptEvent args)
{
if (component.CanStillInteract || !ComponentManager.TryGetComponent(uid, out SharedPullableComponent? pullable) || !pullable.BeingPulled)
return;
args.Cancel();
}
private void HandleStopPull(EntityUid uid, SharedCuffableComponent component, StopPullingEvent args)

View File

@@ -338,11 +338,6 @@ namespace Content.Shared.MobState.Components
return CurrentState?.CanInteract() ?? true;
}
bool IActionBlocker.CanMove()
{
return CurrentState?.CanMove() ?? true;
}
bool IActionBlocker.CanUse()
{
return CurrentState?.CanUse() ?? true;

View File

@@ -1,4 +1,6 @@
using Content.Shared.MobState.Components;
using Content.Shared.MobState.State;
using Content.Shared.Movement;
using Content.Shared.Pulling.Events;
using Robust.Shared.GameObjects;
@@ -11,6 +13,7 @@ namespace Content.Shared.MobState.EntitySystems
base.Initialize();
SubscribeLocalEvent<SharedMobStateComponent, StartPullAttemptEvent>(OnStartPullAttempt);
SubscribeLocalEvent<SharedMobStateComponent, MovementAttemptEvent>(OnMoveAttempt);
}
private void OnStartPullAttempt(EntityUid uid, SharedMobStateComponent component, StartPullAttemptEvent args)
@@ -18,5 +21,18 @@ namespace Content.Shared.MobState.EntitySystems
if(component.IsIncapacitated())
args.Cancel();
}
private void OnMoveAttempt(EntityUid uid, SharedMobStateComponent component, MovementAttemptEvent args)
{
switch (component.CurrentState)
{
case SharedCriticalMobState:
case SharedDeadMobState:
args.Cancel();
return;
default:
return;
}
}
}
}

View File

@@ -39,11 +39,6 @@ namespace Content.Shared.MobState.State
return true;
}
public virtual bool CanMove()
{
return true;
}
public virtual bool CanUse()
{
return true;

View File

@@ -41,11 +41,6 @@ namespace Content.Shared.MobState.State
return false;
}
public override bool CanMove()
{
return false;
}
public override bool CanUse()
{
return false;

View File

@@ -49,11 +49,6 @@ namespace Content.Shared.MobState.State
return false;
}
public override bool CanMove()
{
return false;
}
public override bool CanUse()
{
return false;

View File

@@ -27,11 +27,6 @@ namespace Content.Shared.MobState.State
return true;
}
public override bool CanMove()
{
return true;
}
public override bool CanUse()
{
return true;

View File

@@ -323,8 +323,6 @@ namespace Content.Shared.Stunnable
}
#region ActionBlockers
public bool CanMove() => (!Stunned);
public bool CanInteract() => (!Stunned);
public bool CanUse() => (!Stunned);

View File

@@ -1,3 +1,4 @@
using Content.Shared.Movement;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
@@ -6,6 +7,18 @@ namespace Content.Shared.Stunnable
[UsedImplicitly]
internal sealed class StunSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SharedStunnableComponent, MovementAttemptEvent>(HandleMoveAttempt);
}
private void HandleMoveAttempt(EntityUid uid, SharedStunnableComponent component, MovementAttemptEvent args)
{
if (component.Stunned)
args.Cancel();
}
public override void Update(float frameTime)
{
base.Update(frameTime);