コード例 #1
0
        public Coroutine Unload(Action <float> onProgress = null)
        {
            if (this.isUnloading)
            {
                return(null);
            }
            if (!IsLoaded)
            {
                return(null);
            }
            return(CorouWaiter.Start(GetRoutine()));

            IEnumerator GetRoutine()
            {
                try { OnStartUnload(); } catch (Exception e) { Debug.LogError(e); }
                this.isUnloading = true;
                var  operation = SceneManager.UnloadSceneAsync(this.BuildIndex);
                bool done      = false;

                OnUnload += Unloaded;
                void Unloaded(SceneWrapper wrapper)
                {
                    OnUnload -= Unloaded;
                    done      = true;
                }

                while (!done)
                {
                    onProgress?.Invoke(operation.progress / 0.9f);
                    yield return(null);
                }
                this.isUnloading = false;
                try { OnFinishUnload(); } catch (Exception e) { Debug.LogError(e); }
            }
        }
コード例 #2
0
    public static Coroutine StopGame()
    {
        return(CorouWaiter.Start(Routine()));

        IEnumerator Routine()
        {
            PauseManager.PauseEnabled = false;
            yield return(SceneLoadingManager.LoadMenu());
        }
    }
コード例 #3
0
    public static void StartLevel(int id)
    {
        _currentLevelId = id;
        Debug.LogWarning($"START LEVEL: {_currentLevelId}");
        CorouWaiter.Start(Routine());
        IEnumerator Routine()
        {
            PauseManager.PauseEnabled = true;
            yield return(SceneLoadingManager.LoadGame());

            MatchController.I.StartMatch(id);
        }
    }
コード例 #4
0
    public static Coroutine FirstLoad()
    {
        return(CorouWaiter.Start(GetRoutine()));

        IEnumerator GetRoutine()
        {
            yield return(ShowWaitScreen(true));

            yield return(UnloadAll());

            yield return(LoadScenes(MainMenuScenes));

            yield return(HideWaitScreen());
        }
    }
コード例 #5
0
    public static Coroutine StartGame()
    {
        return(CorouWaiter.Start(Routine()));

        IEnumerator Routine()
        {
            yield return(SceneLoadingManager.LoadGame(onCompleteLoad: () => InitGame()));
        }

        void InitGame()
        {
            GameView.I.Init();
            PauseManager.PauseEnabled = true;
        }
    }
コード例 #6
0
    public static Coroutine LoadGame()
    {
        return(CorouWaiter.Start(GetRoutine()));

        IEnumerator GetRoutine()
        {
            yield return(ShowWaitScreen());

            yield return(UnloadAll());

            yield return(LoadScenes(GameScenes));

            yield return(HideWaitScreen());
        }
    }
コード例 #7
0
    public static Coroutine StartGame()
    {
        return(CorouWaiter.Start(Routine()));

        IEnumerator Routine()
        {
            yield return(SceneLoadingManager.LoadGame(onCompleteLoad: () => InitGame()));
        }

        void InitGame()
        {
            GameView.I.Init();
            GameView.I.Player.OnAllPlanetsCaptured += () => PopupManager.OpenPopup <EndLevelPopup>().SetWindow(true);
            PauseManager.PauseEnabled = true;
        }
    }
コード例 #8
0
    public static Coroutine LoadGame(Action onStartLoad = null, Action onCompleteLoad = null)
    {
        return(CorouWaiter.Start(GetRoutine()));

        IEnumerator GetRoutine()
        {
            yield return(ShowWaitScreen());

            onStartLoad?.Invoke();
            yield return(UnloadAll());

            yield return(LoadScenes(GameScenes));

            onCompleteLoad?.Invoke();
            yield return(HideWaitScreen());
        }
    }
コード例 #9
0
    public Coroutine Hide(bool forced = false)
    {
        return(CorouWaiter.Start(GetRoutine()));

        IEnumerator GetRoutine()
        {
            if (!forced)
            {
                this.background.color = this.background.color.SetAlpha(1f);
                this.spinnerContainer.anchoredPosition = this.spinnerPointOn.anchoredPosition;
                var sequence = DOTween.Sequence()
                               .Append(this.background.DOFade(0f, this.duration).SetEase(Ease.InOutSine))
                               .Join(this.spinnerContainer.DOAnchorPos(this.spinnerPointOff.anchoredPosition, this.duration).SetEase(Ease.InSine));
                yield return(sequence.WaitForCompletion(true));
            }
            this.waitScreenGo.SetActive(false);
            yield break;
        }
    }
コード例 #10
0
    public static Coroutine UnloadScenes(IList <SceneKind> kinds)
    {
        return(CorouWaiter.Start(GetRoutine()));

        IEnumerator GetRoutine()
        {
            var operations = new List <Coroutine>(kinds.Count);

            foreach (var kind in kinds)
            {
                var wrapper = SceneWrapper.GetWrapper(kind);
                operations.Add(wrapper.Unload());
            }
            foreach (var operation in operations)
            {
                yield return(operation);
            }
            yield break;
        }
    }
コード例 #11
0
        public Coroutine Load(bool allowActivation = true, LoadSceneMode mode = LoadSceneMode.Additive, Action <float> onProgress = null)
        {
            if (this.isLoading)
            {
                return(null);
            }
            if (IsLoaded)
            {
                return(null);
            }
            return(CorouWaiter.Start(GetRoutine()));

            IEnumerator GetRoutine()
            {
                try { OnStartLoad(); } catch (Exception e) { Debug.LogError(e); }
                this.isLoading = true;
                var operation = SceneManager.LoadSceneAsync(this.BuildIndex, mode);

                operation.allowSceneActivation = allowActivation;
                bool done = false;

                OnLoad += Loaded;
                void Loaded(SceneWrapper wrapper)
                {
                    OnLoad -= Loaded;
                    done    = true;
                }

                while (!done)
                {
                    onProgress?.Invoke(operation.progress / 0.9f);
                    yield return(null);
                }
                this.isLoading = false;
                try { OnFinishLoad(); } catch (Exception e) { Debug.LogError(e); }
            }
        }
コード例 #12
0
    public void StartMatch(int levelId)
    {
        this.preset = LevelPresetData.GetPreset(levelId);
        CorouWaiter.Start(Routine());
        IEnumerator Routine()
        {
            yield return(CorouWaiter.WaitFor(() => PlayerController.I != null));

            yield return(CorouWaiter.WaitFor(() => UserHUDController.I != null));

            PlayerController.I.Player.Health.OnDamage += (_, hp) => UserHUDController.I.SetHp(hp);
            PlayerController.I.Player.Health.OnDead   += StopMatch;

            var waitSecond = new WaitForSeconds(1f);
            int counter    = 3;

            while (counter-- > 0)
            {
                Debug.Log(counter + 1);
                yield return(waitSecond);
            }

            Debug.Log("Math started!");

            var waitSpawn = new WaitForSeconds(this.preset.duration / (float)this.preset.count);

            counter = this.preset.count;
            while (counter-- > 0)
            {
                var enemy = spawner.SpawnEnemy();
                enemy.OnCollide += Damage;
                void Damage(Enemy e, Collision c)
                {
                    enemy.OnCollide -= Damage;
                    var health = c.collider.GetComponentInParent <PlayerHealth>();

                    if (health != null)
                    {
                        health.SetDamage(1, enemy.GO);
                    }
                }

                enemy.OnDeadByPlayer += Kill;
                void Kill(Enemy e)
                {
                    enemy.OnDeadByPlayer -= Kill;
                    ++this.killCount;
                }

                enemy.OnDestroyEvent += Destroy;
                void Destroy(Enemy e)
                {
                    enemy.OnDestroyEvent -= Destroy;
                    ++this.destroyCount;
                    if (this.destroyCount == this.preset.count)
                    {
                        StopMatch();
                    }
                }

                yield return(waitSpawn);
            }
        }
    }