public async Task RunSingleplayer(CreateSingleplayerParameters parameters) { // check possibility to run a game var possibleToRun = _IsAlreadyHasRunGame(); if (!possibleToRun || !_canRunNewGame) { _OnCreationError("You already have an active game"); } else { // set service state _canRunNewGame = false; // get game setting var settings = _GetGameSettings(parameters.Game); // create run params var runParams = new ZSingleParams { Game = parameters.Game, PreferredArchitecture = settings.PreferredArchitecture }; try { // create game to run var gameProcess = await _gameFactory.CreateSingleAsync(runParams); // create worker var worker = _kernel.Get <SingleplayerGameWorker>(); worker.Complete += (sender, e) => { _canRunNewGame = true; }; // pass game created event _OnCreated(worker, "Singleplayer", "Campaign"); // run game await worker.Begin(gameProcess, settings, parameters); } catch (Exception exc) { // raise error event _OnCreationError(exc.Message); // reset service state _canRunNewGame = true; } } }
internal static async Task MainAsync(string[] args) { #region Get target game from User // select game Console.Write($"Select target game where {ZGame.BF3}[1] {ZGame.BF4}[2] {ZGame.BFH}[3]: "); // get user input var gameSelectUserInput = Console.ReadLine(); // validate input if (!int.TryParse(gameSelectUserInput, out var targetGame) || targetGame <= 0 || targetGame > 3) { throw new InvalidOperationException("Invalid input!"); } // cuz BF3 = 0 var game = (ZGame)targetGame - 1; #endregion #region Get target game mode // select game mode Console.Write($"Select game mode where {ZPlayMode.Singleplayer}[1] {ZPlayMode.Multiplayer}[2] \n"); // get user input var gameModeSelectUserInput = Console.ReadLine(); // validate input if (!int.TryParse(gameModeSelectUserInput, out var targetGameMode) || targetGameMode <= 0 || targetGameMode > 2) { throw new InvalidOperationException("Invalid input!"); } // cuz Singleplayer = 0 var gameMode = (ZPlayMode)targetGameMode; #endregion switch (gameMode) { // create and run singleplayer game case ZPlayMode.Singleplayer: // create game var gameProcess = await _gameFactory.CreateSingleAsync(new ZSingleParams { Game = game }); // run and track game pipe await _RunAndTrack(gameProcess); break; case ZPlayMode.Multiplayer: await _MultiplayerHandler(game); break; case ZPlayMode.CooperativeHost: case ZPlayMode.CooperativeClient: case ZPlayMode.TestRange: default: throw new ArgumentOutOfRangeException(); } }