Beispiel #1
0
int CParticleSystem::Update (void)
{
	CParticleEmitter	*emitterP;
	int					i = 0;

if ((m_nObject == 0x7fffffff) && (m_nType == SMOKE_PARTICLES) &&
	 (gameStates.app.nSDLTicks - m_nBirth > (MAX_SHRAPNEL_LIFE / I2X (1)) * 1000))
	SetLife (0);
#if DBG
if ((m_nObject >= 0) && (m_nObject < 0x70000000) && (OBJECTS [m_nObject].info.nType == 255))
	i = i;
#endif
if ((emitterP = m_emitters.Buffer ())) {
	bool bKill = (m_nObject < 0) || ((m_nObject < 0x70000000) && 
					 ((OBJECTS [m_nObject].info.nSignature != m_nSignature) || (OBJECTS [m_nObject].info.nType == OBJ_NONE)));
	for (i = 0; i < m_nEmitters; ) {
		if (!m_emitters)
			return 0;
		if (emitterP->IsDead (gameStates.app.nSDLTicks)) {
			if (!RemoveEmitter (i)) {
				//particleManager.Destroy (m_nId);
				m_bDestroy = true;
				break;
				}
			}
		else {
			if (bKill)
				emitterP->SetLife (0);
			emitterP->Update (gameStates.app.nSDLTicks, -1);
			emitterP++, i++;
			}
		}
	}
return i;
}
void ParticleEmitterMgr::FlushEmitters()
{
    if (Emitters.empty())
        return;

    sDisplay->ClearAllModelFeaturesByType(MF_TYPE_EMITTER, true);

    // Prochazi vsechny emittery
    for (EmitterList::iterator itr = Emitters.begin(); itr != Emitters.end(); ++itr)
        RemoveEmitter(*itr);
}
 bool CParticleSystem::OnDependencyListChange( void* pComponentAddr, EDependencyChangeAction actionType, CComponentBase* pComponent)
 {
     bool bRet = super::OnDependencyListChange( pComponentAddr, actionType, pComponent );
     if ( !bRet )
     {
         if ( &m_emitterVector == pComponentAddr )
         {
             BEATS_ASSERT(dynamic_cast<CParticleEmitter*>(pComponent) != NULL);
             CParticleEmitter* pEmitter = (CParticleEmitter*)pComponent;
             if (actionType == eDCA_Add)
             {
                 AddEmitter( pEmitter );
             }
             else if ( actionType == eDCA_Change || actionType == eDCA_Delete )
             {
                 RemoveEmitter( pEmitter );
             }
             bRet = true;
         }
     }
     return bRet;
 }