void CUITalkWnd::AskQuestion() { if(m_bNeedToUpdateQuestions) return;//quick dblclick:( shared_str phrase_id; //игрок выбрал тему разговора if(TopicMode()) { if ( (UITalkDialogWnd->m_ClickedQuestionID =="") || (!m_pOurDialogManager->HaveAvailableDialog(UITalkDialogWnd->m_ClickedQuestionID)) ) { string128 s; sprintf_s (s,"ID = [%s] of selected question is out of range of available dialogs ",UITalkDialogWnd->m_ClickedQuestionID); VERIFY2(FALSE, s); } m_pCurrentDialog = m_pOurDialogManager->GetDialogByID( UITalkDialogWnd->m_ClickedQuestionID); m_pOurDialogManager->InitDialog(m_pOthersDialogManager, m_pCurrentDialog); phrase_id = "0"; } else { phrase_id = UITalkDialogWnd->m_ClickedQuestionID; } SayPhrase (phrase_id); NeedUpdateQuestions (); }
void CUITalkWnd::AskQuestion() { if(m_bNeedToUpdateQuestions) return;//quick dblclick:( int phrase_id; //игрок выбрал тему разговора if(TopicMode()) { if ( (UITalkDialogWnd->m_iClickedQuestion < 0) || (UITalkDialogWnd->m_iClickedQuestion >= (int)m_pOurDialogManager->AvailableDialogs().size()) ) { string128 s; sprintf (s,"ID = [%i] of selected question is out of range of available dialogs ",UITalkDialogWnd->m_iClickedQuestion); VERIFY2(FALSE, s); } m_pCurrentDialog = m_pOurDialogManager->AvailableDialogs()[UITalkDialogWnd->m_iClickedQuestion]; m_pOurDialogManager->InitDialog(m_pOthersDialogManager, m_pCurrentDialog); phrase_id = 0; } else { phrase_id = (int)UITalkDialogWnd->m_iClickedQuestion; } SayPhrase(phrase_id); NeedUpdateQuestions(); }
void CUITalkWnd::UpdateQuestions() { UITalkDialogWnd->ClearQuestions(); //если нет активного диалога, то //режима выбора темы if(!m_pCurrentDialog) { m_pOurDialogManager->UpdateAvailableDialogs(m_pOthersDialogManager); for(u32 i=0; i< m_pOurDialogManager->AvailableDialogs().size(); ++i) { const DIALOG_SHARED_PTR& phrase_dialog = m_pOurDialogManager->AvailableDialogs()[i]; #ifdef NUM_PHRASES AddQuestion(phrase_dialog->DialogCaption(), phrase_dialog->GetDialogID(), i); #else AddQuestion(phrase_dialog->DialogCaption(), phrase_dialog->GetDialogID()); #endif } } else { if(m_pCurrentDialog->IsWeSpeaking(m_pOurDialogManager)) { //если в списке допустимых фраз только одна фраза пустышка, то просто //сказать (игрок сам не производит никаких действий) if( !m_pCurrentDialog->PhraseList().empty() && m_pCurrentDialog->allIsDummy() ){ CPhrase* phrase = m_pCurrentDialog->PhraseList()[Random.randI(m_pCurrentDialog->PhraseList().size())]; SayPhrase(phrase->GetID()); }; //выбор доступных фраз из активного диалога if( m_pCurrentDialog && !m_pCurrentDialog->allIsDummy() ) { #ifdef NUM_PHRASES int number = 0; for(PHRASE_VECTOR::const_iterator it = m_pCurrentDialog->PhraseList().begin(); it != m_pCurrentDialog->PhraseList().end(); it++, number++) { CPhrase* phrase = *it; AddQuestion(m_pCurrentDialog->GetPhraseText(phrase->GetID()), phrase->GetID(), number); } #else for(PHRASE_VECTOR::const_iterator it = m_pCurrentDialog->PhraseList().begin(); it != m_pCurrentDialog->PhraseList().end(); it++) { CPhrase* phrase = *it; AddQuestion( m_pCurrentDialog->GetPhraseText( phrase->GetID() ), phrase->GetID() ); } #endif } else UpdateQuestions(); } } m_bNeedToUpdateQuestions = false; }