| 175 | #include "ai_space.h" |
| 176 | |
| 177 | void CPhraseDialog::load_shared(LPCSTR) |
| 178 | { |
| 179 | const ITEM_DATA& item_data = *id_to_index::GetById(m_DialogId); |
| 180 | |
| 181 | CUIXml* pXML = item_data._xml; |
| 182 | pXML->SetLocalRoot(pXML->GetRoot()); |
| 183 | |
| 184 | // loading from XML |
| 185 | XML_NODE* dialog_node = pXML->NavigateToNode(id_to_index::tag_name, item_data.pos_in_file); |
| 186 | THROW3(dialog_node, "dialog id=", *item_data.id); |
| 187 | |
| 188 | pXML->SetLocalRoot(dialog_node); |
| 189 | |
| 190 | SetPriority(pXML->ReadAttribInt(dialog_node, "priority", 0)); |
| 191 | |
| 192 | //заголовок |
| 193 | SetCaption(pXML->Read(dialog_node, "caption", 0, NULL)); |
| 194 | |
| 195 | SetForceReload(!!pXML->ReadAttribInt(dialog_node, "force_reload", 0)); |
| 196 | |
| 197 | //предикаты начала диалога |
| 198 | data()->m_PhraseScript.Load(pXML, dialog_node); |
| 199 | |
| 200 | //заполнить граф диалога фразами |
| 201 | data()->m_PhraseGraph.clear(); |
| 202 | |
| 203 | XML_NODE* phrase_list_node = pXML->NavigateToNode(dialog_node, "phrase_list", 0); |
| 204 | if (NULL == phrase_list_node && !GetForceReload()) |
| 205 | { |
| 206 | data()->m_sInitFunction = pXML->Read(dialog_node, "init_func", 0, ""); |
| 207 | |
| 208 | luabind::functor<void> lua_function; |
| 209 | bool functor_exists = ai().script_engine().functor(data()->m_sInitFunction.c_str(), lua_function); |
| 210 | ASSERT_FMT_DBG(functor_exists, "!![%s] Cannot find precondition [%s]", __FUNCTION__, data()->m_sInitFunction.c_str()); |
| 211 | if (functor_exists) |
| 212 | lua_function(this); |
| 213 | |
| 214 | return; |
| 215 | } |
| 216 | |
| 217 | THROW3(pXML->GetNodesNum(phrase_list_node, "phrase"), "dialog %s has no phrases at all", *item_data.id); |
| 218 | |
| 219 | pXML->SetLocalRoot(phrase_list_node); |
| 220 | |
| 221 | #ifdef DEBUG // debug & mixed |
| 222 | LPCSTR wrong_phrase_id = pXML->CheckUniqueAttrib(phrase_list_node, "phrase", "id"); |
| 223 | THROW3(wrong_phrase_id == NULL, *item_data.id, wrong_phrase_id); |
| 224 | #endif |
| 225 | |
| 226 | //ищем стартовую фразу |
| 227 | XML_NODE* phrase_node = pXML->NavigateToNodeWithAttribute("phrase", "id", "0"); |
| 228 | THROW(phrase_node); |
| 229 | AddPhrase(pXML, phrase_node, "0", ""); |
| 230 | } |
| 231 | |
| 232 | void CPhraseDialog::SetCaption(LPCSTR str) { data()->m_sCaption = str; } |
| 233 |
nothing calls this directly
no test coverage detected