示例#1
0
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
}
示例#2
0
文件: World.cpp 项目: CmPons/angel2d
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);
}