SharedIdentitySystem.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Content.Shared.Clothing;
  2. using Content.Shared.IdentityManagement.Components;
  3. using Content.Shared.Inventory;
  4. using Robust.Shared.Containers;
  5. namespace Content.Shared.IdentityManagement;
  6. public abstract class SharedIdentitySystem : EntitySystem
  7. {
  8. [Dependency] private readonly SharedContainerSystem _container = default!;
  9. private static string SlotName = "identity";
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<IdentityComponent, ComponentInit>(OnComponentInit);
  14. SubscribeLocalEvent<IdentityBlockerComponent, SeeIdentityAttemptEvent>(OnSeeIdentity);
  15. SubscribeLocalEvent<IdentityBlockerComponent, InventoryRelayedEvent<SeeIdentityAttemptEvent>>((e, c, ev) => OnSeeIdentity(e, c, ev.Args));
  16. SubscribeLocalEvent<IdentityBlockerComponent, ItemMaskToggledEvent>(OnMaskToggled);
  17. }
  18. private void OnSeeIdentity(EntityUid uid, IdentityBlockerComponent component, SeeIdentityAttemptEvent args)
  19. {
  20. if (component.Enabled)
  21. {
  22. args.TotalCoverage |= component.Coverage;
  23. if(args.TotalCoverage == IdentityBlockerCoverage.FULL)
  24. args.Cancel();
  25. }
  26. }
  27. protected virtual void OnComponentInit(EntityUid uid, IdentityComponent component, ComponentInit args)
  28. {
  29. component.IdentityEntitySlot = _container.EnsureContainer<ContainerSlot>(uid, SlotName);
  30. }
  31. private void OnMaskToggled(Entity<IdentityBlockerComponent> ent, ref ItemMaskToggledEvent args)
  32. {
  33. ent.Comp.Enabled = !args.Mask.Comp.IsToggled;
  34. }
  35. }
  36. /// <summary>
  37. /// Gets called whenever an entity changes their identity.
  38. /// </summary>
  39. [ByRefEvent]
  40. public record struct IdentityChangedEvent(EntityUid CharacterEntity, EntityUid IdentityEntity);