using Content.Shared.Body.Systems; using Content.Shared.Buckle.Components; using Content.Shared.Movement.Events; using Content.Shared.Movement.Systems; using Content.Shared.Standing; using Content.Shared.Throwing; namespace Content.Shared.Traits.Assorted; public sealed class LegsParalyzedSystem : EntitySystem { [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifierSystem = default!; [Dependency] private readonly StandingStateSystem _standingSystem = default!; [Dependency] private readonly SharedBodySystem _bodySystem = default!; public override void Initialize() { SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnBuckled); SubscribeLocalEvent(OnUnbuckled); SubscribeLocalEvent(OnThrowPushbackAttempt); SubscribeLocalEvent(OnUpdateCanMoveEvent); } private void OnStartup(EntityUid uid, LegsParalyzedComponent component, ComponentStartup args) { // TODO: In future probably must be surgery related wound _movementSpeedModifierSystem.ChangeBaseSpeed(uid, 0, 0, 20); } private void OnShutdown(EntityUid uid, LegsParalyzedComponent component, ComponentShutdown args) { _standingSystem.Stand(uid); _bodySystem.UpdateMovementSpeed(uid); } private void OnBuckled(EntityUid uid, LegsParalyzedComponent component, ref BuckledEvent args) { _standingSystem.Stand(uid); } private void OnUnbuckled(EntityUid uid, LegsParalyzedComponent component, ref UnbuckledEvent args) { _standingSystem.Down(uid); } private void OnUpdateCanMoveEvent(EntityUid uid, LegsParalyzedComponent component, UpdateCanMoveEvent args) { args.Cancel(); } private void OnThrowPushbackAttempt(EntityUid uid, LegsParalyzedComponent component, ThrowPushbackAttemptEvent args) { args.Cancel(); } }