void CStringTable::Load (LPCSTR xml_file) { CUIXml uiXml; string_path xml_file_full; strconcat (sizeof(xml_file_full),xml_file_full, xml_file, ".xml"); string_path _s; strconcat (sizeof(_s),_s, STRING_TABLE_PATH, "\\", *(pData->m_sLanguage) ); bool xml_result = uiXml.Init(CONFIG_PATH, _s, xml_file_full); if(!xml_result) Debug.fatal(DEBUG_INFO,"string table xml file not found %s, for language %s", xml_file_full, *(pData->m_sLanguage)); //общий список всех записей таблицы в файле int string_num = uiXml.GetNodesNum (uiXml.GetRoot(), "string"); for(int i=0; i<string_num; ++i) { LPCSTR string_name = uiXml.ReadAttrib(uiXml.GetRoot(), "string", i, "id", NULL); VERIFY3 (pData->m_StringTable.find(string_name) == pData->m_StringTable.end(), "duplicate string table id", string_name); LPCSTR string_text = uiXml.Read(uiXml.GetRoot(), "string:text", i, NULL); if(m_bWriteErrorsToLog && string_text) Msg("[string table] '%s' no translation in '%s'", string_name, *(pData->m_sLanguage)); VERIFY3 (string_text, "string table entry does not has a text", string_name); STRING_VALUE str_val = ParseLine(string_text, string_name, true); pData->m_StringTable[string_name] = str_val; } }
void CUIStatsPlayerList::Init(CUIXml& xml_doc, LPCSTR path) { // init window CUIXmlInit::InitScrollView (xml_doc, path, 0, this); SetFixedScrollBar (false); m_bStatus_mode = xml_doc.ReadAttribInt(path,0,"status_mode",0)? true: false; m_bSpectator = xml_doc.ReadAttribInt(path,0,"spectator",0)? true: m_bStatus_mode; SetSpectator (m_bSpectator); // init item structure int tabsCount = xml_doc.GetNodesNum(path, 0, "field"); XML_NODE* tab_node = xml_doc.NavigateToNode(path,0); xml_doc.SetLocalRoot (tab_node); for (int i = 0; i < tabsCount; ++i) { LPCSTR name = xml_doc.ReadAttrib("field",i,"name"); float width = xml_doc.ReadAttribFlt("field",i,"width"); if (0 == xr_strcmp(name, "artefacts") && GameID() != eGameIDArtefactHunt) continue; AddField (name,width); } xml_doc.SetLocalRoot (xml_doc.GetRoot()); string256 _path; // init item text params CUIXmlInit::InitFont (xml_doc, strconcat(sizeof(_path),_path, path, ":text_format"), 0, m_i.c, m_i.f); m_i.h = xml_doc.ReadAttribFlt(strconcat(sizeof(_path),_path, path, ":text_format"), 0, "height", 25); // init list header switch (GameID()) { case eGameIDCaptureTheArtefact: case eGameIDArtefactHunt: case eGameIDTeamDeathmatch: if (!m_bSpectator || m_bStatus_mode) InitTeamHeader(xml_doc, path); case eGameIDDeathmatch: InitHeader(xml_doc, path); default: break; } }
void CMMSound::Init(CUIXml& xml_doc, LPCSTR path){ string256 _path; m_bRandom = xml_doc.ReadAttribInt(path, 0, "random")? true : false; int nodes_num = xml_doc.GetNodesNum(path, 0, "menu_music"); XML_NODE* tab_node = xml_doc.NavigateToNode(path,0); xml_doc.SetLocalRoot(tab_node); for (int i = 0; i < nodes_num; ++i) m_play_list.push_back(xml_doc.Read("menu_music", i, "")); xml_doc.SetLocalRoot(xml_doc.GetRoot()); strconcat(sizeof(_path),_path, path,":whell_sound"); if (check_file(xml_doc.Read(_path, 0, ""))) m_whell.create(xml_doc.Read(_path, 0, "") ,st_Effect,sg_SourceType); strconcat(sizeof(_path),_path, path,":whell_click"); if (check_file(xml_doc.Read(_path, 0, ""))) m_whell_click.create(xml_doc.Read(_path, 0, ""),st_Effect,sg_SourceType ); }
void CUIMMShniaga::CreateList(xr_vector<CUIStatic*>& lst, CUIXml& xml_doc, LPCSTR path){ CGameFont* pF; u32 color; float button_height = xml_doc.ReadAttribFlt("button", 0, "h"); R_ASSERT (button_height); CUIXmlInit::InitFont (xml_doc, path, 0, color, pF); R_ASSERT (pF); int nodes_num = xml_doc.GetNodesNum(path, 0, "btn"); XML_NODE* tab_node = xml_doc.NavigateToNode(path,0); xml_doc.SetLocalRoot (tab_node); CUIStatic* st; for (int i = 0; i < nodes_num; ++i) { st = new CUIStatic(); st->SetWndPos (Fvector2().set(0,0)); st->SetWndSize (Fvector2().set(m_view->GetDesiredChildWidth(), button_height)); st->SetTextComplexMode (false); st->SetTextST (xml_doc.ReadAttrib ("btn", i, "caption")); if (pF) st->SetFont (pF); float font_height = st->GetFont()->GetHeight(); UI()->ClientToScreenScaledHeight(font_height); st->SetTextY ( (button_height-font_height)/2.0f ); st->SetTextColor (color); st->SetTextAlignment (CGameFont::alCenter); st->SetWindowName (xml_doc.ReadAttrib("btn", i, "name")); st->SetMessageTarget (this); lst.push_back(st); } xml_doc.SetLocalRoot(xml_doc.GetRoot()); }
void CCharacterInfo::load_shared (LPCSTR) { const ITEM_DATA& item_data = *id_to_index::GetById(m_ProfileId); CUIXml* pXML = item_data._xml; pXML->SetLocalRoot (pXML->GetRoot()); XML_NODE* item_node = pXML->NavigateToNode(id_to_index::tag_name, item_data.pos_in_file); R_ASSERT3(item_node, "profile id=", *item_data.id); pXML->SetLocalRoot(item_node); LPCSTR spec_char = pXML->Read("specific_character", 0, NULL); if(!spec_char) { data()->m_CharacterId = NULL; LPCSTR char_class = pXML->Read ("class", 0, NULL); if(char_class) { char* buf_str = xr_strdup(char_class); xr_strlwr(buf_str); data()->m_Class = buf_str; xr_free(buf_str); } else data()->m_Class = NO_CHARACTER_CLASS; data()->m_Rank = pXML->ReadInt ("rank", 0, NO_RANK); data()->m_Reputation = pXML->ReadInt ("reputation", 0, NO_REPUTATION); } else data()->m_CharacterId = spec_char; }
void CInfoPortion::load_shared (LPCSTR) { const ITEM_DATA& item_data = *id_to_index::GetById(m_InfoId); CUIXml* pXML = item_data._xml; pXML->SetLocalRoot (pXML->GetRoot()); //loading from XML XML_NODE* pNode = pXML->NavigateToNode(id_to_index::tag_name, item_data.pos_in_file); THROW3 (pNode, "info_portion id=", *item_data.id); //список названий диалогов int dialogs_num = pXML->GetNodesNum(pNode, "dialog"); info_data()->m_DialogNames.clear(); int i = 0; for(; i<dialogs_num; ++i) { shared_str dialog_name = pXML->Read(pNode, "dialog", i,""); info_data()->m_DialogNames.push_back(dialog_name); } //список названий порций информации, которые деактивируются, //после получения этой порции int disable_num = pXML->GetNodesNum(pNode, "disable"); info_data()->m_DisableInfo.clear(); for(i=0; i<disable_num; ++i) { shared_str info_id = pXML->Read(pNode, "disable", i,""); info_data()->m_DisableInfo.push_back(info_id); } //имена скриптовых функций info_data()->m_PhraseScript.Load(pXML, pNode); //индексы статей info_data()->m_Articles.clear(); int articles_num = pXML->GetNodesNum(pNode, "article"); for(i=0; i<articles_num; ++i) { LPCSTR article_str_id = pXML->Read(pNode, "article", i, NULL); THROW(article_str_id); info_data()->m_Articles.push_back(article_str_id); } info_data()->m_ArticlesDisable.clear(); articles_num = pXML->GetNodesNum(pNode, "article_disable"); for(i=0; i<articles_num; ++i) { LPCSTR article_str_id = pXML->Read(pNode, "article_disable", i, NULL); THROW(article_str_id); info_data()->m_ArticlesDisable.push_back(article_str_id); } info_data()->m_GameTasks.clear(); int task_num = pXML->GetNodesNum(pNode, "task"); for(i=0; i<task_num; ++i) { LPCSTR task_str_id = pXML->Read(pNode, "task", i, NULL); THROW(task_str_id); info_data()->m_GameTasks.push_back(task_str_id); } }
void CUIMainIngameWnd::Init() { CUIXml uiXml; uiXml.Init (CONFIG_PATH, UI_PATH, MAININGAME_XML); CUIXmlInit xml_init; CUIWindow::Init (0,0, UI_BASE_WIDTH, UI_BASE_HEIGHT); Enable(false); AttachChild (&UIStaticHealth); xml_init.InitStatic (uiXml, "static_health", 0, &UIStaticHealth); AttachChild (&UIStaticArmor); xml_init.InitStatic (uiXml, "static_armor", 0, &UIStaticArmor); AttachChild (&UIWeaponBack); xml_init.InitStatic (uiXml, "static_weapon", 0, &UIWeaponBack); UIWeaponBack.AttachChild (&UIWeaponSignAmmo); xml_init.InitStatic (uiXml, "static_ammo", 0, &UIWeaponSignAmmo); UIWeaponSignAmmo.SetElipsis (CUIStatic::eepEnd, 2); UIWeaponBack.AttachChild (&UIWeaponIcon); xml_init.InitStatic (uiXml, "static_wpn_icon", 0, &UIWeaponIcon); UIWeaponIcon.SetShader (GetEquipmentIconsShader()); UIWeaponIcon_rect = UIWeaponIcon.GetWndRect(); //--------------------------------------------------------- AttachChild (&UIPickUpItemIcon); xml_init.InitStatic (uiXml, "pick_up_item", 0, &UIPickUpItemIcon); UIPickUpItemIcon.SetShader (GetEquipmentIconsShader()); UIPickUpItemIcon.Show (false); m_iPickUpItemIconWidth = UIPickUpItemIcon.GetWidth(); m_iPickUpItemIconHeight = UIPickUpItemIcon.GetHeight(); m_iPickUpItemIconX = UIPickUpItemIcon.GetWndRect().left; m_iPickUpItemIconY = UIPickUpItemIcon.GetWndRect().top; //--------------------------------------------------------- UIWeaponIcon.Enable (false); //индикаторы UIZoneMap->Init (); UIZoneMap->SetScale (DEFAULT_MAP_SCALE); if(IsGameTypeSingle()) { xml_init.InitStatic (uiXml, "static_pda_online", 0, &UIPdaOnline); UIZoneMap->Background().AttachChild (&UIPdaOnline); } //Полоса прогресса здоровья UIStaticHealth.AttachChild (&UIHealthBar); //. xml_init.InitAutoStaticGroup(uiXml,"static_health", &UIStaticHealth); xml_init.InitProgressBar (uiXml, "progress_bar_health", 0, &UIHealthBar); //Полоса прогресса армора UIStaticArmor.AttachChild (&UIArmorBar); //. xml_init.InitAutoStaticGroup(uiXml,"static_armor", &UIStaticArmor); xml_init.InitProgressBar (uiXml, "progress_bar_armor", 0, &UIArmorBar); // Подсказки, которые возникают при наведении прицела на объект AttachChild (&UIStaticQuickHelp); xml_init.InitStatic (uiXml, "quick_info", 0, &UIStaticQuickHelp); uiXml.SetLocalRoot (uiXml.GetRoot()); m_UIIcons = xr_new<CUIScrollView>(); m_UIIcons->SetAutoDelete(true); xml_init.InitScrollView (uiXml, "icons_scroll_view", 0, m_UIIcons); AttachChild (m_UIIcons); // Загружаем иконки if(IsGameTypeSingle()) { xml_init.InitStatic (uiXml, "starvation_static", 0, &UIStarvationIcon); UIStarvationIcon.Show (false); xml_init.InitStatic (uiXml, "psy_health_static", 0, &UIPsyHealthIcon); UIPsyHealthIcon.Show (false); } xml_init.InitStatic (uiXml, "weapon_jammed_static", 0, &UIWeaponJammedIcon); UIWeaponJammedIcon.Show (false); xml_init.InitStatic (uiXml, "radiation_static", 0, &UIRadiaitionIcon); UIRadiaitionIcon.Show (false); xml_init.InitStatic (uiXml, "wound_static", 0, &UIWoundIcon); UIWoundIcon.Show (false); xml_init.InitStatic (uiXml, "invincible_static", 0, &UIInvincibleIcon); UIInvincibleIcon.Show (false); if(GameID()==GAME_ARTEFACTHUNT){ xml_init.InitStatic (uiXml, "artefact_static", 0, &UIArtefactIcon); UIArtefactIcon.Show (false); } shared_str warningStrings[6] = { "jammed", "radiation", "wounds", "starvation", "fatigue", "invincible" }; // Загружаем пороговые значения для индикаторов EWarningIcons j = ewiWeaponJammed; while (j < ewiInvincible) { // Читаем данные порогов для каждого индикатора shared_str cfgRecord = pSettings->r_string("main_ingame_indicators_thresholds", *warningStrings[static_cast<int>(j) - 1]); u32 count = _GetItemCount(*cfgRecord); char singleThreshold[8]; float f = 0; for (u32 k = 0; k < count; ++k) { _GetItem(*cfgRecord, k, singleThreshold); sscanf(singleThreshold, "%f", &f); m_Thresholds[j].push_back(f); } j = static_cast<EWarningIcons>(j + 1); } // Flashing icons initialize uiXml.SetLocalRoot (uiXml.NavigateToNode("flashing_icons")); InitFlashingIcons (&uiXml); uiXml.SetLocalRoot (uiXml.GetRoot()); AttachChild (&UICarPanel); xml_init.InitWindow (uiXml, "car_panel", 0, &UICarPanel); AttachChild (&UIMotionIcon); UIMotionIcon.Init (); if(IsGameTypeSingle()) { m_artefactPanel->InitFromXML (uiXml, "artefact_panel", 0); this->AttachChild (m_artefactPanel); } AttachChild (&UIStaticDiskIO); UIStaticDiskIO.SetWndRect (1000,750,16,16); UIStaticDiskIO.GetUIStaticItem().SetRect(0,0,16,16); UIStaticDiskIO.InitTexture ("ui\\ui_disk_io"); UIStaticDiskIO.SetOriginalRect (0,0,32,32); UIStaticDiskIO.SetStretchTexture (TRUE); HUD_SOUND::LoadSound ("maingame_ui", "snd_new_contact" , m_contactSnd , SOUND_TYPE_IDLE); }