using Content.Shared.Body.Events; using Content.Shared.Body.Organ; using Content.Shared.Interaction; namespace Content.Shared._DV.Augments; public sealed class AugmentSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnOrganOrganAddedToBody); SubscribeLocalEvent(OnOrganOrganRemovedFromBody); SubscribeLocalEvent(OnAccessibleOverride); } private void OnOrganOrganAddedToBody(Entity augment, ref OrganAddedToBodyEvent args) { var installed = EnsureComp(args.Body); installed.InstalledAugments.Add(GetNetEntity(augment)); } private void OnOrganOrganRemovedFromBody(Entity augment, ref OrganRemovedFromBodyEvent args) { if (!TryComp(args.OldBody, out var installed)) return; installed.InstalledAugments.Remove(GetNetEntity(augment)); if (installed.InstalledAugments.Count == 0) RemComp(args.OldBody); } private void OnAccessibleOverride(Entity augment, ref AccessibleOverrideEvent args) { if (!TryComp(args.Target, out var organ) || organ.Body != args.User) return; // let the user interact with their installed augments args.Handled = true; args.Accessible = true; } }