// Update the menu void OgreAppFrameListener::doMenu(Real delta) { // Update all the moving objects (enemies, ...) ObjectMapType::iterator i; ObjectSystem *ob = ObjectSystem::getSingletonPtr(); for(i=ob->getFirst(); i != ob->getLast(); ) { (*i).second->move(delta); // Destroy objects marked for deletion if((*i).second->isToBeDeleted()) ob->destroyObject(i++); else ++i; } // Fade the menu selection gameApp->getMenu()->fadeItem(delta); // Scroll the menu scroller Overlay *scroller = OverlayManager::getSingleton().getByName("MenuScroller"); scroller->scroll(-0.15f * delta, 0); if(scroller->getScrollX() < -17) scroller->setScroll(0,0); // Handle the state switching int newState = gameApp->getMenu()->getNewState(); if(newState == -1) return; if(newState == STATE_GAME) { // Black and White off Viewport *vp = gameApp->getRenderWindow()->getViewport(0); CompositorManager::getSingleton().setCompositorEnabled(vp, "B&W", false); // Scroller off OverlayManager::getSingleton().getByName("MenuScroller")->hide(); OverlayManager::getSingleton().getByName("TitleScreen")->hide(); OverlayManager::getSingleton().getByName("Version")->hide(); // Start a new game gameApp->startNewGame(); newState = -1; } else if(newState == STATE_QUIT) { gameApp->quit(); newState = -1; } }
//--------------------------------------------------------------------- void OverlayManager::_queueOverlaysForRendering(Camera* cam, RenderQueue* pQueue, Viewport* vp) { bool orientationModeChanged = false; #if OGRE_NO_VIEWPORT_ORIENTATIONMODE == 0 orientationModeChanged = (mLastViewportOrientationMode != vp->getOrientationMode()); #endif // Flag for update pixel-based GUIElements if viewport has changed dimensions if (mLastViewportWidth != vp->getActualWidth() || mLastViewportHeight != vp->getActualHeight() || orientationModeChanged) { mViewportDimensionsChanged = true; #if OGRE_NO_VIEWPORT_ORIENTATIONMODE == 0 mLastViewportOrientationMode = vp->getOrientationMode(); #endif mLastViewportWidth = vp->getActualWidth(); mLastViewportHeight = vp->getActualHeight(); } else { mViewportDimensionsChanged = false; } OverlayMap::iterator i, iend; iend = mOverlayMap.end(); for (i = mOverlayMap.begin(); i != iend; ++i) { Overlay* o = i->second; #if OGRE_NO_VIEWPORT_ORIENTATIONMODE == 0 if (orientationModeChanged) { // trick to trigger transform update of the overlay o->scroll(0.f, 0.f); } #endif o->_findVisibleObjects(cam, pQueue); } }