HeldSpeedModifierSystem.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Content.Shared.Clothing;
  2. using Content.Shared.Hands;
  3. using Content.Shared.Movement.Systems;
  4. namespace Content.Shared.Item;
  5. /// <summary>
  6. /// This handles <see cref="HeldSpeedModifierComponent"/>
  7. /// </summary>
  8. public sealed class HeldSpeedModifierSystem : EntitySystem
  9. {
  10. [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
  11. /// <inheritdoc/>
  12. public override void Initialize()
  13. {
  14. SubscribeLocalEvent<HeldSpeedModifierComponent, GotEquippedHandEvent>(OnGotEquippedHand);
  15. SubscribeLocalEvent<HeldSpeedModifierComponent, GotUnequippedHandEvent>(OnGotUnequippedHand);
  16. SubscribeLocalEvent<HeldSpeedModifierComponent, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent>>(OnRefreshMovementSpeedModifiers);
  17. }
  18. private void OnGotEquippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotEquippedHandEvent args)
  19. {
  20. _movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
  21. }
  22. private void OnGotUnequippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotUnequippedHandEvent args)
  23. {
  24. _movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
  25. }
  26. public (float,float) GetHeldMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component)
  27. {
  28. var walkMod = component.WalkModifier;
  29. var sprintMod = component.SprintModifier;
  30. if (component.MirrorClothingModifier && TryComp<ClothingSpeedModifierComponent>(uid, out var clothingSpeedModifier))
  31. {
  32. walkMod = clothingSpeedModifier.WalkModifier;
  33. sprintMod = clothingSpeedModifier.SprintModifier;
  34. }
  35. return (walkMod, sprintMod);
  36. }
  37. private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
  38. {
  39. var (walkMod, sprintMod) = GetHeldMovementSpeedModifiers(uid, component);
  40. args.Args.ModifySpeed(walkMod, sprintMod);
  41. }
  42. }