コード例 #1
0
        private void Update()
        {
            if (_session == null)
            {
                return;
            }

            var result = _session.Process();

            switch (result.Type)
            {
            case ProcessingResult.ResultType.None:
                break;

            case ProcessingResult.ResultType.Error:
                Debug.LogError($"{result.SessionError} {result.ServerErrorId}");
                break;

            case ProcessingResult.ResultType.Joined:
                Debug.Log("Waiting for players...");
                break;

            case ProcessingResult.ResultType.Started:
                Debug.Log("Session started");
                var inputSource = new KeyboardInputSource(Keyboard.current, Key.W, Key.S);
                var viewFactory = new LevelViewFactory(_assetLoader, new UiSystem(_assetLoader, _canvas));
                _level = new NetworkLevel(inputSource, viewFactory, this, result.StartMessage);
                break;

            case ProcessingResult.ResultType.Active:
                if (!_level.HandleReceivedInputs(_session.ReceivedInputs))
                {
                    Debug.LogError(SessionError.ProtocolError);
                    break;
                }

                var(inputs, optMsgFinish) = _level.Tick();
                var optError = _session.SendMessages(inputs, optMsgFinish);
                if (optError.HasValue)
                {
                    Debug.LogError(optError.Value);
                }
                break;

            case ProcessingResult.ResultType.Finished:
                var msgFinish = result.FinishMessage;
                var frames    = string.Join(", ", msgFinish.Frames);
                var hashes    = string.Join(", ", msgFinish.Hashes);
                var(frame, simulations) = _level.SimulationStats;
                Debug.Log($"Session finished at [{frames}] with state [{hashes}]\nSimulations: {frame} / {simulations}");
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #2
0
        private void Awake()
        {
            _assetLoader = AssetLoader.Create();

            var viewFactory = new LevelViewFactory(_assetLoader, new UiSystem(_assetLoader, _canvas));
            var levelInfo   = CreateLevelInfo();

            var lInputSrc = new KeyboardInputSource(Keyboard.current, Key.W, Key.S);
            var rInputSrc = new KeyboardInputSource(Keyboard.current, Key.UpArrow, Key.DownArrow);
            var inputs    = new IInputSource[] { lInputSrc, rInputSrc };

            _level = new LocalLevel(levelInfo, inputs, viewFactory);
        }
コード例 #3
0
ファイル: HotSeatGameScreen.cs プロジェクト: dngulin/dpong
        public HotSeatGameScreen(LevelSettings levelSettings, IInputSource[] inputSources, DPong game)
        {
            var levelViewFactory = new LevelViewFactory(game.Assets, game.Ui);

            _level = new LocalLevel(levelSettings, inputSources, levelViewFactory);
        }