From 4e6d602784b7bd8030298c5fb64fe2e69f660c3e Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Tue, 28 Sep 2021 11:33:33 +0200 Subject: [PATCH] DoAfterSystem uses EntityUid internally, adds EntityUid constructor for DoAfterEventArgs. --- Content.Server/DoAfter/DoAfter.cs | 28 +++++++++++----------- Content.Server/DoAfter/DoAfterComponent.cs | 2 +- Content.Server/DoAfter/DoAfterEventArgs.cs | 26 +++++++++----------- Content.Server/DoAfter/DoAfterSystem.cs | 22 ++++++++--------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/Content.Server/DoAfter/DoAfter.cs b/Content.Server/DoAfter/DoAfter.cs index 040db67654..aa97387d90 100644 --- a/Content.Server/DoAfter/DoAfter.cs +++ b/Content.Server/DoAfter/DoAfter.cs @@ -34,25 +34,25 @@ namespace Content.Server.DoAfter private readonly string? _activeHand; private readonly ItemComponent? _activeItem; - public DoAfter(DoAfterEventArgs eventArgs) + public DoAfter(DoAfterEventArgs eventArgs, IEntityManager entityManager) { EventArgs = eventArgs; StartTime = IoCManager.Resolve().CurTime; if (eventArgs.BreakOnUserMove) { - UserGrid = eventArgs.User.Transform.Coordinates; + UserGrid = entityManager.GetComponent(eventArgs.User).Coordinates; } if (eventArgs.BreakOnTargetMove) { // Target should never be null if the bool is set. - TargetGrid = eventArgs.Target!.Transform.Coordinates; + TargetGrid = entityManager.GetComponent(eventArgs.Target!.Value).Coordinates; } // For this we need to stay on the same hand slot and need the same item in that hand slot // (or if there is no item there we need to keep it free). - if (eventArgs.NeedHand && eventArgs.User.TryGetComponent(out HandsComponent? handsComponent)) + if (eventArgs.NeedHand && entityManager.TryGetComponent(eventArgs.User, out HandsComponent? handsComponent)) { _activeHand = handsComponent.ActiveHand; _activeItem = handsComponent.GetActiveHand; @@ -62,7 +62,7 @@ namespace Content.Server.DoAfter AsTask = Tcs.Task; } - public void Run(float frameTime) + public void Run(float frameTime, IEntityManager entityManager) { switch (Status) { @@ -92,15 +92,15 @@ namespace Content.Server.DoAfter return; } - if (IsCancelled()) + if (IsCancelled(entityManager)) { Tcs.SetResult(DoAfterStatus.Cancelled); } } - private bool IsCancelled() + private bool IsCancelled(IEntityManager entityManager) { - if (EventArgs.User.Deleted || EventArgs.Target?.Deleted == true) + if (!entityManager.EntityExists(EventArgs.User) || EventArgs.Target is {} target && !entityManager.EntityExists(target)) { return true; } @@ -112,14 +112,14 @@ namespace Content.Server.DoAfter } // TODO :Handle inertia in space. - if (EventArgs.BreakOnUserMove && !EventArgs.User.Transform.Coordinates.InRange( - EventArgs.User.EntityManager, UserGrid, EventArgs.MovementThreshold)) + if (EventArgs.BreakOnUserMove && !entityManager.GetComponent(EventArgs.User).Coordinates.InRange( + entityManager, UserGrid, EventArgs.MovementThreshold)) { return true; } - if (EventArgs.BreakOnTargetMove && !EventArgs.Target!.Transform.Coordinates.InRange( - EventArgs.User.EntityManager, TargetGrid, EventArgs.MovementThreshold)) + if (EventArgs.BreakOnTargetMove && !entityManager.GetComponent(EventArgs.Target!.Value).Coordinates.InRange( + entityManager, TargetGrid, EventArgs.MovementThreshold)) { return true; } @@ -135,7 +135,7 @@ namespace Content.Server.DoAfter } if (EventArgs.BreakOnStun && - EventArgs.User.TryGetComponent(out StunnableComponent? stunnableComponent) && + entityManager.TryGetComponent(EventArgs.User, out StunnableComponent? stunnableComponent) && stunnableComponent.Stunned) { return true; @@ -143,7 +143,7 @@ namespace Content.Server.DoAfter if (EventArgs.NeedHand) { - if (!EventArgs.User.TryGetComponent(out HandsComponent? handsComponent)) + if (!entityManager.TryGetComponent(EventArgs.User, out HandsComponent? handsComponent)) { // If we had a hand but no longer have it that's still a paddlin' if (_activeHand != null) diff --git a/Content.Server/DoAfter/DoAfterComponent.cs b/Content.Server/DoAfter/DoAfterComponent.cs index 4692629971..a5eb96ce23 100644 --- a/Content.Server/DoAfter/DoAfterComponent.cs +++ b/Content.Server/DoAfter/DoAfterComponent.cs @@ -31,7 +31,7 @@ namespace Content.Server.DoAfter doAfter.EventArgs.BreakOnUserMove, doAfter.EventArgs.BreakOnTargetMove, doAfter.EventArgs.MovementThreshold, - doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid); + doAfter.EventArgs.Target ?? EntityUid.Invalid); toAdd.Add(clientDoAfter); } diff --git a/Content.Server/DoAfter/DoAfterEventArgs.cs b/Content.Server/DoAfter/DoAfterEventArgs.cs index 83d1b15c00..7f61ea07bf 100644 --- a/Content.Server/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/DoAfter/DoAfterEventArgs.cs @@ -10,22 +10,10 @@ namespace Content.Server.DoAfter { public sealed class DoAfterEventArgs { - // Premade checks - public Func GetInRangeUnobstructed(CollisionGroup collisionMask = CollisionGroup.MobMask) - { - if (Target == null) - { - throw new InvalidOperationException("Can't supply a null target to DoAfterEventArgs.GetInRangeUnobstructed"); - } - - bool Ignored(IEntity entity) => entity == User || entity == Target; - return () => User.InRangeUnobstructed(Target, collisionMask: collisionMask, predicate: Ignored); - } - /// /// The entity invoking do_after /// - public IEntity User { get; } + public EntityUid User { get; } /// /// How long does the do_after require to complete @@ -35,7 +23,7 @@ namespace Content.Server.DoAfter /// /// Applicable target (if relevant) /// - public IEntity? Target { get; } + public EntityUid? Target { get; } /// /// Manually cancel the do_after so it no longer runs @@ -114,7 +102,15 @@ namespace Content.Server.DoAfter IEntity user, float delay, CancellationToken cancelToken = default, - IEntity? target = null) + IEntity? target = null) : this(user.Uid, delay, cancelToken, target?.Uid ?? null) + { + } + + public DoAfterEventArgs( + EntityUid user, + float delay, + CancellationToken cancelToken = default, + EntityUid? target = null) { User = user; Delay = delay; diff --git a/Content.Server/DoAfter/DoAfterSystem.cs b/Content.Server/DoAfter/DoAfterSystem.cs index 8d0072a6ee..6202fac1ad 100644 --- a/Content.Server/DoAfter/DoAfterSystem.cs +++ b/Content.Server/DoAfter/DoAfterSystem.cs @@ -45,7 +45,7 @@ namespace Content.Server.DoAfter { foreach (var doAfter in comp.DoAfters.ToArray()) { - doAfter.Run(frameTime); + doAfter.Run(frameTime, EntityManager); switch (doAfter.Status) { @@ -66,11 +66,11 @@ namespace Content.Server.DoAfter { comp.Cancelled(doAfter); - if(!doAfter.EventArgs.User.Deleted && doAfter.EventArgs.UserCancelledEvent != null) - RaiseLocalEvent(doAfter.EventArgs.User.Uid, doAfter.EventArgs.UserCancelledEvent, false); + if(EntityManager.EntityExists(doAfter.EventArgs.User) && doAfter.EventArgs.UserCancelledEvent != null) + RaiseLocalEvent(doAfter.EventArgs.User, doAfter.EventArgs.UserCancelledEvent, false); - if(doAfter.EventArgs.Target is { Deleted: false } && doAfter.EventArgs.TargetCancelledEvent != null) - RaiseLocalEvent(doAfter.EventArgs.Target.Uid, doAfter.EventArgs.TargetCancelledEvent, false); + if(doAfter.EventArgs.Target is {} target && EntityManager.EntityExists(target) && doAfter.EventArgs.TargetCancelledEvent != null) + RaiseLocalEvent(target, doAfter.EventArgs.TargetCancelledEvent, false); if(doAfter.EventArgs.BroadcastCancelledEvent != null) RaiseLocalEvent(doAfter.EventArgs.BroadcastCancelledEvent); @@ -80,11 +80,11 @@ namespace Content.Server.DoAfter { comp.Finished(doAfter); - if(!doAfter.EventArgs.User.Deleted && doAfter.EventArgs.UserFinishedEvent != null) - RaiseLocalEvent(doAfter.EventArgs.User.Uid, doAfter.EventArgs.UserFinishedEvent, false); + if(EntityManager.EntityExists(doAfter.EventArgs.User) && doAfter.EventArgs.UserFinishedEvent != null) + RaiseLocalEvent(doAfter.EventArgs.User, doAfter.EventArgs.UserFinishedEvent, false); - if(doAfter.EventArgs.Target is { Deleted: false } && doAfter.EventArgs.TargetFinishedEvent != null) - RaiseLocalEvent(doAfter.EventArgs.Target.Uid, doAfter.EventArgs.TargetFinishedEvent, false); + if(doAfter.EventArgs.Target is {} target && EntityManager.EntityExists(target) && doAfter.EventArgs.TargetFinishedEvent != null) + RaiseLocalEvent(target, doAfter.EventArgs.TargetFinishedEvent, false); if(doAfter.EventArgs.BroadcastFinishedEvent != null) RaiseLocalEvent(doAfter.EventArgs.BroadcastFinishedEvent); @@ -124,9 +124,9 @@ namespace Content.Server.DoAfter private DoAfter CreateDoAfter(DoAfterEventArgs eventArgs) { // Setup - var doAfter = new DoAfter(eventArgs); + var doAfter = new DoAfter(eventArgs, EntityManager); // Caller's gonna be responsible for this I guess - var doAfterComponent = eventArgs.User.GetComponent(); + var doAfterComponent = EntityManager.GetComponent(eventArgs.User); doAfterComponent.Add(doAfter); return doAfter; }