using Content.Shared.Damage; using Content.Shared.Movement.Systems; using Content.Shared.StatusEffectNew; namespace Content.Shared._Offbrand.StatusEffects; public sealed class SlowOnDamageModifierStatusEffectSystem : EntitySystem { [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnStatusEffectApplied); SubscribeLocalEvent(OnStatusEffectRemoved); SubscribeLocalEvent>(OnModifySlowOnDamageSpeed); } private void OnStatusEffectApplied(Entity ent, ref StatusEffectAppliedEvent args) { _movementSpeedModifier.RefreshMovementSpeedModifiers(args.Target); } private void OnStatusEffectRemoved(Entity ent, ref StatusEffectRemovedEvent args) { _movementSpeedModifier.RefreshMovementSpeedModifiers(args.Target); } private void OnModifySlowOnDamageSpeed(Entity ent, ref StatusEffectRelayedEvent args) { var delta = 1f - args.Args.Speed; if (delta <= 0f) return; args.Args = args.Args with { Speed = args.Args.Speed + delta * ent.Comp.Modifier }; } }