void GraphicsImpl::threadWillStart() { subscribeToFeed("input_keyboard", boost::bind(&GraphicsImpl::handleKeyEvents, this, _1)); subscribeToFeed("input_mouse", boost::bind(&GraphicsImpl::handleMouseEvents, this, _1)); subscribeToFeed("world_dynamic", boost::bind(&GraphicsImpl::handleWorldEvents, this, _1)); subscribeToFeed("create_object", boost::bind(&GraphicsImpl::handleObjectEvents, this, _1)); subscribeToFeed("create_terrain", boost::bind(&GraphicsImpl::handleTerrainEvents, this, _1)); subscribeToFeed("world_removed", boost::bind(&GraphicsImpl::handleRemovedObjects, this, _1)); Dout << "Creating root"; root = new Ogre::Root("", "", resourcePath + "ogre.log"); Dout << "Loading plugins" ; loadPlugins(); Dout << "Setting Ressources" ; setupResources(); Dout << "Configuring root" ; if (!configure()) { Derr << "Failed to configure root"; } Dout << "Create Scenemanager" ; chooseSceneManager(); Dout << "Create Camera" ; createCamera(); Dout << "Create Viewport" ; createViewports(); Dout << "Set default MipMap lvl" ; Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); Dout << "Create resource listeners" ; createResourceListener(); Dout << "Load resources" ; loadResources(); Dout << "Setup GUI"; setupGUI(); Dout << "Create Framelistener" ; createFrameListener(); Dout << "Create Basic Scene" ; createScene(); root->clearEventTimes(); InformationManager::Instance()->offerData("window", this); }
void ClientApplication::run() { Ogre::Root* root = mGraphicsManager->getRoot(); Ogre::RenderWindow* window = mGraphicsManager->getWindow(); root->getRenderSystem()->_initRenderTargets(); root->clearEventTimes(); boost::timer timer; while( !mShutdown ) { if( mShutdownRequested ) { mStateMachine->popTo( 0 ); mShutdown = true; } const Real elapsed = timer.elapsed(); timer.restart(); mEarlyUpdateSignal(); mEarlyFrameSignal( elapsed ); mUpdateSignal(); mFrameSignal( elapsed ); mLateUpdateSignal(); mLateFrameSignal( elapsed ); Ogre::WindowEventUtilities::messagePump(); // Render even when the window is inactive. if( window->isActive() ) { root->renderOneFrame(); } else if( window->isVisible() ) { root->renderOneFrame(); window->update(); #if DIVERSIA_PLATFORM == DIVERSIA_PLATFORM_WIN32 Sleep( ( 1.0 / 60.0 ) * 1000.0 ); #else usleep( ( 1.0 / 60.0 ) * 1000000.0 ); #endif } else if( !window->isActive() && !window->isVisible() ) { #if DIVERSIA_PLATFORM == DIVERSIA_PLATFORM_WIN32 Sleep( ( 1.0 / 60.0 ) * 1000.0 ); #else usleep( ( 1.0 / 60.0 ) * 1000000.0 ); #endif } } }
void Client::Play() { OgreEasy::SimpleOgreInit lOgreInit; if(!lOgreInit.initOgre()) { std::cout<<"Could not init ogre"<<std::endl; return; } Ogre::Root* lRoot = lOgreInit.mRoot.get(); Ogre::RenderWindow* lWindow = lOgreInit.mWindow; World* w = new World(); w->SetDebugMode(false); GameObject camObject = w->AddObject("camera"); camObject.AddCameraComponent("camera"); camObject.SetPosition(Ogre::Vector3(0,0,0)); camObject.LookAt(Ogre::Vector3(0,0,0)); GameObject& light2 = w->AddObject("point_light"); light2.AddLightComponent(Ogre::Light::LT_DIRECTIONAL); light2.SetPosition(Ogre::Vector3(0,0,40)); light2.LookAt(Ogre::Vector3(0,100,0)); GameObject& c = w->AddPhysicsObject("esine", "cube/Cube.mesh"); c.SetPosition(Ogre::Vector3(0,0,0)); c.AddBoxCollider(1,1,1); PhysicsComponent phys = c.GetPhysicsComponent(); phys.SetMass(1.0); c.SetMaterial("tex"); GameObject& c2 = w->AddPhysicsObject("esine2", "cube/Cube.mesh"); c2.SetPosition(Ogre::Vector3(1,2,1)); c2.AddBoxCollider(1,1,1); PhysicsComponent phys2 = c2.GetPhysicsComponent(); phys2.SetMass(1.0); c2.SetMaterial("tex"); GameObject& taso = w->AddPhysicsObject("taso", "cube/other/Cube.mesh"); taso.SetPosition(Ogre::Vector3(0, -10, 0)); taso.AddBoxCollider(10,0.1,10); taso.SetMaterial("plane"); PhysicsComponent phys3 = taso.GetPhysicsComponent(); phys3.SetMass(0.0); GameObject& anim = w->AddObject("anim" , "second_anim/Cube.mesh"); anim.SetPosition(Ogre::Vector3(0, -5, 0)); anim.SetMaterial("tex"); lRoot->clearEventTimes(); float f=0.0; unsigned long t=0; double d; Ogre::Timer* a = new Ogre::Timer(); while(!lWindow->isClosed()) { t=a->getMicroseconds(); camObject.SetPosition(Ogre::Vector3(cos(f)*15.0, -5, sin(f)*15.0)); camObject.LookAt(Ogre::Vector3(-0,-10,-0), Ogre::Vector3::UNIT_Y); w->Update(d); f+=d*.5; d = (double)(a->getMicroseconds()-t)/1000000; } delete w; }