using Robust.Shared.Timing; namespace Content.Shared._Stalker.Modifier; public abstract class BaseFloatModifierSystem : EntitySystem where TComponent : BaseFloatModifierComponent { [Dependency] private readonly IGameTiming _timing = default!; public void RefreshModifiers(EntityUid uid) { if (!TryComp(uid, out var component)) return; RefreshModifiers((uid, component)); } public void RefreshModifiers(Entity modifier) { if (_timing.ApplyingState) return; if (!Resolve(modifier, ref modifier.Comp, false)) return; var refreshEvent = new FloatModifierRefreshEvent(); RaiseLocalEvent(modifier, refreshEvent); if (MathHelper.CloseTo(refreshEvent.Modifier, modifier.Comp.Modifier)) return; modifier.Comp.Modifier = refreshEvent.Modifier; var updatedEvent = new UpdatedFloatModifierEvent(modifier.Comp.Modifier); RaiseLocalEvent(modifier, updatedEvent); } }