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(); } }
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); }
public HotSeatGameScreen(LevelSettings levelSettings, IInputSource[] inputSources, DPong game) { var levelViewFactory = new LevelViewFactory(game.Assets, game.Ui); _level = new LocalLevel(levelSettings, inputSources, levelViewFactory); }