//----------------------------------------------------------------------------- void CParticleManager::Update(long _lTime) { if (!listParticleSystem.size()) return; list<CParticleSystem *>::iterator i; i = listParticleSystem.begin(); while (i != listParticleSystem.end()) { CParticleSystem * p = *i; ++i; if (!p->IsAlive()) { delete p; listParticleSystem.remove(p); } else { p->Update(_lTime); } } }
//----------------------------------------------------------------------------- void LaunchPoisonExplosion(EERIE_3D * aePos) { // système de partoches pour l'explosion CParticleSystem * pPS = new CParticleSystem(); CParticleParams cp; cp.iNbMax = 80; cp.fLife = 1500; cp.fLifeRandom = 500; cp.p3Pos.x = 5; cp.p3Pos.y = 5; cp.p3Pos.z = 5; cp.p3Direction.x = 0; cp.p3Direction.y = 4; cp.p3Direction.z = 0; cp.fAngle = DEG2RAD(360); cp.fSpeed = 200; cp.fSpeedRandom = 0; cp.p3Gravity.x = 0; cp.p3Gravity.y = 17; cp.p3Gravity.z = 0; cp.fFlash = 0; cp.fRotation = 80; cp.bRotationRandomDirection = true; cp.bRotationRandomStart = true; cp.fStartSize = 5; cp.fStartSizeRandom = 3; cp.fStartColor[0] = 0; cp.fStartColor[1] = 76; cp.fStartColor[2] = 0; cp.fStartColor[3] = 0; cp.fStartColorRandom[0] = 0; cp.fStartColorRandom[1] = 0; cp.fStartColorRandom[2] = 0; cp.fStartColorRandom[3] = 150; cp.bStartLock = false; cp.fEndSize = 30; cp.fEndSizeRandom = 5; cp.fEndColor[0] = 0; cp.fEndColor[1] = 0; cp.fEndColor[2] = 0; cp.fEndColor[3] = 0; cp.fEndColorRandom[0] = 0; cp.fEndColorRandom[1] = 25; cp.fEndColorRandom[2] = 0; cp.fEndColorRandom[3] = 20; cp.bEndLock = false; cp.iBlendMode = 3; cp.iFreq = -1; cp.bTexInfo = FALSE; pPS->SetParams(cp); pPS->ulParticleSpawn = 0; pPS->SetTexture("graph\\particles\\big_greypouf.bmp", 0, 200); pPS->SetPos(*aePos); pPS->Update(0); pPS->iParticleNbMax = 0; list<CParticle *>::iterator i; for (i = pPS->listParticle.begin(); i != pPS->listParticle.end(); ++i) { CParticle * pP = *i; if (pP->isAlive()) { if (pP->p3Velocity.y >= 0.5f * 200) pP->p3Velocity.y = 0.5f * 200; if (pP->p3Velocity.y <= -0.5f * 200) pP->p3Velocity.y = -0.5f * 200; } } if (pParticleManager) { pParticleManager->AddSystem(pPS); } }
//----------------------------------------------------------------------------- void LaunchMagicMissileExplosion(EERIE_3D & _ePos, int t = 0, long spellinstance = -1) { // système de partoches pour l'explosion CParticleSystem * pPS = new CParticleSystem(); CParticleParams cp; cp.iNbMax = 100 + t * 50; cp.fLife = 1500; cp.fLifeRandom = 0; cp.p3Pos.x = 10; cp.p3Pos.y = 10; cp.p3Pos.z = 10; cp.p3Direction.x = 0; cp.p3Direction.y = -10; cp.p3Direction.z = 0; cp.fAngle = DEG2RAD(360); cp.fSpeed = 130; cp.fSpeedRandom = 100; cp.p3Gravity.x = 0; cp.p3Gravity.y = 10; cp.p3Gravity.z = 0; cp.fFlash = 0; cp.fRotation = 16; cp.fStartSize = 5; cp.fStartSizeRandom = 10; cp.fEndSize = 0; cp.fEndSizeRandom = 2; if ((spellinstance >= 0) && (spells[spellinstance].caster == 0) && (cur_mr == 3)) { cp.fStartSize = 20; cp.fSpeed = 13; cp.fSpeedRandom = 10; cp.fStartColorRandom[0] = 0; cp.fStartColorRandom[1] = 0; cp.fStartColorRandom[2] = 0; cp.fStartColorRandom[3] = 0; cp.fStartColor[0] = 0; cp.fStartColor[1] = 0; cp.fStartColor[2] = 0; cp.fStartColor[3] = 0; cp.fEndColor[0] = 255; cp.fEndColor[1] = 40; cp.fEndColor[2] = 120; cp.fEndColor[3] = 10;//55; pPS->SetTexture("graph\\particles\\(fx)_mr.bmp", 0, 500); } else { cp.fStartColorRandom[0] = 100; cp.fStartColorRandom[1] = 100; cp.fStartColorRandom[2] = 100; cp.fStartColorRandom[3] = 100; cp.fStartColor[0] = 110; cp.fStartColor[1] = 110; cp.fStartColor[2] = 110; cp.fStartColor[3] = 110; cp.fEndColor[0] = 0; cp.fEndColor[1] = 0; cp.fEndColor[2] = 120; cp.fEndColor[3] = 10; pPS->SetTexture("graph\\particles\\magicexplosion.bmp", 0, 500); } cp.fEndColorRandom[0] = 50; cp.fEndColorRandom[1] = 50; cp.fEndColorRandom[2] = 50; cp.fEndColorRandom[3] = 50; pPS->SetParams(cp); pPS->ulParticleSpawn = 0; EERIE_3D eP; eP.x = _ePos.x; eP.y = _ePos.y; eP.z = _ePos.z; pPS->SetPos(eP); pPS->Update(0); pPS->iParticleNbMax = 0; long id = GetFreeDynLight(); if (id != -1) { DynLight[id].exist = 1; DynLight[id].intensity = 2.3f; DynLight[id].fallstart = 250.f; DynLight[id].fallend = 420.f; if ((spellinstance >= 0) && (spells[spellinstance].caster == 0) && (cur_mr == 3)) { DynLight[id].rgb.r = 1.f; DynLight[id].rgb.g = 0.3f; DynLight[id].rgb.b = .8f; } else { DynLight[id].rgb.r = 0.f; DynLight[id].rgb.g = 0.f; DynLight[id].rgb.b = .8f; } DynLight[id].pos.x = eP.x; DynLight[id].pos.y = eP.y; DynLight[id].pos.z = eP.z; DynLight[id].duration = 1500; } if (pParticleManager) { pParticleManager->AddSystem(pPS); } ARX_SOUND_PlaySFX(SND_SPELL_MM_HIT, &_ePos); }