void Application::updateStats() { static Ogre::String currFps = "Current FPS: "; static Ogre::String avgFps = "Average FPS: "; static Ogre::String bestFps = "Best FPS: "; static Ogre::String worstFps = "Worst FPS: "; static Ogre::String tris = "Triangle Count: "; static Ogre::String batches = "Batch Count: "; // update stats when necessary try { Ogre::OverlayElement* guiAvg = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/AverageFps"); Ogre::OverlayElement* guiCurr = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/CurrFps"); Ogre::OverlayElement* guiBest = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/BestFps"); Ogre::OverlayElement* guiWorst = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/WorstFps"); const Ogre::RenderTarget::FrameStats& stats = m_window->getStatistics(); guiAvg->setCaption(avgFps + Ogre::StringConverter::toString(stats.avgFPS)); guiCurr->setCaption(currFps + Ogre::StringConverter::toString(stats.lastFPS)); guiBest->setCaption(bestFps + Ogre::StringConverter::toString(stats.bestFPS) +" "+Ogre::StringConverter::toString(stats.bestFrameTime)+" ms"); guiWorst->setCaption(worstFps + Ogre::StringConverter::toString(stats.worstFPS) +" "+Ogre::StringConverter::toString(stats.worstFrameTime)+" ms"); Ogre::OverlayElement* guiTris = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/NumTris"); guiTris->setCaption(tris + Ogre::StringConverter::toString(stats.triangleCount)); Ogre::OverlayElement* guiBatches = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/NumBatches"); guiBatches->setCaption(batches + Ogre::StringConverter::toString(stats.batchCount)); ///////////////////////// Ogre::Vector3 camPos = m_camera->getPosition(); Ogre::Quaternion camOri = m_camera->getOrientation(); Ogre::Vector3 freddyPos = m_sceneNode->getPosition(); Ogre::Quaternion freddyOri = m_sceneNode->getOrientation(); Ogre::OverlayElement* guiDbg = Ogre::OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); guiDbg->setTop(0); Ogre::String message = "Camera Position: x: "+Ogre::StringConverter::toString(camPos.x)+", y: "+Ogre::StringConverter::toString(camPos.y)+", z:"+Ogre::StringConverter::toString(camPos.z) + "\n" + "Camera orientation: yaw: "+Ogre::StringConverter::toString(camOri.getYaw())+", pitch: "+Ogre::StringConverter::toString(camOri.getPitch())+", roll:"+Ogre::StringConverter::toString(camOri.getRoll()) + "\n" + "Freddy position: x: "+Ogre::StringConverter::toString(freddyPos.x)+", y: "+Ogre::StringConverter::toString(freddyPos.y)+", z:"+Ogre::StringConverter::toString(freddyPos.z) + "\n" + "Freddy orientation: yaw: "+Ogre::StringConverter::toString(freddyOri.getYaw())+", pitch: "+Ogre::StringConverter::toString(freddyOri.getPitch())+", roll:"+Ogre::StringConverter::toString(freddyOri.getRoll()); guiDbg->setCaption(message); debugWindow->setText("This is a demo!"); } catch(...) { /* ignore */ } }
void test() { Ogre::Root* pOgre = new Ogre::Root("", ""); pOgre->loadPlugin(RENDER_SYSTEM); pOgre->setRenderSystem(pOgre->getAvailableRenderers().front()); pOgre->initialise(false); Ogre::NameValuePairList lArgs; //lArgs["externalWindowHandle"] = bk::format("%d", (bk::uint)l_window.get_handle()).astr; Ogre::RenderWindow* pWindow = pOgre->createRenderWindow("Heart|Dockyard", 1024, 768, false, &lArgs); Ogre::SceneManager* pSceneManager = pOgre->createSceneManager(Ogre::ST_GENERIC,"SceneManager"); pSceneManager->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE); pSceneManager->setShadowCameraSetup(Ogre::ShadowCameraSetupPtr(new Ogre::FocusedShadowCameraSetup())); pSceneManager->setAmbientLight(Ogre::ColourValue(0.1f, 0.1f, 0.1f)); Ogre::Camera* pCamera = pSceneManager->createCamera("Camera"); pCamera->setFixedYawAxis(true, Ogre::Vector3::UNIT_Z); pCamera->setPosition(Ogre::Vector3(0.0f, 50.0f, 20.0f)); pCamera->lookAt(Ogre::Vector3(0.0f, 0.0f, 0.0f)); pCamera->setNearClipDistance(0.1f); pCamera->setFarClipDistance(100.0f); Ogre::Viewport* pViewport = pWindow->addViewport(pCamera); pViewport->setBackgroundColour(Ogre::ColourValue(0.0f, 0.0f, 0.0f)); pCamera->setAspectRatio(Ogre::Real(pViewport->getActualWidth()) / Ogre::Real(pViewport->getActualHeight())); Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/dockyard.zip", "Zip", "Dockyard", true); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); Ogre::MeshManager::getSingleton().createPlane("GroundPlane", "Dockyard", Ogre::Plane(0.0f, 0.0f, 1.0f, 0.0f), 100.0f, 100.0f, 100, 100, true, 1, 3.0f, 3.0f); Ogre::Entity* pGroundEntity = pSceneManager->createEntity("GroundPlane"); pGroundEntity->setMaterialName("Examples/Rockwall"); pGroundEntity->setCastShadows(false); pGroundEntity->getSubEntity(0)->getMaterial()->setShadingMode(Ogre::SO_PHONG); Ogre::SceneNode* pGroundNode = pSceneManager->getRootSceneNode()->createChildSceneNode(); pGroundNode->attachObject(pGroundEntity); Ogre::Entity* pCubeEntity = pSceneManager->createEntity("Cube", Ogre::SceneManager::PT_CUBE); pCubeEntity->setMaterialName("Examples/10PointBlock"); pCubeEntity->setCastShadows(true); Ogre::SceneNode* pCubeNode = pSceneManager->getRootSceneNode()->createChildSceneNode(); pCubeNode->attachObject(pCubeEntity); pCubeNode->setPosition(0.0f, 0.0f, 5.f); pCubeNode->setScale(0.1f, 0.1f, 0.1f); Ogre::ColourValue lColour1(1.0f, 1.0f, 1.0f); Ogre::ColourValue lColour2(1.0f, 1.0f, 1.0f); Ogre::ColourValue lColour3(1.0f, 1.0f, 1.0f); Ogre::Light* pLight1 = pSceneManager->createLight(); pLight1->setType(Ogre::Light::LT_SPOTLIGHT); pLight1->setPosition(30.0f, 30.0f, 30.0f); pLight1->setDirection(-1.0f, -1.0f, -1.0f); pLight1->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight1->setDiffuseColour(lColour1 * 0.5f); Ogre::Light* pLight2 = pSceneManager->createLight(); pLight2->setType(Ogre::Light::LT_SPOTLIGHT); pLight2->setPosition(-30.0f, 30.0f, 30.0f); pLight2->setDirection(1.0f, -1.0f, -1.0f); pLight2->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight2->setDiffuseColour(lColour2 * 0.5f); Ogre::Light* pLight3 = pSceneManager->createLight(); pLight3->setType(Ogre::Light::LT_SPOTLIGHT); pLight3->setPosition(30.0f, -30.0f, 30.0f); pLight3->setDirection(-1.0f, 1.0f, -1.0f); pLight3->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight3->setDiffuseColour(lColour3 * 0.5f); Ogre::Overlay* pMenuOverlay = Ogre::OverlayManager::getSingleton().create("Menu"); Ogre::OverlayElement* pMenu = Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "Menu"); pMenu->setMetricsMode(Ogre::GMM_PIXELS); pMenu->setWidth(200); pMenu->setHeight(200); pMenu->setTop(30); pMenu->setLeft(30); pMenu->setMaterialName("Examples/BumpyMetal"); if (pMenu->isContainer()) pMenuOverlay->add2D(static_cast<Ogre::OverlayContainer*>(pMenu)); pMenuOverlay->show(); pOgre->startRendering(); }
bool MyFrameListener::frameStarted(const Ogre::FrameEvent& evt) { Ogre::Vector3 vt(0,0,0); Ogre::Real deltaT = evt.timeSinceLastFrame; Ogre::Real tSpeed = 20.0; int fps = 1.0 / deltaT; _keyboard->capture(); if(_keyboard->isKeyDown(OIS::KC_ESCAPE)) return false; if(_keyboard->isKeyDown(OIS::KC_0)) // reset { if (_gameState == 1) { _gameState = 0; deleteBoard(); _overlayManager->getByName("Title")->show(); } } if(_keyboard->isKeyDown(OIS::KC_1)) // jugar { if (_gameState == 0) { _gameState = 1; createBoard(); _overlayManager->getByName("Title")->hide(); _overlayManager->getByName("Win")->hide(); _overlayManager->getByName("Lose")->hide(); } } //if(_keyboard->isKeyDown(OIS::KC_2)) return false; // Captura del raton _mouse->capture(); int posx = _mouse->getMouseState().X.abs; int posy = _mouse->getMouseState().Y.abs; // Dibujado del cursor Ogre::OverlayElement *oe; oe = _overlayManager->getOverlayElement("cursor"); oe->setLeft(posx); oe->setTop(posy); // Accion del raton bool mbleft = _mouse->getMouseState().buttonDown(OIS::MB_Left); if (mbleft) { Ogre::Ray r = setRayQuery(posx, posy, 1); Ogre::RaySceneQueryResult &result = _raySceneQuery->execute(); Ogre::RaySceneQueryResult::iterator it; it = result.begin(); //AGUA if (it != result.end()) { if (it->movable->getParentSceneNode()->getName() != "nodeG") { Ogre::Vector3 pos = it->movable->getParentSceneNode()->getPosition(); it->movable->detachFromParent(); // tirada del CPU. int lResult = 0; do { lResult = playCPU(); if (endGame()!=0) { _gameState = 0; deleteBoard(); _overlayManager->getByName("Title")->show(); _overlayManager->getByName("Lose")->show(); } } while ((lResult == 1) && (_gameState==1)); } } //TOCADO r = setRayQuery(posx, posy, 2); Ogre::RaySceneQueryResult &resultShip = _raySceneQuery->execute(); it = resultShip.begin(); if (it != resultShip.end()) { if (it->movable->getParentSceneNode()->getName() != "nodeG") { Ogre::Vector3 pos = it->movable->getParentSceneNode()->getPosition(); it->movable->detachFromParent(); // Creacion de otro cubo para cuando haya barco. Ogre::Entity* ent1; ent1 = _sceneManager->createEntity("CuboBarco.mesh"); ent1->setQueryFlags(4); Ogre::SceneNode* node1 = _sceneManager->createSceneNode(); node1->attachObject(ent1); node1->translate(pos.x,pos.y,pos.z); _sceneManager->getRootSceneNode()->addChild(node1); _maxFires--; // no tira CPU if (endGame()!=0) { _gameState = 0; deleteBoard(); _overlayManager->getByName("Title")->show(); _overlayManager->getByName("Win")->show(); } } } } return true; }