From ca1b93bf06a763f29f57647eb7628c2ab9a1daca Mon Sep 17 00:00:00 2001 From: Xottab-DUTY Date: Fri, 9 Nov 2018 20:27:10 +0500 Subject: [PATCH] ShoC style texture description reading --- src/xrGame/ScriptXMLInit.cpp | 7 +++++++ src/xrGame/ScriptXMLInit.h | 1 + src/xrUICore/XML/UITextureMaster.cpp | 26 ++++++++++++++++++++++++++ src/xrUICore/XML/UITextureMaster.h | 1 + 4 files changed, 35 insertions(+) diff --git a/src/xrGame/ScriptXMLInit.cpp b/src/xrGame/ScriptXMLInit.cpp index 1977b6b7c18..5d466de13a8 100644 --- a/src/xrGame/ScriptXMLInit.cpp +++ b/src/xrGame/ScriptXMLInit.cpp @@ -39,6 +39,12 @@ void _attach_child(CUIWindow* _child, CUIWindow* _parent) } void CScriptXmlInit::ParseFile(LPCSTR xml_file) { m_xml.Load(CONFIG_PATH, UI_PATH, UI_PATH_DEFAULT, xml_file); } + +void CScriptXmlInit::ParseShTexInfo(pcstr xml_file) +{ + CUITextureMaster::ParseShTexInfo(xml_file); +} + void CScriptXmlInit::InitWindow(LPCSTR path, int index, CUIWindow* pWnd) { CUIXmlInit::InitWindow(m_xml, path, index, pWnd); @@ -251,6 +257,7 @@ SCRIPT_EXPORT(CScriptXmlInit, (), { module(luaState)[class_("CScriptXmlInit") .def(constructor<>()) .def("ParseFile", &CScriptXmlInit::ParseFile) + .def("ParseShTexInfo", &CScriptXmlInit::ParseShTexInfo) .def("InitWindow", &CScriptXmlInit::InitWindow) .def("InitFrame", &CScriptXmlInit::InitFrame) .def("InitFrameLine", &CScriptXmlInit::InitFrameLine) diff --git a/src/xrGame/ScriptXMLInit.h b/src/xrGame/ScriptXMLInit.h index 21b894b6b0a..64dc9ff9971 100644 --- a/src/xrGame/ScriptXMLInit.h +++ b/src/xrGame/ScriptXMLInit.h @@ -33,6 +33,7 @@ class CScriptXmlInit { public: void ParseFile(LPCSTR xml_file); + void ParseShTexInfo(pcstr xml_file); void InitWindow(LPCSTR path, int index, CUIWindow* pWnd); CUIFrameWindow* InitFrame(LPCSTR path, CUIWindow* parent); CUIFrameLineWnd* InitFrameLine(LPCSTR path, CUIWindow* parent); diff --git a/src/xrUICore/XML/UITextureMaster.cpp b/src/xrUICore/XML/UITextureMaster.cpp index 6d3cd97dae3..6a20ea5a93c 100644 --- a/src/xrUICore/XML/UITextureMaster.cpp +++ b/src/xrUICore/XML/UITextureMaster.cpp @@ -70,6 +70,32 @@ void CUITextureMaster::ParseShTexInfo(pcstr path, pcstr xml_file) } } +void CUITextureMaster::ParseShTexInfo(pcstr xml_file) +{ + CUIXml xml; + xml.Load(CONFIG_PATH, UI_PATH, xml_file); + const shared_str file = xml.Read("file_name", 0, ""); + + const int num = xml.GetNodesNum("", 0, "texture"); + for (int i = 0; i < num; i++) + { + TEX_INFO info; + + info.file = file; + + info.rect.x1 = xml.ReadAttribFlt("texture", i, "x"); + info.rect.x2 = xml.ReadAttribFlt("texture", i, "width") + info.rect.x1; + info.rect.y1 = xml.ReadAttribFlt("texture", i, "y"); + info.rect.y2 = xml.ReadAttribFlt("texture", i, "height") + info.rect.y1; + shared_str id = xml.ReadAttrib("texture", i, "id"); + + if (m_textures.find(id) == m_textures.end()) + m_textures.emplace(id, info); + else + m_textures[id] = info; + } +} + bool CUITextureMaster::IsSh(const shared_str& texture_name) { return strstr(texture_name.c_str(), DELIMITER) ? false : true; diff --git a/src/xrUICore/XML/UITextureMaster.h b/src/xrUICore/XML/UITextureMaster.h index 4ea9cc919fb..9c444e364cc 100644 --- a/src/xrUICore/XML/UITextureMaster.h +++ b/src/xrUICore/XML/UITextureMaster.h @@ -36,6 +36,7 @@ struct sh_pair class XRUICORE_API CUITextureMaster { public: + static void ParseShTexInfo(pcstr xml_file); static void ParseShTexInfo(pcstr path, pcstr xml_file); static void FreeTexInfo(); static void FreeCachedShaders();