using Content.Shared._DV.Traits.Assorted; using Content.Shared.Body.Components; using Content.Shared.Ghost; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Pointing; namespace Content.Shared.Body.Systems; public sealed class BrainSystem : EntitySystem { [Dependency] private readonly SharedMindSystem _mindSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent((uid, _, args) => HandleMind(args.Target, uid)); SubscribeLocalEvent((uid, _, args) => HandleMind(uid, args.Target)); SubscribeLocalEvent(OnPointAttempt); SubscribeLocalEvent>(OnMakeUnborgable); // Delta V - Expanded for Delta V MMI Trait } private void HandleMind(EntityUid newEntity, EntityUid oldEntity) { if (TerminatingOrDeleted(newEntity) || TerminatingOrDeleted(oldEntity)) return; EnsureComp(newEntity); EnsureComp(oldEntity); var ghostOnMove = EnsureComp(newEntity); ghostOnMove.MustBeDead = HasComp(newEntity); // Don't ghost living players out of their bodies. if (!_mindSystem.TryGetMind(oldEntity, out var mindId, out var mind)) return; _mindSystem.TransferTo(mindId, newEntity, mind: mind); } private void OnPointAttempt(Entity ent, ref PointAttemptEvent args) { args.Cancel(); } // Delta V - Begin Unborgable private void OnMakeUnborgable(Entity ent, ref BodyRelayedEvent args) { EnsureComp(ent); EnsureComp(ent); } // Delta V - End Unborgable } /// /// Delta V - Unborgable Trait Applier /// Raised on organ entity, when it is inserted into a body /// [ByRefEvent] public readonly record struct MakeBrainUnborgableEvent();