| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using Content.Server.Stunnable.Components;
- using Content.Shared.Standing;
- using Content.Shared.StatusEffect;
- using JetBrains.Annotations;
- using Robust.Shared.Physics.Dynamics;
- using Content.Shared.Throwing;
- using Robust.Shared.Physics.Events;
- namespace Content.Server.Stunnable
- {
- [UsedImplicitly]
- internal sealed class StunOnCollideSystem : EntitySystem
- {
- [Dependency] private readonly StunSystem _stunSystem = default!;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent<StunOnCollideComponent, StartCollideEvent>(HandleCollide);
- SubscribeLocalEvent<StunOnCollideComponent, ThrowDoHitEvent>(HandleThrow);
- }
- private void TryDoCollideStun(EntityUid uid, StunOnCollideComponent component, EntityUid target)
- {
- if (EntityManager.TryGetComponent<StatusEffectsComponent>(target, out var status))
- {
- _stunSystem.TryStun(target, TimeSpan.FromSeconds(component.StunAmount), true, status);
- _stunSystem.TryKnockdown(target, TimeSpan.FromSeconds(component.KnockdownAmount), true,
- status);
- _stunSystem.TrySlowdown(target, TimeSpan.FromSeconds(component.SlowdownAmount), true,
- component.WalkSpeedMultiplier, component.RunSpeedMultiplier, status);
- }
- }
- private void HandleCollide(EntityUid uid, StunOnCollideComponent component, ref StartCollideEvent args)
- {
- if (args.OurFixtureId != component.FixtureID)
- return;
- TryDoCollideStun(uid, component, args.OtherEntity);
- }
- private void HandleThrow(EntityUid uid, StunOnCollideComponent component, ThrowDoHitEvent args)
- {
- TryDoCollideStun(uid, component, args.Target);
- }
- }
- }
|