| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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);
- }
- public (float,float) GetHeldMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component)
- {
- var walkMod = component.WalkModifier;
- var sprintMod = component.SprintModifier;
- if (component.MirrorClothingModifier && TryComp<ClothingSpeedModifierComponent>(uid, out var clothingSpeedModifier))
- {
- walkMod = clothingSpeedModifier.WalkModifier;
- sprintMod = clothingSpeedModifier.SprintModifier;
- }
- return (walkMod, sprintMod);
- }
- private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
- {
- var (walkMod, sprintMod) = GetHeldMovementSpeedModifiers(uid, component);
- args.Args.ModifySpeed(walkMod, sprintMod);
- }
- }
|