using Content.Shared.Camera; using Content.Shared.Mobs; using Content.Shared.Movement.Events; using Content.Shared.Movement.Pulling.Events; using Content.Shared.Stunnable; using Robust.Shared.Containers; using Robust.Shared.Player; namespace Content.Shared._RMC14.Scoping; public partial class SharedScopeSystem { private void InitializeUser() { SubscribeLocalEvent(OnRemove); SubscribeLocalEvent(OnMoveInput); SubscribeLocalEvent(OnPullStarted); SubscribeLocalEvent(OnParentChanged); SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnEntityTerminating); SubscribeLocalEvent(OnGetEyeOffset); SubscribeLocalEvent(OnPlayerDetached); SubscribeLocalEvent(OnKnockedDown); SubscribeLocalEvent(OnStunned); SubscribeLocalEvent(OnMobStateChanged); } private void OnRemove(Entity user, ref ComponentRemove args) { if (!TerminatingOrDeleted(user)) UpdateOffset(user); } private void OnMoveInput(Entity ent, ref MoveInputEvent args) { if (!args.HasDirectionalMovement) return; if (!ent.Comp.AllowMovement) UserStopScoping(ent); } private void OnPullStarted(Entity ent, ref PullStartedMessage args) { if (args.PulledUid != ent.Owner) return; UserStopScoping(ent); } private void OnParentChanged(Entity ent, ref EntParentChangedMessage args) { UserStopScoping(ent); } private void OnInsertAttempt(Entity ent, ref ContainerGettingInsertedAttemptEvent args) { UserStopScoping(ent); } private void OnEntityTerminating(Entity ent, ref EntityTerminatingEvent args) { UserStopScoping(ent); } private void OnGetEyeOffset(Entity ent, ref GetEyeOffsetEvent args) { args.Offset += ent.Comp.EyeOffset; } private void OnPlayerDetached(Entity ent, ref PlayerDetachedEvent args) { UserStopScoping(ent); } private void OnKnockedDown(Entity ent, ref KnockedDownEvent args) { UserStopScoping(ent); } private void OnStunned(Entity ent, ref StunnedEvent args) { UserStopScoping(ent); } private void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) { if (args.NewMobState == MobState.Alive) return; UserStopScoping(ent); } private void UserStopScoping(Entity ent) { var scope = ent.Comp.Scope; RemCompDeferred(ent); if (TryComp(scope, out ScopeComponent? scopeComponent) && scopeComponent.User == ent) Unscope((scope.Value, scopeComponent)); } }