예제 #1
0
 public void SelectChatTextBox()
 {
     _chatTextBoxActions.FocusChatTextBox();
 }
예제 #2
0
        public async Task LoginToCharacter(ICharacter character)
        {
            var requestCharacterLoginOperation = _networkOperationFactory.CreateSafeBlockingOperation(
                async() => await _loginActions.RequestCharacterLogin(character),
                SetInitialStateAndShowError, SetInitialStateAndShowError);

            if (!await requestCharacterLoginOperation.Invoke())
            {
                return;
            }

            var unableToLoadMap = false;

            try
            {
                _mapFileLoadActions.LoadMapFileByID(_currentMapStateProvider.CurrentMapID);
            }
            catch (IOException)
            {
                // Try to load the map now that we know what Map ID we need
                // non-fatal exception
                unableToLoadMap = true;
            }

            GameLoadingDialog gameLoadingDialog = null;

            try
            {
                gameLoadingDialog = _gameLoadingDialogFactory.CreateGameLoadingDialog();
                gameLoadingDialog.ShowDialog();

                await InitialDelayInReleaseMode();

                if (unableToLoadMap || _fileRequestActions.NeedsFileForLogin(InitFileType.Map, _currentMapStateProvider.CurrentMapID))
                {
                    gameLoadingDialog.SetState(GameLoadingDialogState.Map);
                    if (!await SafeGetFile(async() => await _fileRequestActions.GetMapFromServer(_currentMapStateProvider.CurrentMapID)))
                    {
                        return;
                    }
                    await Task.Delay(1000);
                }

                if (_fileRequestActions.NeedsFileForLogin(InitFileType.Item))
                {
                    gameLoadingDialog.SetState(GameLoadingDialogState.Item);
                    if (!await SafeGetFile(_fileRequestActions.GetItemFileFromServer))
                    {
                        return;
                    }
                    await Task.Delay(1000);
                }

                if (_fileRequestActions.NeedsFileForLogin(InitFileType.Npc))
                {
                    gameLoadingDialog.SetState(GameLoadingDialogState.NPC);
                    if (!await SafeGetFile(_fileRequestActions.GetNPCFileFromServer))
                    {
                        return;
                    }
                    await Task.Delay(1000);
                }

                if (_fileRequestActions.NeedsFileForLogin(InitFileType.Spell))
                {
                    gameLoadingDialog.SetState(GameLoadingDialogState.Spell);
                    if (!await SafeGetFile(_fileRequestActions.GetSpellFileFromServer))
                    {
                        return;
                    }
                    await Task.Delay(1000);
                }

                if (_fileRequestActions.NeedsFileForLogin(InitFileType.Class))
                {
                    gameLoadingDialog.SetState(GameLoadingDialogState.Class);
                    if (!await SafeGetFile(_fileRequestActions.GetClassFileFromServer))
                    {
                        return;
                    }
                    await Task.Delay(1000);
                }

                gameLoadingDialog.SetState(GameLoadingDialogState.LoadingGame);

                var completeCharacterLoginOperation = _networkOperationFactory.CreateSafeBlockingOperation(
                    _loginActions.CompleteCharacterLogin,
                    SetInitialStateAndShowError,
                    SetInitialStateAndShowError);
                if (!await completeCharacterLoginOperation.Invoke())
                {
                    return;
                }

                await Task.Delay(1000); //always wait 1 second
            }
            finally
            {
                if (gameLoadingDialog != null)
                {
                    gameLoadingDialog.CloseDialog();
                }
            }

            _gameStateActions.ChangeToState(GameStates.PlayingTheGame);
            _chatTextBoxActions.FocusChatTextBox();
            _statusLabelSetter.SetStatusLabel(EOResourceID.STATUS_LABEL_TYPE_WARNING,
                                              EOResourceID.LOADING_GAME_HINT_FIRST);
            _firstTimePlayerActions.WarnFirstTimePlayers();
            _mapChangedActions.ActiveCharacterEnterMapForLogin();
        }