void CUITalkWnd::Update() { //остановить разговор, если нужно if (g_actor && m_pActor && !m_pActor->IsTalking() ) { StopTalk(); }else{ CGameObject* pOurGO = smart_cast<CGameObject*>(m_pOurInvOwner); CGameObject* pOtherGO = smart_cast<CGameObject*>(m_pOthersInvOwner); if( NULL==pOurGO || NULL==pOtherGO ) Game().StartStopMenu(this,true); } if(m_bNeedToUpdateQuestions) { UpdateQuestions (); } inherited::Update (); UpdateCameraDirection (smart_cast<CGameObject*>(m_pOthersInvOwner)); UITalkDialogWnd->UpdateButtonsLayout(b_disable_break, m_pOthersInvOwner->IsTradeEnabled()); if(playing_sound()) { CGameObject* pOtherGO = smart_cast<CGameObject*>(m_pOthersInvOwner); Fvector P = pOtherGO->Position(); P.y += 1.8f; m_sound.set_position (P); } }
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; }
void CUITalkWnd::Update() { //остановить разговор, если нужно if (g_actor && m_pActor && !m_pActor->IsTalking() ) { Game().StartStopMenu(this,true); }else{ CGameObject* pOurGO = smart_cast<CGameObject*>(m_pOurInvOwner); CGameObject* pOtherGO = smart_cast<CGameObject*>(m_pOthersInvOwner); if(NULL==pOurGO || NULL==pOtherGO || ((pOurGO->Position().distance_to(pOtherGO->Position())>3.0f)&&!m_pOthersInvOwner->NeedOsoznanieMode()) ) Game().StartStopMenu(this,true); } if(m_bNeedToUpdateQuestions) { UpdateQuestions (); } inherited::Update (); UpdateCameraDirection (smart_cast<CGameObject*>(m_pOthersInvOwner)); }