public void Start()
        {
            var players = _playerProvider.GetCurrentPlayers();

            var notificators = GameObject.FindObjectsOfType <PlayerCountChanger>()
                               .Select(x => x.GetComponent <IPlayerChangeNotificator>());

            players.ForEach(CreatePlayer);


            notificators.Select(x => x.ChangePlayerCountAsObservable())
            .Merge()
            .Subscribe(x =>
            {
                if (x == 1)
                {
                    _playerManager.AddPlayer();
                }
                else
                {
                    _playerManager.RemoveLastPlayer();
                }
            }).AddTo(_disposable);

            _playerManager.AddPlayerAsObservable()
            .Subscribe(CreatePlayer)
            .AddTo(_disposable);

            _playerManager.RemovePlayerAsObservable()
            .Subscribe(RemovePlayer)
            .AddTo(_disposable);
        }
        private async UniTaskVoid RoundStartTask(GamePlaySettingData gamePlaySettingData)
        {
            Debug.Log("なんかいっぱい準備する");
            // なんかスタートする
            var players     = _playerProvider.GetCurrentPlayers();
            var spawnPoints = new Queue <Transform>();

            _stageMapSetting.GetPlayerSpawnPoints().ForEach(x => spawnPoints.Enqueue(x));

            players.ForEach(x => _stageScoreManager.AddPlayer(x));
            players.ForEach(x =>
            {
                var player                = _playerFactory.Create(x);
                var spawnPoint            = spawnPoints.Dequeue();
                player.transform.position = spawnPoint.position;
                player.transform.rotation = spawnPoint.rotation;
                var basket                = _basketFactory.Create();
                player.SetBasket(basket);
                basket.transform.localPosition = Vector3.zero;
            });

            // debug用
            var gameObject = new GameObject();
            var scoreView  = gameObject.AddComponent <DebugPlayerScoreView>();

            scoreView.Setup(_scoreManager);

            var correctedCount = 0;

            while (correctedCount < _currentGamePlaySetting.CorrectCount)
            {
                correctedCount++;

                // 次の便まで待つ
                await UniTask.Delay(TimeSpan.FromSeconds(_currentGamePlaySetting.CorrectInterval));

                // 便がくる

                // 回収装置が満タンになるまで待つ

                // 回収装置が退場する

                // ポイントが精算される。
            }


            if (_cancellationTokenSource.IsCancellationRequested)
            {
                return;
            }

            // 終了~~~~~

            SceneManager.LoadScene("ResultScene");
        }
Esempio n. 3
0
        public void Initialize()
        {
            Debug.Log("-ssssssss");
            _playerProvider.GetCurrentPlayers().ForEach(x =>
            {
                _playerScoreTable[x.ID] = 0;
            });

            _fieldObjectStateNotificator.DestructionObjectAsObservable.Subscribe(x =>
            {
                // ランダム
                _playerScoreTable[x.ID] += 10;
                Debug.Log(x.ID.ToString() + ": " + _playerScoreTable[x.ID]);
            }).AddTo(_disposable);
        }