SharedFakeMindShieldImplantSystem.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Shared.Actions;
  2. using Content.Shared.Implants;
  3. using Content.Shared.Implants.Components;
  4. using Content.Shared.Mindshield.Components;
  5. using Robust.Shared.Containers;
  6. namespace Content.Shared.Mindshield.FakeMindShield;
  7. public sealed class SharedFakeMindShieldImplantSystem : EntitySystem
  8. {
  9. [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<SubdermalImplantComponent, FakeMindShieldToggleEvent>(OnFakeMindShieldToggle);
  14. SubscribeLocalEvent<FakeMindShieldImplantComponent, ImplantImplantedEvent>(ImplantCheck);
  15. SubscribeLocalEvent<FakeMindShieldImplantComponent, EntGotRemovedFromContainerMessage>(ImplantDraw);
  16. }
  17. /// <summary>
  18. /// Raise the Action of a Implanted user toggling their implant to the FakeMindshieldComponent on their entity
  19. /// </summary>
  20. private void OnFakeMindShieldToggle(Entity<SubdermalImplantComponent> entity, ref FakeMindShieldToggleEvent ev)
  21. {
  22. ev.Handled = true;
  23. if (entity.Comp.ImplantedEntity is not { } ent)
  24. return;
  25. if (!TryComp<FakeMindShieldComponent>(ent, out var comp))
  26. return;
  27. _actionsSystem.SetToggled(ev.Action, !comp.IsEnabled); // Set it to what the Mindshield component WILL be after this
  28. RaiseLocalEvent(ent, ev); //this reraises the action event to support an eventual future Changeling Antag which will also be using this component for it's "mindshield" ability
  29. }
  30. private void ImplantCheck(EntityUid uid, FakeMindShieldImplantComponent component ,ref ImplantImplantedEvent ev)
  31. {
  32. if (ev.Implanted != null)
  33. EnsureComp<FakeMindShieldComponent>(ev.Implanted.Value);
  34. }
  35. private void ImplantDraw(Entity<FakeMindShieldImplantComponent> ent, ref EntGotRemovedFromContainerMessage ev)
  36. {
  37. RemComp<FakeMindShieldComponent>(ev.Container.Owner);
  38. }
  39. }