From 5e266f55381773478c851f99008d0dbe6041b1ce Mon Sep 17 00:00:00 2001 From: Artem Ovchinnikov Date: Sat, 24 Sep 2022 18:18:20 +0300 Subject: [PATCH] Added new extension method Added new extension method that fixes DoTween null-reference, when using GetCancellationOnDestroy() --- .../DOTween/DOTweenAsyncExtensions.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs index 80ae27c..9cbe2ed 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs @@ -98,6 +98,25 @@ namespace Cysharp.Threading.Tasks if (!tween.IsActive()) return UniTask.CompletedTask; return new UniTask(TweenConfiguredSource.Create(tween, tweenCancelBehaviour, cancellationToken, CallbackType.StepComplete, out var token), token); } + + public static UniTask AwaitWithCancellation(this Tween tween, CancellationToken cancellationToken) + { + Error.ThrowArgumentNullException(tween, nameof(tween)); + + if (!tween.IsActive()) return UniTask.CompletedTask; + + var registration = cancellationToken.Register(() => + { + if (tween.IsActive()) + { + tween.Kill(); + } + }); + + tween.OnKill((() => registration.Dispose())); + + return tween.ToUniTask(TweenCancelBehaviour.KillAndCancelAwait, cancellationToken); + } public struct TweenAwaiter : ICriticalNotifyCompletion {