MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / load_shared

Method load_shared

ogsr_engine/xrGame/PhraseDialog.cpp:177–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175#include "ai_space.h"
176
177void 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
232void CPhraseDialog::SetCaption(LPCSTR str) { data()->m_sCaption = str; }
233

Callers

nothing calls this directly

Calls 12

SetPriorityFunction · 0.85
lua_functionFunction · 0.85
NavigateToNodeMethod · 0.80
ReadAttribIntMethod · 0.80
functorMethod · 0.80
GetNodesNumMethod · 0.80
CheckUniqueAttribMethod · 0.80
ReadMethod · 0.45
LoadMethod · 0.45
clearMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected