using Content.Shared._White.Pinpointer; using Content.Shared.Interaction; using Content.Shared.Pinpointer; namespace Content.Server.Pinpointer; public sealed partial class PinpointerSystem { public void InitializeMultiplePinpointer() { SubscribeLocalEvent(OnMultiplePinpointerStartup); SubscribeLocalEvent(OnMultiplePinpointerActivated); SubscribeLocalEvent(OnMultiplePinpointerHandleState); } private void OnMultiplePinpointerHandleState(EntityUid uid, MultiplePinpointerComponent component, ref AfterAutoHandleStateEvent args) { SetMultiplePinpointer(uid, component); } private void OnMultiplePinpointerStartup(EntityUid uid, MultiplePinpointerComponent multiple, ComponentStartup args) { var pinpointer = EntityManager.EnsureComponent(uid); SetMultiplePinpointer(uid, multiple, pinpointer); } private void OnMultiplePinpointerActivated(EntityUid uid, MultiplePinpointerComponent multiple, ActivateInWorldEvent args) { if (args.Handled) return; args.Handled = CycleMultiplePinpointer(uid, multiple, args.User); } private bool CycleMultiplePinpointer(EntityUid uid, MultiplePinpointerComponent? multiple = null, EntityUid? user = null) { if (!Resolve(uid, ref multiple)) return false; if (multiple.Modes.Length == 0) return false; multiple.CurrentEntry = (uint)((multiple.CurrentEntry + 1) % multiple.Modes.Length); SetMultiplePinpointer(uid, multiple, user: user); return true; } private void SetMultiplePinpointer(EntityUid uid, MultiplePinpointerComponent? multiple = null, PinpointerComponent? pin = null, EntityUid? user = null) { if (!Resolve(uid, ref multiple, ref pin)) return; if (multiple.Modes.Length <= multiple.CurrentEntry) return; var current = multiple.Modes[multiple.CurrentEntry]; SetDistance(uid, Distance.Unknown, pin); if (current == "Off") { SetActive(uid, true, pin); pin.Component = null; } else { SetActive(uid, false, pin); pin.Component = current; } LocateTarget(uid, pin); } }