Beispiel #1
0
bool Manager::_popState( IProgressState* newpstate )
{
	if( !m_states->current() )
		return( false );
	if( !newpstate )
		newpstate = m_progressStateDefault;
	m_engine->resetTimer();
	m_states->current()->onExit();
	m_engine->resetTimer();
	ActorManager* am = m_actors->current();
	DELETE_OBJECT( am );
	m_actors->pop();
	ControlManager* ctm = m_controls->current();
	DELETE_OBJECT( ctm );
	m_controls->pop();
	CollisionManager* clm = m_collisions->current();
	DELETE_OBJECT( clm );
	m_collisions->pop();
	IState* s = m_states->current();
	DELETE_OBJECT( s );
	m_states->pop();
	m_assets->releaseLevel( m_states->count() + 1 );
	IState* c = m_states->current();
	if( !m_changeState && c )
	{
		if( newpstate )
		{
			m_loading = true;
			newpstate->onEnter();
			m_loading = false;
		}
		m_engine->resetTimer();
		c->onEnter( newpstate );
		m_engine->resetTimer();
		if( newpstate )
		{
			m_loading = true;
			newpstate->onExit();
			m_loading = false;
			m_assetsLoading->releaseLevel( m_states->count() + 1 );
		}
	}
	return( true );
}