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); } }