From: <vo...@us...> - 2008-03-13 07:52:34
|
Revision: 674 http://opde.svn.sourceforge.net/opde/?rev=674&view=rev Author: volca Date: 2008-03-13 00:52:39 -0700 (Thu, 13 Mar 2008) Log Message: ----------- Numerous changes the Root class needed - some shortcuts added, loop mode setup introduced (two basic modes for now) Modified Paths: -------------- trunk/src/main/Root.cpp trunk/src/main/Root.h Modified: trunk/src/main/Root.cpp =================================================================== --- trunk/src/main/Root.cpp 2008-03-13 07:51:29 UTC (rev 673) +++ trunk/src/main/Root.cpp 2008-03-13 07:52:39 UTC (rev 674) @@ -32,6 +32,7 @@ #include "ConfigService.h" #include <OgreConfigFile.h> +#include "filelog.h" // Services #include "WorldRepService.h" @@ -46,6 +47,10 @@ namespace Opde { // ------------------------------------------------------- + // singleton related + template<> Root* Singleton<Root>::ms_Singleton = 0; + + // ------------------------------------------------------- Root::Root(uint serviceMask) : mLogger(NULL), mServiceMgr(NULL), @@ -53,6 +58,7 @@ mOgreLogManager(NULL), mDTypeScriptCompiler(NULL), mPLDefScriptCompiler(NULL), + mConsoleBackend(NULL), mServiceMask(serviceMask) { mLogger = new Logger(); @@ -76,11 +82,15 @@ #ifdef CUSTOM_IMAGE_HOOKS Ogre::CustomImageCodec::startup(); #endif + + mConsoleBackend = new ConsoleBackend(); // Now we need to register all the service factories registerServiceFactories(); - + mDTypeScriptCompiler = new DTypeScriptCompiler(); mPLDefScriptCompiler = new PLDefScriptCompiler(); + + setupLoopModes(); } // ------------------------------------------------------- @@ -90,11 +100,21 @@ delete mServiceMgr; + delete mConsoleBackend; + #ifdef CUSTOM_IMAGE_HOOKS Ogre::CustomImageCodec::shutdown(); #endif delete mOgreRoot; + LogListenerList::iterator it = mLogListeners.begin(); + + for (;it != mLogListeners.end(); ++it) { + mLogger->unregisterLogListener(*it); + delete *it; + } + mLogListeners.clear(); + // As the last thing - release the logger delete mLogger; @@ -186,4 +206,43 @@ new LoopServiceFactory(); new ObjectServiceFactory(); } + + // ------------------------------------------------------- + void Root::setupLoopModes() { + // Loop modes are only setup if not masked by global service mask + if (mServiceMask & SERVICE_ENGINE) { + // Loop modes are hardcoded + LoopServicePtr ls = ServiceManager::getSingleton().getService("LoopService").as<LoopService>(); + // Create all the required loop services + LoopModeDefinition def; + + // Loop mode that does no engine processing at all + def.id = 1; + def.name = "GUIOnlyLoopMode"; + def.mask = LOOPMODE_INPUT | LOOPMODE_RENDER; + + ls->createLoopMode(def); + + // Loop mode that runs all the loop clients + def.id = 0xFF; + def.name = "AllClientsLoopMode"; + def.mask = LOOPMODE_MASK_ALL_CLIENTS; + + ls->createLoopMode(def); + } + } + + // ------------------------------------------------------- + void Root::logToFile(const std::string& fname) { + LogListener* flog = new FileLog(fname); + + mLogger->registerLogListener(flog); + mLogListeners.push_back(flog); + } + + // ------------------------------------------------------- + void Root::setLogLevel(int level) { + // Call mLogger to setup the log level + mLogger->setLogLevel(level); + } } Modified: trunk/src/main/Root.h =================================================================== --- trunk/src/main/Root.h 2008-03-13 07:51:29 UTC (rev 673) +++ trunk/src/main/Root.h 2008-03-13 07:52:39 UTC (rev 674) @@ -32,6 +32,7 @@ #include "OgreOpdeLogConnector.h" #include "OpdeServiceManager.h" #include "ServiceCommon.h" +#include "ConsoleBackend.h" #include <OgreRoot.h> #include <OgreLogManager.h> @@ -75,22 +76,41 @@ /** To be called when bootstrapping process was finished */ void bootstrapFinished(); + /** @returns a pointer to the logger used */ Logger* getLogger() { return mLogger; }; + + /** @returns a pointer to the service manager */ ServiceManager* getServiceManager() { return mServiceMgr; }; + /** Creates a new logger instance that logs to a file (Logger will be automatically destroyed on termination) */ + void logToFile(const std::string& fname); + + /** A shortcut to set loglevel. Valid values are 0-4 */ + void setLogLevel(int level); + protected: + /// Registers all the service factories to the Service Manger void registerServiceFactories(); + /// Creates all the loop modes + void setupLoopModes(); - Logger* mLogger; ServiceManager* mServiceMgr; Ogre::Root* mOgreRoot; Ogre::LogManager* mOgreLogManager; OgreOpdeLogConnector* mOgreOpdeLogConnector; + /// @deprecated + ConsoleBackend* mConsoleBackend; + DTypeScriptCompiler* mDTypeScriptCompiler; PLDefScriptCompiler* mPLDefScriptCompiler; + typedef std::list< LogListener* > LogListenerList; + + + LogListenerList mLogListeners; + const unsigned int mServiceMask; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |