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