Mirror speed penalty for worn duffels and hardsuits when in-hand (#22168)

* Add speed penalty for holding hardsuits and duffels

* just inherit from ClothingSpeedModifier

* comment godo
This commit is contained in:
Nemanja
2023-12-06 22:41:29 -05:00
committed by GitHub
parent 6509681f00
commit fb10dff335
11 changed files with 150 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
using Content.Shared.Clothing;
using Content.Shared.Hands;
using Content.Shared.Movement.Systems;
namespace Content.Shared.Item;
/// <summary>
/// This handles <see cref="HeldSpeedModifierComponent"/>
/// </summary>
public sealed class HeldSpeedModifierSystem : EntitySystem
{
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<HeldSpeedModifierComponent, GotEquippedHandEvent>(OnGotEquippedHand);
SubscribeLocalEvent<HeldSpeedModifierComponent, GotUnequippedHandEvent>(OnGotUnequippedHand);
SubscribeLocalEvent<HeldSpeedModifierComponent, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent>>(OnRefreshMovementSpeedModifiers);
}
private void OnGotEquippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotEquippedHandEvent args)
{
_movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
}
private void OnGotUnequippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotUnequippedHandEvent args)
{
_movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
}
private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
{
var walkMod = component.WalkModifier;
var sprintMod = component.SprintModifier;
if (component.MirrorClothingModifier && TryComp<ClothingSpeedModifierComponent>(uid, out var clothingSpeedModifier))
{
walkMod = clothingSpeedModifier.WalkModifier;
sprintMod = clothingSpeedModifier.SprintModifier;
}
args.Args.ModifySpeed(walkMod, sprintMod);
}
}