public DoAfter(DoAfterEventArgs eventArgs, IEntityManager entityManager) { EventArgs = eventArgs; StartTime = IoCManager.Resolve <IGameTiming>().CurTime; if (eventArgs.BreakOnUserMove) { UserGrid = entityManager.GetComponent <TransformComponent>(eventArgs.User).Coordinates; } if (eventArgs.Target != null && eventArgs.BreakOnTargetMove) { // Target should never be null if the bool is set. TargetGrid = entityManager.GetComponent <TransformComponent>(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 && entityManager.TryGetComponent(eventArgs.User, out HandsComponent? handsComponent)) { _activeHand = handsComponent.ActiveHand?.Name; _activeItem = handsComponent.ActiveHandEntity; } Tcs = new TaskCompletionSource <DoAfterStatus>(); AsTask = Tcs.Task; }
public async Task <DoAfterStatus> DoAfter(DoAfterEventArgs eventArgs) { // Setup var doAfter = new DoAfter(eventArgs); // Caller's gonna be responsible for this I guess var doAfterComponent = eventArgs.User.GetComponent <DoAfterComponent>(); doAfterComponent.Add(doAfter); await doAfter.AsTask; return(doAfter.Status); }