21 #include "CaelumPrecompiled.h" 22 #include "CaelumPlugin.h" 25 #if OGRE_VERSION_MINOR < 8 26 #define SINGLETON_MEMBER ms_Singleton 28 #define SINGLETON_MEMBER msSingleton 31 #if OGRE_VERSION_MINOR >= 9 43 return SINGLETON_MEMBER;
47 assert (SINGLETON_MEMBER);
48 return *SINGLETON_MEMBER;
51 extern "C" void CAELUM_EXPORT dllStartPlugin () {
52 assert (CaelumPlugin::getSingletonPtr () == 0);
54 assert (CaelumPlugin::getSingletonPtr () == plugin);
55 Ogre::Root::getSingleton ().installPlugin (CaelumPlugin::getSingletonPtr ());
58 extern "C" void CAELUM_EXPORT dllStopPlugin () {
59 assert (CaelumPlugin::getSingletonPtr () != 0);
60 Ogre::Root::getSingleton ().uninstallPlugin (CaelumPlugin::getSingletonPtr ());
61 delete CaelumPlugin::getSingletonPtr ();
62 assert (CaelumPlugin::getSingletonPtr () == 0);
65 #if CAELUM_SCRIPT_SUPPORT 66 CaelumPlugin::CaelumPlugin(): mScriptTranslatorManager(&mTypeDescriptorData)
68 CaelumPlugin::CaelumPlugin()
74 CaelumPlugin::~CaelumPlugin() {
77 const Ogre::String CaelumPlugin::CAELUM_PLUGIN_NAME =
"Caelum";
79 const Ogre::String& CaelumPlugin::getName ()
const {
80 return CAELUM_PLUGIN_NAME;
83 void CaelumPlugin::install ()
85 assert(!mIsInstalled &&
"Already installed");
87 Ogre::LogManager::getSingleton ().logMessage(
"Caelum plugin version " +
88 Ogre::StringConverter::toString (CAELUM_VERSION_MAIN) +
"." +
89 Ogre::StringConverter::toString (CAELUM_VERSION_SEC) +
"." +
90 Ogre::StringConverter::toString (CAELUM_VERSION_TER) +
" " 93 #if CAELUM_SCRIPT_SUPPORT 94 Ogre::ScriptCompilerManager::getSingleton ().addTranslatorManager (
95 getScriptTranslatorManager ());
96 Ogre::ResourceGroupManager::getSingleton()._registerResourceManager (
97 getPropScriptResourceManager ()->getResourceType (),
98 getPropScriptResourceManager ());
100 getScriptTranslatorManager()->_setPropScriptResourceManager (
101 &mPropScriptResourceManager);
102 #endif // CAELUM_SCRIPT_SUPPORT 107 void CaelumPlugin::initialise () {
110 void CaelumPlugin::shutdown () {
113 void CaelumPlugin::uninstall ()
115 assert(mIsInstalled &&
"Not installed");
117 #if CAELUM_SCRIPT_SUPPORT 118 getScriptTranslatorManager()->_setPropScriptResourceManager (0);
120 Ogre::ResourceGroupManager::getSingleton ()._unregisterResourceManager (
121 getPropScriptResourceManager ()->getResourceType ());
122 Ogre::ScriptCompilerManager::getSingleton ().removeTranslatorManager (
123 getScriptTranslatorManager ());
124 #endif // CAELUM_SCRIPT_SUPPORT 126 Ogre::LogManager::getSingleton ().logMessage(
"Caelum plugin uninstalled");
128 mIsInstalled =
false;
131 #if CAELUM_SCRIPT_SUPPORT 132 void CaelumPlugin::loadCaelumSystemFromScript (
134 const Ogre::String& objectName,
135 const Ogre::String& groupName)
138 assert (this->isInstalled () &&
"Must install CaelumPlugin before loading scripts");
141 #if OGRE_VERSION >= 0x00010900 142 Ogre::ResourcePtr res = getPropScriptResourceManager ()->createOrRetrieve (objectName, groupName).first;
143 #elif OGRE_VERSION >= 0x00010700 144 Ogre::ResourcePtr res = getPropScriptResourceManager ()->getByName (objectName, groupName);
146 Ogre::ResourcePtr res = getPropScriptResourceManager ()->getByName (objectName);
150 PropScriptResource* propRes =
static_cast<PropScriptResource*
> (res.get ());
152 OGRE_EXCEPT (Ogre::Exception::ERR_ITEM_NOT_FOUND,
153 "Could not find caelum_sky_system " + objectName,
154 "CaelumPlugin::loadCaelumSystemFromScript");
158 const Ogre::String& scriptFileName = propRes->getOrigin();
159 const Ogre::String& scriptFileGroup = propRes->getGroup();
160 Ogre::DataStreamPtr streamPtr = Ogre::ResourceGroupManager::getSingleton ().openResource (
161 scriptFileName, scriptFileGroup,
false);
164 this->getScriptTranslatorManager()->getCaelumSystemTranslator()->setTranslationTarget (sys, objectName);
165 Ogre::ScriptCompilerManager::getSingleton ().parseScript (streamPtr, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
166 bool found = this->getScriptTranslatorManager()->getCaelumSystemTranslator()->foundTranslationTarget ();
170 OGRE_EXCEPT (Ogre::Exception::ERR_ITEM_NOT_FOUND,
171 "Could not find caelum_sky_system " + objectName +
" in file " + scriptFileName +
" on reparsing. " 172 "Perhaps information in PropScriptResourceManager is out of date?",
173 "CaelumPlugin::loadCaelumSystemFromScript");
175 this->getScriptTranslatorManager()->getCaelumSystemTranslator()->clearTranslationTarget ();
177 #endif // CAELUM_SCRIPT_SUPPORT This is the "root class" of caelum.
Implement an Ogre::Plugin for Caelum.