BaseFloatModifierSystem.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Robust.Shared.Timing;
  2. namespace Content.Shared._Stalker.Modifier;
  3. public abstract class BaseFloatModifierSystem<TComponent> : EntitySystem where TComponent : BaseFloatModifierComponent
  4. {
  5. [Dependency] private readonly IGameTiming _timing = default!;
  6. public void RefreshModifiers(EntityUid uid)
  7. {
  8. if (!TryComp<TComponent>(uid, out var component))
  9. return;
  10. RefreshModifiers((uid, component));
  11. }
  12. public void RefreshModifiers(Entity<TComponent?> modifier)
  13. {
  14. if (_timing.ApplyingState)
  15. return;
  16. if (!Resolve(modifier, ref modifier.Comp, false))
  17. return;
  18. var refreshEvent = new FloatModifierRefreshEvent<TComponent>();
  19. RaiseLocalEvent(modifier, refreshEvent);
  20. if (MathHelper.CloseTo(refreshEvent.Modifier, modifier.Comp.Modifier))
  21. return;
  22. modifier.Comp.Modifier = refreshEvent.Modifier;
  23. var updatedEvent = new UpdatedFloatModifierEvent<TComponent>(modifier.Comp.Modifier);
  24. RaiseLocalEvent(modifier, updatedEvent);
  25. }
  26. }