Ejemplo n.º 1
0
        private async UniTaskVoid GameLoopAsync(CancellationToken token = default)
        {
            GameState = GameState.Initialize;
            GameState = GameState.GameUpdate;

            var result = await UniTask.WhenAny(
                _playerProvider.GoalObservable.ToUniTask(cancellationToken: token),
                _playerProvider.GameOverObservable.ToUniTask(cancellationToken: token),
                _playerProvider.ObserveEveryValueChanged(x => x.PlayerHealth.HitPoint)
                .Where(x => x < 0f || Mathf.Approximately(x, 0f))
                .FirstOrDefault()
                .ToUniTask(cancellationToken: token)
                );

            IsCleared = result.winArgumentIndex == 0;

            if (!IsCleared)
            {
                SceneLoader.LoadScene("Title", container => { });
            }

            GameState = GameState.Result;
        }