Пример #1
0
        public async Task RunCoop(CreateCoopParameters 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 ZCoopParams
                {
                    PreferredArchitecture = settings.PreferredArchitecture,
                    Difficulty            = parameters.CoopMission?.Difficulty,
                    Level    = parameters.CoopMission?.Level,
                    Mode     = parameters.Mode,
                    FriendId = parameters.FriendId
                };

                try
                {
                    // create game to run
                    var gameProcess = await _gameFactory.CreateCoOpAsync(runParams);

                    // create worker
                    var worker = _kernel.Get <CoopGameWorker>();
                    worker.Complete += (sender, e) =>
                    {
                        _canRunNewGame = true;
                    };

                    // pass game created event
                    _OnCreated(worker, "Coop", parameters.Mode == ZPlayMode.CooperativeClient ? "Client" : "Host");

                    // run game
                    await worker.Begin(gameProcess, settings, parameters);
                }
                catch (Exception exc)
                {
                    // raise error event
                    _OnCreationError(exc.Message);

                    // reset service state
                    _canRunNewGame = true;
                }
            }
        }