Beispiel #1
0
bool Manager::_pushState( IState* newstate, IProgressState* newpstate )
{
	if( !newstate )
		return( false );
	if( !newpstate )
		newpstate = m_progressStateDefault;
	IState* c = m_states->current();
	if( m_states->push( newstate ) )
	{
		if( !m_changeState && c )
		{
			m_engine->resetTimer();
			c->onExit();
			m_engine->resetTimer();
		}
		m_actors->push( xnew ActorManager() );
		Global::use().actors = m_actors->current();
		m_controls->push( xnew ControlManager() );
		Global::use().controls = m_controls->current();
		m_collisions->push( xnew CollisionManager() );
		Global::use().collisions = m_collisions->current();
		if( newpstate )
		{
			m_loading = true;
			newpstate->onEnter();
			m_loading = false;
		}
		m_engine->resetTimer();
		newstate->onEnter( newpstate );
		m_engine->resetTimer();
		if( newpstate )
		{
			m_loading = true;
			newpstate->onExit();
			m_loading = false;
			m_assetsLoading->releaseLevel( m_states->count() );
		}
		return( true );
	}
	return( false );
}