public override void Resolve(object o)
            {
                var p = _func == null
                    ? CoroutineExtensions.WaitUntil(_yieldInstruction)
                    : CoroutineExtensions.WaitUntil(_func);

                p.ThenResolvePromise(_promise, o);
            }
        public static IPromise LoadWithoutActivating(string sceneName, LoadSceneMode mode = LoadSceneMode.Additive)
        {
            var asyncOp = SceneManager.LoadSceneAsync(sceneName, mode);

            asyncOp.allowSceneActivation = false;

            return(CoroutineExtensions.WaitUntil(() => asyncOp.progress >= 0.9f)
                   .Then(() => Promise.Resolved(asyncOp)));
        }
        public static IPromise LoadAssetPromise(this AssetBundle bundle, string assetName)
        {
            var p       = Promise.Create();
            var request = bundle.LoadAssetAsync(assetName);

            CoroutineExtensions.WaitUntil(request)
            .ThenDo(() => p.Resolve(request.asset));

            return(p);
        }
        // --------- AssetBundle extension methods --------- //

        public static IPromise LoadAllAssetsPromise(this AssetBundle bundle)
        {
            var p       = Promise.Create();
            var request = bundle.LoadAllAssetsAsync();

            CoroutineExtensions.WaitUntil(request)
            .ThenDo(() => p.Resolve(request.allAssets));

            return(p);
        }
        private static void Init()
        {
            var obj = new GameObject("CoroutineExtensions")
            {
                hideFlags = HideFlags.HideInHierarchy
            };

            DontDestroyOnLoad(obj);
            _instance = obj.AddComponent <CoroutineExtensions>();
        }
Example #6
0
        public IPromise ThenTween(float time, Action <float> onUpdate, Easing.Functions easing = Easing.Functions.Linear, bool unscaled = false)
        {
            var p = Create();

            if (CurrentState == EPromiseState.Resolved)
            {
                CoroutineExtensions.Tween(time, onUpdate, easing, unscaled).ThenResolvePromise(p, PromisedObject);
            }
            else
            {
                _resolutions.Add(TweenResolution.Create(time, onUpdate, easing, unscaled, p));
            }

            return(p);
        }
Example #7
0
        public IPromise ThenWaitUntil(Func <bool> evaluator)
        {
            var p = Create();

            if (CurrentState == EPromiseState.Resolved)
            {
                CoroutineExtensions.WaitUntil(evaluator).ThenResolvePromise(p, PromisedObject);
            }
            else
            {
                _resolutions.Add(WaitUntilResolution.Create(evaluator, p));
            }

            return(p);
        }
Example #8
0
        public IPromise ThenWaitUntil(YieldInstruction yieldInstruction)
        {
            var p = Create();

            if (CurrentState == EPromiseState.Resolved)
            {
                CoroutineExtensions.WaitUntil(yieldInstruction).ThenResolvePromise(p, PromisedObject);
            }
            else
            {
                _resolutions.Add(WaitUntilResolution.Create(yieldInstruction, p));
            }

            return(p);
        }
Example #9
0
        public IPromise ThenWaitForSeconds(float time, bool unscaled = false)
        {
            var p = Create();

            if (CurrentState == EPromiseState.Resolved)
            {
                CoroutineExtensions.WaitForSeconds(time, unscaled).ThenResolvePromise(p, PromisedObject);
            }
            else
            {
                _resolutions.Add(WaitForSecondsResolution.Create(time, unscaled, p));
            }

            return(p);
        }
        // ReSharper disable once UnusedMember.Local
        private static IPromise LoadFromFileAsync(string bundlePath)
        {
            if (!LoadedBundles.ContainsKey(bundlePath))
            {
                LoadedBundles.Add(bundlePath, Promise.Create());
                var path    = Path.Combine(Application.streamingAssetsPath, bundlePath).Replace("\\", "/");
                var request = AssetBundle.LoadFromFileAsync(path);

                CoroutineExtensions.WaitUntil(request)
                .ThenDo(() =>
                {
                    Debug.Log($"Loaded AssetBundle at: {path}");
                    LoadedBundles[bundlePath].Resolve(request.assetBundle);
                });
            }

            return(LoadedBundles[bundlePath]);
        }
        public static IPromise LoadAsync(string path)
        {
#if UNITY_EDITOR
            if (!Application.isPlaying)
            {
                var promise = Promise.Create();
                promise.Resolve(Resources.Load(path));
                return(promise);
            }
#endif

            var p = Promise.Create();
            var resourceRequest = Resources.LoadAsync(path);

            CoroutineExtensions.WaitUntil(resourceRequest)
            .ThenLog("Loaded resource at: " + path)
            .ThenDo(() => p.Resolve(resourceRequest.asset));

            return(p);
        }
 public static IPromise LoadSceneAsync(string sceneName, LoadSceneMode mode = LoadSceneMode.Additive)
 {
     return(CoroutineExtensions.WaitUntil(SceneManager.LoadSceneAsync(sceneName, mode))
            .Then(() => WaitUntilSceneIsLoaded(SceneManager.GetSceneByName(sceneName))));
 }
 public override void Resolve(object o)
 {
     CoroutineExtensions.Tween(_time, _from, _to, _onUpdate, _easing, _unscaled).ThenResolvePromise(_promise, o);
 }
 public static IPromise LoadSceneAsync(int sceneBuildIndex, LoadSceneMode mode = LoadSceneMode.Additive)
 {
     return(CoroutineExtensions.WaitUntil(SceneManager.LoadSceneAsync(sceneBuildIndex, mode))
            .Then(() => WaitUntilSceneIsLoaded(SceneManager.GetSceneByBuildIndex(sceneBuildIndex))));
 }
 public override void Resolve(object o)
 {
     CoroutineExtensions.WaitForSeconds(_time, _unscaled).ThenResolvePromise(_promise, o);
 }
 public static IPromise UnloadSceneAsync(Scene scene)
 {
     return(CoroutineExtensions.WaitUntil(SceneManager.UnloadSceneAsync(scene)));
 }
 public static IPromise UnloadSceneAsync(int sceneBuildIndex)
 {
     return(CoroutineExtensions.WaitUntil(SceneManager.UnloadSceneAsync(sceneBuildIndex)));
 }
 private static IPromise WaitUntilSceneIsLoaded(Scene scene)
 {
     return(CoroutineExtensions.WaitUntil(() => scene.isLoaded)
            .Then(() => Promise.Resolved(scene)));
 }