using Content.Shared._DV.Mind; using Content.Shared._DV.Psionics.Components; using Content.Shared._DV.Psionics.Components.PsionicPowers; using Content.Shared._DV.Psionics.Events.PowerActionEvents; using Content.Shared.Examine; using Content.Shared.Interaction.Events; using Content.Shared.Mind.Components; namespace Content.Shared._DV.Psionics.Systems.PsionicPowers; public abstract class SharedTelegnosisPowerSystem : BasePsionicPowerSystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMindRemoved); SubscribeLocalEvent(OnInteractionAttempt); SubscribeLocalEvent(OnShowSSDIndicator); SubscribeLocalEvent(OnExamine); } private void OnMindRemoved(Entity projection, ref MindRemovedMessage args) { QueueDel(projection); } private void OnInteractionAttempt(Entity projection, ref InteractionAttemptEvent args) { // no astrally stealing someone's shoes args.Cancelled = true; } private void OnShowSSDIndicator(Entity psionic, ref ShowSSDIndicatorEvent args) { if (!TryComp(psionic, out var mindSwapped) || !HasComp(mindSwapped.OriginalEntity)) return; // Only hide if currently projecting args.Hidden = true; } private void OnExamine(Entity entity, ref ExaminedEvent args) { if (GetCasterProjection(entity) == default) return; args.PushMarkup($"[color=yellow]{Loc.GetString("telegnosis-power-ssd", ("ent", entity))}[/color]"); } public EntityUid GetCasterProjection(Entity entity) { if (!TryComp(entity, out var mindSwapped) || !HasComp(mindSwapped.OriginalEntity)) { return default; } return mindSwapped.OriginalEntity; } }