using System.Linq; using Content.Shared._DV.Psionics.Components; using Content.Shared._DV.Psionics.Events; using Content.Shared.Clothing; using Content.Shared.Popups; namespace Content.Shared._DV.Psionics.Systems; public abstract partial class SharedPsionicSystem { private void InitializeDetection() { SubscribeLocalEvent(OnPowerUsed); SubscribeLocalEvent(OnGrantingClothingEquipped); SubscribeLocalEvent(OnGrantingClothingUnequipped); } private void OnGrantingClothingEquipped(Entity detector, ref ClothingGotEquippedEvent args) { if (!HasComp(args.Wearer)) // IPCs and non-player organics shouldn't be able to use abilities. return; detector.Comp.Wearer = args.Wearer; Dirty(detector); } private void OnGrantingClothingUnequipped(Entity detector, ref ClothingGotUnequippedEvent args) { detector.Comp.Wearer = null; Dirty(detector); } private void OnPowerUsed(Entity psionic, ref PsionicPowerUsedEvent args) { var coords = Transform(args.User).Coordinates; foreach (var detector in _lookup.GetEntitiesInRange(coords, 10f).Select(detectorPower => detectorPower.Comp.Wearer ?? detectorPower.Owner)) { if (detector == args.User) continue; if (!CanUsePsionicAbility(detector)) continue; // This is for artifacts. var detectEv = new PsionicPowerDetectedEvent(args.User, args.Power); RaiseLocalEvent(detector, ref detectEv); Popup.PopupEntity(Loc.GetString("psionic-power-metapsionic-power-detected", ("power", args.Power)), detector, detector, PopupType.LargeCaution); } args.Handled = true; } }