Changeset 263 for code/trunk
- Timestamp:
- Nov 26, 2007, 5:16:25 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/orxonox.cc
r258 r263 74 74 #endif 75 75 76 namespace orxonox 77 { 78 class OrxExitListener : public Ogre::FrameListener 79 { 80 public: 81 OrxExitListener(OIS::Keyboard *keyboard) 82 : mKeyboard(keyboard) 83 { 84 } 85 86 bool frameStarted(const Ogre::FrameEvent& evt) 87 { 88 mKeyboard->capture(); 89 return !mKeyboard->isKeyDown(OIS::KC_ESCAPE); 90 } 91 92 private: 93 OIS::Keyboard *mKeyboard; 94 }; 95 96 class OrxApplication 97 { 98 public: 99 void go() 100 { 101 createRoot(); 102 defineResources(); 103 setupRenderSystem(); 104 createRenderWindow(); 105 initializeResourceGroups(); 106 createScene(); 107 setupScene(); 108 setupInputSystem(); 109 setupCEGUI(); 110 createFrameListener(); 111 startRenderLoop(); 112 } 113 114 ~OrxApplication() 115 { 116 mInputManager->destroyInputObject(mKeyboard); 117 OIS::InputManager::destroyInputSystem(mInputManager); 118 119 // delete mRenderer; 120 // delete mSystem; 121 122 delete mListener; 123 delete mRoot; 124 } 125 126 private: 127 Ogre::Root *mRoot; 128 OIS::Keyboard *mKeyboard; 129 OIS::Mouse *mMouse; 130 OIS::InputManager *mInputManager; 131 CEGUI::OgreCEGUIRenderer *mRenderer; 132 CEGUI::System *mSystem; 133 OrxExitListener *mListener; 134 135 void createRoot() 136 { 137 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE 138 mRoot = new Ogre::Root(macBundlePath() + "/Contents/Resources/plugins.cfg"); 139 #else 140 mRoot = new Ogre::Root(); 141 #endif 142 } 143 144 void defineResources() 145 { 146 Ogre::String secName, typeName, archName; 147 Ogre::ConfigFile cf; 148 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE 149 cf.load(macBundlePath() + "/Contents/Resources/resources.cfg"); 150 #else 151 cf.load("resources.cfg"); 152 #endif 153 154 Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator(); 155 while (seci.hasMoreElements()) 156 { 157 secName = seci.peekNextKey(); 158 Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); 159 Ogre::ConfigFile::SettingsMultiMap::iterator i; 160 for (i = settings->begin(); i != settings->end(); ++i) 161 { 162 typeName = i->first; 163 archName = i->second; 164 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE 165 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( String(macBundlePath() + "/" + archName), typeName, secName); 166 #else 167 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName); 168 #endif 169 } 170 } 171 } 172 173 void setupRenderSystem() 174 { 175 if (!mRoot->restoreConfig() && !mRoot->showConfigDialog()) 176 throw Ogre::Exception(52, "User canceled the config dialog!", "OrxApplication::setupRenderSystem()"); 177 } 178 179 void createRenderWindow() 180 { 181 mRoot->initialise(true, "Ogre Render Window"); 182 } 183 184 void initializeResourceGroups() 185 { 186 Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); 187 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 188 } 189 190 void createScene(void) 191 { 192 193 string levelFile = "sp_level_moonstation.oxw"; 194 loader::LevelLoader* loader = new loader::LevelLoader(levelFile); 195 } 196 197 void setupScene() 198 { 199 Ogre::SceneManager *mgr = mRoot->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager"); 200 Ogre::Camera *cam = mgr->createCamera("Camera"); 201 Ogre::Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam); 202 } 203 204 void setupInputSystem() 205 { 206 size_t windowHnd = 0; 207 std::ostringstream windowHndStr; 208 OIS::ParamList pl; 209 Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow(); 210 211 win->getCustomAttribute("WINDOW", &windowHnd); 212 windowHndStr << windowHnd; 213 pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str())); 214 mInputManager = OIS::InputManager::createInputSystem(pl); 215 216 try 217 { 218 mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false)); 219 mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, false)); 220 } 221 catch (const OIS::Exception &e) 222 { 223 throw new Ogre::Exception(42, e.eText, "OrxApplication::setupInputSystem"); 224 } 225 } 226 227 void setupCEGUI() 228 { 229 Ogre::SceneManager *mgr = mRoot->getSceneManager("Default SceneManager"); 230 Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow(); 231 232 // CEGUI setup 233 // mRenderer = new CEGUI::OgreCEGUIRenderer(win, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mgr); 234 // mSystem = new CEGUI::System(mRenderer); 235 236 // Other CEGUI setup here. 237 } 238 239 void createFrameListener() 240 { 241 mListener = new OrxExitListener(mKeyboard); 242 mRoot->addFrameListener(mListener); 243 } 244 245 void startRenderLoop() 246 { 247 mRoot->startRendering(); 248 } 249 }; 250 } 251 76 252 using namespace Ogre; 77 78 class OrxExitListener : public FrameListener79 {80 public:81 OrxExitListener(OIS::Keyboard *keyboard)82 : mKeyboard(keyboard)83 {84 }85 86 bool frameStarted(const FrameEvent& evt)87 {88 mKeyboard->capture();89 return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);90 }91 92 private:93 OIS::Keyboard *mKeyboard;94 };95 96 class OrxApplication97 {98 public:99 void go()100 {101 createRoot();102 defineResources();103 setupRenderSystem();104 createRenderWindow();105 initializeResourceGroups();106 createScene();107 setupScene();108 setupInputSystem();109 setupCEGUI();110 createFrameListener();111 startRenderLoop();112 }113 114 ~OrxApplication()115 {116 mInputManager->destroyInputObject(mKeyboard);117 OIS::InputManager::destroyInputSystem(mInputManager);118 119 // delete mRenderer;120 // delete mSystem;121 122 delete mListener;123 delete mRoot;124 }125 126 private:127 Root *mRoot;128 OIS::Keyboard *mKeyboard;129 OIS::Mouse *mMouse;130 OIS::InputManager *mInputManager;131 CEGUI::OgreCEGUIRenderer *mRenderer;132 CEGUI::System *mSystem;133 OrxExitListener *mListener;134 135 void createRoot()136 {137 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE138 mRoot = new Root(macBundlePath() + "/Contents/Resources/plugins.cfg");139 #else140 mRoot = new Root();141 #endif142 }143 144 void defineResources()145 {146 String secName, typeName, archName;147 ConfigFile cf;148 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE149 cf.load(macBundlePath() + "/Contents/Resources/resources.cfg");150 #else151 cf.load("resources.cfg");152 #endif153 154 ConfigFile::SectionIterator seci = cf.getSectionIterator();155 while (seci.hasMoreElements())156 {157 secName = seci.peekNextKey();158 ConfigFile::SettingsMultiMap *settings = seci.getNext();159 ConfigFile::SettingsMultiMap::iterator i;160 for (i = settings->begin(); i != settings->end(); ++i)161 {162 typeName = i->first;163 archName = i->second;164 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE165 ResourceGroupManager::getSingleton().addResourceLocation( String(macBundlePath() + "/" + archName), typeName, secName);166 #else167 ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName);168 #endif169 }170 }171 }172 173 void setupRenderSystem()174 {175 if (!mRoot->restoreConfig() && !mRoot->showConfigDialog())176 throw Exception(52, "User canceled the config dialog!", "OrxApplication::setupRenderSystem()");177 }178 179 void createRenderWindow()180 {181 mRoot->initialise(true, "Ogre Render Window");182 }183 184 void initializeResourceGroups()185 {186 TextureManager::getSingleton().setDefaultNumMipmaps(5);187 ResourceGroupManager::getSingleton().initialiseAllResourceGroups();188 }189 190 void createScene(void)191 {192 193 string levelFile = "sp_level_moonstation.oxw";194 loader::LevelLoader* loader = new loader::LevelLoader(levelFile);195 }196 197 void setupScene()198 {199 SceneManager *mgr = mRoot->createSceneManager(ST_GENERIC, "Default SceneManager");200 Camera *cam = mgr->createCamera("Camera");201 Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam);202 }203 204 void setupInputSystem()205 {206 size_t windowHnd = 0;207 std::ostringstream windowHndStr;208 OIS::ParamList pl;209 RenderWindow *win = mRoot->getAutoCreatedWindow();210 211 win->getCustomAttribute("WINDOW", &windowHnd);212 windowHndStr << windowHnd;213 pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));214 mInputManager = OIS::InputManager::createInputSystem(pl);215 216 try217 {218 mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));219 mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, false));220 }221 catch (const OIS::Exception &e)222 {223 throw new Exception(42, e.eText, "OrxApplication::setupInputSystem");224 }225 }226 227 void setupCEGUI()228 {229 SceneManager *mgr = mRoot->getSceneManager("Default SceneManager");230 RenderWindow *win = mRoot->getAutoCreatedWindow();231 232 // CEGUI setup233 // mRenderer = new CEGUI::OgreCEGUIRenderer(win, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mgr);234 // mSystem = new CEGUI::System(mRenderer);235 236 // Other CEGUI setup here.237 }238 239 void createFrameListener()240 {241 mListener = new OrxExitListener(mKeyboard);242 mRoot->addFrameListener(mListener);243 }244 245 void startRenderLoop()246 {247 mRoot->startRendering();248 }249 };250 253 251 254 #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32 … … 260 263 try 261 264 { 262 OrxApplication orxonox;265 orxonox::OrxApplication orxonox; 263 266 orxonox.go(); 264 267 }
Note: See TracChangeset
for help on using the changeset viewer.