Jitter.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Content.Shared.Chemistry.Reagent;
  2. using Content.Shared.EntityEffects;
  3. using Content.Shared.Jittering;
  4. using Robust.Shared.Prototypes;
  5. namespace Content.Server.EntityEffects.Effects.StatusEffects;
  6. /// <summary>
  7. /// Adds the jitter status effect to a mob.
  8. /// This doesn't use generic status effects because it needs to
  9. /// take in some parameters that JitterSystem needs.
  10. /// </summary>
  11. public sealed partial class Jitter : EntityEffect
  12. {
  13. [DataField]
  14. public float Amplitude = 10.0f;
  15. [DataField]
  16. public float Frequency = 4.0f;
  17. [DataField]
  18. public float Time = 2.0f;
  19. /// <remarks>
  20. /// true - refresh jitter time, false - accumulate jitter time
  21. /// </remarks>
  22. [DataField]
  23. public bool Refresh = true;
  24. public override void Effect(EntityEffectBaseArgs args)
  25. {
  26. var time = Time;
  27. if (args is EntityEffectReagentArgs reagentArgs)
  28. time *= reagentArgs.Scale.Float();
  29. args.EntityManager.EntitySysManager.GetEntitySystem<SharedJitteringSystem>()
  30. .DoJitter(args.TargetEntity, TimeSpan.FromSeconds(time), Refresh, Amplitude, Frequency);
  31. }
  32. protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) =>
  33. Loc.GetString("reagent-effect-guidebook-jittering", ("chance", Probability));
  34. }