00001 #include "ogrestartup.h"
00002
00003 using namespace Ogre;
00004
00005 OgreStartup::OgreStartup(){
00006 }
00007
00008 OgreStartup::~OgreStartup(){
00009 WindowEventUtilities::removeWindowEventListener(mWindow, this);
00010 mInputManager->destroyInputObject(mKeyboard);
00011 mInputManager->destroyInputObject(mMouse);
00012 OIS::InputManager::destroyInputSystem(mInputManager);
00013 delete mSystem;
00014 delete mRenderer;
00015 delete mRoot;
00016 }
00017
00018 void OgreStartup::go(void){
00019 startLog();
00020 createRoot();
00021 defineResources();
00022 setupRenderSystem();
00023 createRenderWindow();
00024 setupScene();
00025 createCamera();
00026 setupViewport();
00027 initializeResourceGroups();
00028
00029 setupCEGUI();
00030 setupInputSystem();
00031 createScene();
00032 createFrameListener();
00033 startRenderLoop();
00034 }
00035
00036 void OgreStartup::startLog(void){
00037 LogManager *logMgr = new LogManager();
00038 logMgr->createLog("OgreViewer.log",true, true, false);
00039 }
00040
00041 void OgreStartup::createRoot(void){
00042 mRoot = new Root();
00043 }
00044
00045 void OgreStartup::defineResources(void){
00046 String secName, typeName, archName;
00047 ConfigFile cf;
00048 cf.load("resources.cfg");
00049 ConfigFile::SectionIterator seci = cf.getSectionIterator();
00050 while(seci.hasMoreElements()){
00051 secName = seci.peekNextKey();
00052 ConfigFile::SettingsMultiMap *settings = seci.getNext();
00053 ConfigFile::SettingsMultiMap::iterator i;
00054 for(i = settings->begin(); i!= settings->end(); ++i){
00055 typeName = i->first;
00056 archName = i->second;
00057 ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName);
00058 }
00059 }
00060 }
00061
00062 void OgreStartup::setupRenderSystem(void){
00063 if(!mRoot->restoreConfig() && !mRoot->showConfigDialog())
00064 throw Exception(52, "User canceled the config dialog.", "OgreStartup::setupRenderSystem()");
00065 }
00066
00067 void OgreStartup::createRenderWindow(void){
00068 mWindow = mRoot->initialise(true, "Desert Challenge");
00069 #ifdef DEBUG
00070
00071
00072 #endif
00073 }
00074
00075 void OgreStartup::initializeResourceGroups(void){
00076 ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
00077 }
00078
00079 void OgreStartup::setupScene(void){
00080 mSceneMgr = mRoot->createSceneManager(ST_GENERIC);
00081 }
00082
00083 void OgreStartup::createCamera(void){
00084 mCamera = mSceneMgr->createCamera("DefaultCamera");
00085 mCamera->setNearClipDistance(5);
00086 mCamera->setFarClipDistance(8000);
00087 mSceneMgr->getRootSceneNode()->createChildSceneNode("CameraNode")->attachObject(mCamera);
00088 }
00089
00090 void OgreStartup::setupViewport(void){
00091 Viewport *vp = mWindow->addViewport(mCamera);
00092 vp->setBackgroundColour( ColourValue(0, 0, 0.0) );
00093 mCamera->setAspectRatio( Real(vp->getActualWidth()) / Real(vp->getActualHeight()) );
00094 TextureManager::getSingleton().setDefaultNumMipmaps(9);
00095 }
00096
00097 void OgreStartup::setupInputSystem(void){
00098 size_t windowHnd = 0;
00099 std::ostringstream windowHndStr;
00100 OIS::ParamList pl;
00101 RenderWindow *win = mRoot->getAutoCreatedWindow();
00102
00103 win->getCustomAttribute("WINDOW",&windowHnd);
00104 windowHndStr << windowHnd;
00105 pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
00106 mInputManager = OIS::InputManager::createInputSystem(pl);
00107
00108 try{
00109 mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));
00110 }catch(const OIS::Exception &e){
00111 throw Exception(42, e.eText, "OgreStartup::setupInputSystem");
00112 }
00113
00114 try{
00115 mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, true));
00116 }catch(...){
00117 mMouse = 0;
00118 }
00119 windowResized(mWindow);
00120 WindowEventUtilities::addWindowEventListener(mWindow, this);
00121 }
00122
00123 void OgreStartup::windowResized(RenderWindow* rw){
00124 unsigned int width, height, depth;
00125 int left, top;
00126 rw->getMetrics(width, height, depth, left, top);
00127 const OIS::MouseState &ms = mMouse->getMouseState();
00128 ms.width = width;
00129 ms.height = height;
00130 }
00131
00132 void OgreStartup::setupCEGUI(void){
00133 mWindow = mRoot->getAutoCreatedWindow();
00134 mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);
00135 mSystem = new CEGUI::System(mRenderer);
00136 }
00137
00138 void OgreStartup::setupAudioSystem(void){
00139 mSoundMgr = new OgreAL::SoundManager();
00140 }
00141
00142 void OgreStartup::startRenderLoop(void){
00143 mRoot->startRendering();
00144 }