예제 #1
0
        private async UniTask TransportInternal(TransporterView transporter)
        {
            var destination   = transporter.transform.position;
            var stateChangers =
                _gamePlayers.PlayerList.Select(x => x.GetComponent <PlayerStateChanger>()).ToList();

            // プレイヤーの入力を停止
            foreach (var player in _gamePlayers.PlayerList)
            {
                player.SetFreezeMode(true);
            }

            await UniTask.WhenAll(stateChangers.Select(x => x.DoChangeAsync(PlayerState.Photosphere)));

            var transportAsyncEnumerable = _gamePlayers.PlayerList
                                           .Select(player => DoMovePlayer(player, destination, TweenDuration))
                                           .Append(_gameCamera.MoveAsync(transporter.Owner));

            await UniTask.WhenAll(transportAsyncEnumerable);

            await UniTask.WhenAll(stateChangers.Select(x => x.DoChangeAsync(PlayerState.Neutral)));

            // プレイヤーの入力を再開
            foreach (var player in _gamePlayers.PlayerList)
            {
                player.SetFreezeMode(false);
            }

            transporter.Owner.Enter(_gamePlayers.PlayerList);
        }
예제 #2
0
        /// <summary>
        /// 転送
        /// </summary>
        /// <param name="transporter"></param>
        /// <returns></returns>
        public UniTask TransportAsync(TransporterView transporter)
        {
            if (transporter == null)
            {
                throw new ArgumentNullException(nameof(transporter));
            }

            // TODO: Play Transport Animation
            return(new UniTask(() => TransportInternal(transporter)));
        }