void CParticleSystemManager :: UpdateSystems( void ) { float frametime; static int framecount = -1; AURSTATE state; // HACKHACK: don't evaluate particles when executes many times at same frame // e.g. mirror rendering if( framecount != tr.realframecount ) { frametime = RI.refdef.frametime; framecount = tr.realframecount; } else frametime = 0.0f; CParticleSystem *pSystem; CParticleSystem *pLast = NULL; pSystem = m_pFirstSystem; while( pSystem ) { state = pSystem->UpdateSystem( frametime ); if( state != AURORA_REMOVE ) { if( state == AURORA_DRAW ) pSystem->DrawSystem(); pLast = pSystem; pSystem = pSystem->m_pNextSystem; } else { // delete this system if( pLast ) { pLast->m_pNextSystem = pSystem->m_pNextSystem; delete pSystem; pSystem = pLast->m_pNextSystem; } else { // deleting the first system m_pFirstSystem = pSystem->m_pNextSystem; delete pSystem; pSystem = m_pFirstSystem; } } } gEngfuncs.pTriAPI->RenderMode(kRenderNormal); }