#include "BBCManager.h" namespace BBC { template <> Manager* CSingleton::ms_Singleton = NULL; Manager* Manager::getSingletonPtr(void) { return ms_Singleton; } Manager& Manager::getSingleton(void) { assert( ms_Singleton ); return ( *ms_Singleton ); } Manager::Manager() { // Change it when the texture generation will be included... //mOgreRoot = new Ogre::Root(); if (Ogre::Root::getSingletonPtr() == NULL) { mOgreRoot = new Ogre::Root("", "ogre.cfg", "Ogre.log"); Ogre::LogManager::getSingleton().logMessage("OgreRoot created in LBBC"); } else { mOgreRoot = Ogre::Root::getSingletonPtr(); Ogre::LogManager::getSingleton().logMessage("OgreRoot assigned in LBCC"); } mDefaultHardwareBufferManager = new Ogre::DefaultHardwareBufferManager(); mMeshSerializer = new Ogre::MeshSerializer(); mXMLMeshSerializer = new Ogre::XMLMeshSerializer(); mMath = new Ogre::Math(); loadResources(); } void Manager::loadResources() { // Load resource paths from config file Ogre::ConfigFile cf; cf.load("resources.cfg"); // Go through all sections & settings in the file Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator(); Ogre::String secName, typeName, archName; while (seci.hasMoreElements()) { secName = seci.peekNextKey(); Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); Ogre::ConfigFile::SettingsMultiMap::iterator i; for (i = settings->begin(); i != settings->end(); ++i) { typeName = i->first; archName = i->second; Ogre::ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName); } } Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); } void Manager::initRenderWindow() { // Change it when the texture generation will be included... /* // Render system. Ogre::LogManager::getSingleton().logMessage("Creating window..."); //mOgreRoot->showConfigDialog(); // Set parameters of render system (window size, etc.) mOgreRoot->restoreConfig(); mWnd = mOgreRoot->initialise(true); mWnd->resize(512,512); // Camera. mScene = mOgreRoot->getSceneManager(Ogre::ST_GENERIC); mRSys = mOgreRoot->getRenderSystem(); Ogre::LogManager::getSingleton().logMessage("Creating default camera..."); mCam = mScene->createCamera("SubMain Camera"); mCam->setPosition(-1, 22, 72); mCam->lookAt(0, 22, 0); mCam->setNearClipDistance(0.5); // Viewports. Ogre::LogManager::getSingleton().logMessage("Creating default viewort..."); mView = mWnd->addViewport(mCam); mView->setBackgroundColour(Ogre::ColourValue(1.0f,1.0f,1.0f,0)); // All set up, activate. Ogre::LogManager::getSingleton().logMessage("Setting up..."); //mWnd->setActive(true); mWnd->setActive(false); mFrameListener = new ExampleFrameListener(mWnd,mCam,false,false); mFrameListener->showDebugOverlay(false); mOgreRoot->addFrameListener(mFrameListener); */ } Manager::~Manager() { } void Manager::shutdown() { mOgreRoot->shutdown(); delete mOgreRoot; delete mMeshSerializer; delete mXMLMeshSerializer; delete mMath; // Not necessary if we have a RenderWindow... delete mDefaultHardwareBufferManager; // Change it when the texture generation will be included... //mWnd->destroy(); // Only necessary if we have a RenderWindow... //delete mFrameListener; //delete mScene; //delete mRSys; //delete mCam; //delete mView; //delete mWnd; } void Manager::initialize() { } Ogre::Mesh* Manager::loadMesh(Ogre::String name) { Ogre::MeshPtr meshPtr = Ogre::MeshManager::getSingleton().load(name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); return meshPtr.getPointer(); } Ogre::Mesh* Manager::loadXMLMesh(Ogre::String name) { Ogre::MeshPtr newMesh = Ogre::MeshManager::getSingleton().createManual(name.substr(0,((name.size()-1)-4)),Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); Ogre::VertexElementType colourElementType; if (true) { // DirectX Colour Format colourElementType = Ogre::VET_COLOUR_ARGB; } else { // OpenGL Colour Format colourElementType = Ogre::VET_COLOUR_ABGR; } mXMLMeshSerializer->importMesh(name, colourElementType, newMesh.getPointer()); return newMesh.getPointer(); } void Manager::saveMesh(Ogre::String name) { Ogre::MeshPtr meshPtr = Ogre::MeshManager::getSingleton().getByName(name); mMeshSerializer->exportMesh(meshPtr.getPointer(),name); } void Manager::saveXMLMesh(Ogre::String name) { Ogre::MeshPtr meshPtr = Ogre::MeshManager::getSingleton().getByName(name); mXMLMeshSerializer->exportMesh(meshPtr.getPointer(),name + ".xml"); } Ogre::MeshSerializer* Manager::getMeshSerializer(void) { return mMeshSerializer; } Ogre::XMLMeshSerializer* Manager::getXMLMeshSerializer(void) { return mXMLMeshSerializer; } }