Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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();
            }
        }