| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #include <OgreRoot.h>
- #include <OgreStringVector.h>
- #include "core/Logger.h"
- #include "core/ScriptManager.h"
- #include "core/UiManager.h"
- #include "core/Utilites.h"
- #include "core/XmlFontsFile.h"
- #include "core/XmlPrototypesFile.h"
- #include "core/XmlScreensFile.h"
- #include "core/XmlTextsFile.h"
- template<>UiManager *Ogre::Singleton<UiManager>::msSingleton = nullptr;
- UiManager::UiManager()
- {
- Ogre::Root::getSingleton().getSceneManager("Scene")->addRenderQueueListener(this);
- }
- UiManager::~UiManager()
- {
- Ogre::Root::getSingleton().getSceneManager("Scene")->removeRenderQueueListener(this);
- UnloadTexts();
- for(size_t i = 0; i < m_Fonts.size(); ++i)
- {
- delete m_Fonts[i];
- }
- for(size_t i = 0; i < m_Widgets.size(); ++i)
- {
- delete m_Widgets[i];
- }
- }
- void
- UiManager::Initialise()
- {
- XmlFontsFile fonts("./data/fonts.xml");
- fonts.LoadFonts();
- XmlPrototypesFile prototypes("./data/screens/prototypes.xml");
- prototypes.LoadPrototypes();
- XmlScreensFile screens("./data/screens.xml");
- screens.LoadScreens();
- }
- void
- UiManager::Update()
- {
- // update all ui scripts
- ScriptManager::getSingleton().Update(ScriptManager::UI);
- for(unsigned int i = 0; i < m_Widgets.size(); ++i)
- {
- m_Widgets[i]->Update();
- }
- }
- void
- UiManager::OnResize()
- {
- for(unsigned int i = 0; i < m_Widgets.size(); ++i)
- {
- m_Widgets[i]->OnResize();
- }
- }
- void
- UiManager::SetLanguage(const Ogre::String& language)
- {
- UnloadTexts();
- XmlTextsFile texts("./data/texts.xml");
- texts.LoadTexts(language);
- }
- void
- UiManager::AddText(const Ogre::String& name, TiXmlNode* text)
- {
- UiText ui_text;
- ui_text.name = name;
- ui_text.node = text;
- m_Texts.push_back(ui_text);
- }
- void
- UiManager::UnloadTexts()
- {
- for(unsigned int i = 0; i < m_Texts.size(); ++i)
- {
- delete m_Texts[i].node;
- }
- m_Texts.clear();
- }
- TiXmlNode*
- UiManager::GetText(const Ogre::String& name) const
- {
- for(unsigned int i = 0; i < m_Texts.size(); ++i)
- {
- if(m_Texts[i].name == name)
- {
- return m_Texts[i].node;
- }
- }
- return nullptr;
- }
- void
- UiManager::AddFont(UiFont* font)
- {
- m_Fonts.push_back(font);
- }
- UiFont*
- UiManager::GetFont(const Ogre::String& name)
- {
- for(unsigned int i = 0; i < m_Fonts.size(); ++i)
- {
- if(m_Fonts[i]->GetName() == name)
- {
- return m_Fonts[i];
- }
- }
- return nullptr;
- }
- void
- UiManager::AddPrototype(const Ogre::String& name, TiXmlNode* prototype)
- {
- UiPrototype ui_prototype;
- ui_prototype.name = name;
- ui_prototype.node = prototype;
- m_Prototypes.push_back(ui_prototype);
- }
- TiXmlNode*
- UiManager::GetPrototype(const Ogre::String& name) const
- {
- for(unsigned int i = 0; i < m_Prototypes.size(); ++i)
- {
- if(m_Prototypes[i].name == name)
- {
- return m_Prototypes[i].node;
- }
- }
- return nullptr;
- }
- void
- UiManager::AddWidget(UiWidget* widget)
- {
- m_Widgets.push_back(widget);
- }
- UiWidget*
- UiManager::GetWidget(const Ogre::String& name)
- {
- // get real table by name
- Ogre::StringVector table_path = StringTokenise(name, ".");
- UiWidget* widget = nullptr;
- if(table_path.size() > 0)
- {
- for(unsigned int i = 0; i < m_Widgets.size(); ++i)
- {
- if(m_Widgets[i]->GetName() == table_path[0])
- {
- widget = m_Widgets[i];
- for(unsigned int j = 1; (j < table_path.size()) && (widget != nullptr); ++j)
- {
- widget = widget->GetChild(table_path[j]);
- }
- }
- }
- }
- return widget;
- }
- UiWidget*
- UiManager::ScriptGetWidget(const char* name)
- {
- return GetWidget(Ogre::String(name));
- }
- void
- UiManager::renderQueueStarted(Ogre::uint8 queueGroupId, const Ogre::String& invocation, bool& skipThisInvocation)
- {
- if(queueGroupId == Ogre::RENDER_QUEUE_OVERLAY)
- {
- Ogre::Root::getSingletonPtr()->getRenderSystem()->clearFrameBuffer(Ogre::FBT_DEPTH);
- for(unsigned int i = 0; i < m_Widgets.size(); ++i)
- {
- m_Widgets[i]->Render();
- }
- }
- }
|