using Content.Shared.Body.Events; using Content.Shared.Body.Organ; using Content.Shared.Examine; 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); SubscribeLocalEvent(OnExamined); } private void OnExamined(Entity ent, ref ExaminedEvent args) { if (ent.Comp.InstalledAugments.Count == 1) { args.PushMarkup(Loc.GetString("augment-tool-panel-examine")); } else { args.PushMarkup(Loc.GetString("augment-tool-panel-examine-multiple")); } } 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; } }