diff --git a/Assets/UnityScreenNavigator/Runtime/Core/Shared/Animation/SimpleTransitionAnimationObject.cs b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Animation/SimpleTransitionAnimationObject.cs index 6cf14fb..22d14dd 100644 --- a/Assets/UnityScreenNavigator/Runtime/Core/Shared/Animation/SimpleTransitionAnimationObject.cs +++ b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Animation/SimpleTransitionAnimationObject.cs @@ -120,8 +120,12 @@ public async UniTask SetTime(CancellationToken cancellationToken) await _sequence.AwaitForComplete(cancellationToken: cancellationToken); - _canvasGroup.interactable = _canvasGroupInteractable; - _canvasGroup.blocksRaycasts = _canvasGroupBlockRaycast; + if (_canvasGroup != null) + { + _canvasGroup.interactable = _canvasGroupInteractable; + _canvasGroup.blocksRaycasts = _canvasGroupBlockRaycast; + } + } public void SetParams(float? duration = null, Ease? easeType = null, SheetAlignment? beforeAlignment = null, diff --git a/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs new file mode 100644 index 0000000..dd241f2 --- /dev/null +++ b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs @@ -0,0 +1,127 @@ +using System; +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityScreenNavigator.Runtime.Core.Modal; +using UnityScreenNavigator.Runtime.Core.Screen; +using UnityScreenNavigator.Runtime.Core.Shared.Views; +using UnityScreenNavigator.Runtime.Interactivity; + +namespace UnityScreenNavigator.Runtime.Core.Shared +{ + public static class Utils + { + // public static async UniTask ShowToastForLocStr(LocalizedString locStr, float duration = 3F, Action callback = null) + // { + // if (locStr is null) + // return; + // + // var str = await locStr.GetLocalizedStringAsync(); + // + // await Toast.Show(str, duration, null, callback); + // } + // + // public static async UniTask ShowToastForLocStrFormat( + // LocalizedString locStr, + // T formatParam, + // float duration = 3F, + // Action callback = null, + // CancellationToken cancellationToken = default) + // { + // var str = locStr is not null ? await locStr.GetLocalizedStringAsync() : string.Empty; + // + // var toast = await Toast.Show(StringUtils.Format(str, formatParam), duration, null, callback, cancellationToken); + // + // return toast; + // } + + public static UniTask PopScreen(string container, bool playAnim = true) + { + var screenContainer = ScreenContainer.Find(container); + + UniTask res = UniTask.CompletedTask; + + if (screenContainer.IsInTransition) + res = UniTask.WaitUntil(() => !screenContainer.IsInTransition); + + return res.ContinueWith(() => screenContainer.Pop(playAnim)); + + } + + public static UniTask PopModal(string containeStr, bool playAnim = true) + { + var container = ModalContainer.Find(containeStr); + + return container.Pop(playAnim); + + } + public static UniTask PushModal(string containeStr, string prefab, bool playAnim = true) + { + var container = ModalContainer.Find(containeStr); + + var modal = new WindowOption(prefab, playAnim); + + return container.Push(modal); + + } + + public static async UniTask PushModalTakeWindow( + string containeStr, + string prefab, + bool playAnim = true) + { + var container = ModalContainer.Find(containeStr); + + var modal = new WindowOption(prefab, playAnim); + + container.Push(modal); + + if (modal.WindowCreated.Value != null) + { + return modal.WindowCreated.Value; + } + + return await modal.WindowCreated.WaitAsync(); + + } + + public static async UniTask PushModalTakeWindow( + ModalContainer modalContainer, + string prefab, + bool playAnim = true) + { + var modal = new WindowOption(prefab, playAnim); + + modalContainer.Push(modal); + + if (modal.WindowCreated.Value != null) + { + return modal.WindowCreated.Value; + } + + return await modal.WindowCreated.WaitAsync(); + + } + + + public static UniTask PushScreen(string container, string prefab, bool playAnim = true, bool isPoolable = false) + { + var screenContainer = ScreenContainer.Find(container); + + var screen = new WindowOption(prefab, playAnim, IsPoolable: isPoolable); + + return screenContainer.Push(screen); + + } + // public static async void ShowToastForLocStr(IUIViewGroup viewGroup, LocalizedString locStr, float duration = 3) + // { + // if (locStr is null) + // return; + // + // var str = await locStr.GetLocalizedStringAsync(); + // + // Toast.Show(viewGroup, str, duration); + // } + // + } + +} \ No newline at end of file diff --git a/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs.meta b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs.meta new file mode 100644 index 0000000..c8e0600 --- /dev/null +++ b/Assets/UnityScreenNavigator/Runtime/Core/Shared/Utils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1c7349d9e2bd40cfa48d124daea1d4b3 +timeCreated: 1727087853 \ No newline at end of file diff --git a/Assets/UnityScreenNavigator/Runtime/Core/Shared/WindowOption.cs b/Assets/UnityScreenNavigator/Runtime/Core/Shared/WindowOption.cs index cb2f511..14df35c 100644 --- a/Assets/UnityScreenNavigator/Runtime/Core/Shared/WindowOption.cs +++ b/Assets/UnityScreenNavigator/Runtime/Core/Shared/WindowOption.cs @@ -1,3 +1,4 @@ +using System; using Cysharp.Threading.Tasks; using UnityScreenNavigator.Runtime.Core.Shared.Views;