size_t SceneManager::Render( tRendererType *renderer ) { size_t _n = 0; #else void SceneManager::Render( tRendererType *renderer ) { #endif assert( renderer ); MathLib::Rectanglef rcViewport; rcViewport.min_vert = m_rcViewport.min_vert / m_fScale; rcViewport.max_vert = m_rcViewport.max_vert / m_fScale; renderer->SetViewport( &m_vp ); UpdateProjection(); UpdateRenderables( renderer ); for( SceneLayerPtrVector::iterator it = m_vLayers.begin() ; it != m_vLayers.end() ; ++it ) { SceneLayer *pLayer = *it; assert( pLayer ); RenderablePtrListType &custom_renderables = pLayer->lstCustomRenderables; for( RenderablePtrListType::iterator it0 = custom_renderables.begin() ; it0 != custom_renderables.end() ; ++it0 ) { RenderablePtrListNode &node = *it0; assert(node.renderable); if( !node.bounds || MathLib::intersect( *node.bounds , rcViewport ) ) renderer->Draw( node.renderable ); #ifdef DEBUG ++_n; #endif } SpriteRenderGroupContainer &container = pLayer->lstRenderables; for( SpriteRenderGroupContainer::iterator it0 = container.begin() ; it0 != container.end() ; ++it0 ) { SpriteRenderGroup *obj = it0->second; assert(obj); if( obj->GetElementsCount() > 0 ) { obj->SetupViewport(&m_vp); renderer->Draw( obj ); } #ifdef DEBUG ++_n; #endif } } renderer->_DoRenderScene(); renderer->SetViewport( NULL ); ClearRenderables(); #ifdef DEBUG return _n; #endif }
void World::Simulate(bool simRunning) { float frame_dt = CalculateNewDT(); //system updates #if !ANGEL_MOBILE theControllerManager.UpdateState(); _console->Update( (float)frame_dt ); #endif // Must be called once per frame. theSound.Update(); //make sure the game manager gets updates first, if we have one if (_gameManager) { _gameManager->Update(frame_dt); } if (simRunning) { // Deliver any messages that have been queued from the last frame. theSwitchboard.SendAllMessages(); RunPhysics(frame_dt); //Flag that the _elements array is locked so we don't try to add any // new actors during the update. _elementsLocked = true; UpdateRenderables(frame_dt); CleanupRenderables(); _elementsLocked = false; // Now that we're done updating the list, allow any deferred Adds to be processed. ProcessDeferredAdds(); ProcessDeferredLayerChanges(); ProcessDeferredRemoves(); theSwitchboard.Update(frame_dt); UpdateDebugItems(frame_dt); //if there are any system updates that still need to be run, put them here } //making this the last update so we can accurately lock on position for rendering theCamera.Update(frame_dt); }