void CEffects::PlayerDeath(vec2 Pos, int ClientID) { vec3 BloodColor(1.0f,1.0f,1.0f); if(ClientID >= 0) { if(m_pClient->m_aClients[ClientID].m_UseCustomColor) BloodColor = m_pClient->m_pSkins->GetColorV3(m_pClient->m_aClients[ClientID].m_ColorBody); else { const CSkins::CSkin *s = m_pClient->m_pSkins->Get(m_pClient->m_aClients[ClientID].m_SkinID); if(s) BloodColor = s->m_BloodColor; } } for(int i = 0; i < 64; i++) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SPLAT01 + (rand()%3); p.m_Pos = Pos; p.m_Vel = RandomDir() * ((frandom()+0.1f)*900.0f); p.m_LifeSpan = 0.3f + frandom()*0.3f; p.m_StartSize = 24.0f + frandom()*16; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = (frandom()-0.5f) * pi; p.m_Gravity = 800.0f; p.m_Friction = 0.8f; vec3 c = BloodColor * (0.75f + frandom()*0.25f); p.m_Color = vec4(c.r, c.g, c.b, 0.75f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); } }
void CEffects::PowerupShine(vec2 Pos, vec2 size) { if(!m_Add50hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SLICE; p.m_Pos = Pos + vec2((frandom()-0.5f)*size.x, (frandom()-0.5f)*size.y); p.m_Vel = vec2(0, 0); p.m_LifeSpan = 0.5f; p.m_StartSize = 16.0f; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = pi*2; p.m_Gravity = 500; p.m_Friction = 0.9f; p.m_FlowAffected = 0.0f; if (g_Config.m_GfxEyeCandy) { p.m_Gravity = -100; p.m_LifeSpan = 1.3f; p.m_Color = vec4(frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, 0.8f); } m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CEffects::PlayerSpawn(vec2 Pos) { for(int i = 0; i < 32; i++) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SHELL; p.m_Pos = Pos; p.m_Vel = RandomDir() * (powf(frandom(), 3)*600.0f); p.m_LifeSpan = 0.3f + frandom()*0.3f; p.m_StartSize = 64.0f + frandom()*32; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = frandom(); p.m_Gravity = frandom()*-400.0f; p.m_Friction = 0.7f; p.m_Color = vec4(0xb5/255.0f, 0x50/255.0f, 0xcb/255.0f, 1.0f); if (g_Config.m_GfxEyeCandy) { p.m_Gravity = frandom() * -800.0f; } m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); } m_pClient->m_pSounds->Play(CSounds::CHN_WORLD, SOUND_PLAYER_SPAWN, 1.0f, Pos); }
void CParticleEffect::Emit( const Core::CVector3& a_Position, const Core::CVector3& a_Velocity ) { if( m_DeadParticles.size() == 0 ) return; CParticle* particle = m_DeadParticles.back(); Float speed = RandRange( m_MinVelocity, m_MaxVelocity ); particle->Init( a_Position, a_Velocity * speed, RandRange( m_MinLifeTime, m_MinLifeTime ), m_InitialProperties, m_FinalProperties ); m_DeadParticles.pop_back(); assert( m_Interpolator != NULL && "No interpolator give to particle effect" ); m_Interpolator->RegisterParticle( particle, m_InterpolationType ); m_AliveParticles.push_back( particle ); }
void CEffects::HammerHit(vec2 Pos) { // add the explosion CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_HIT01; p.m_Pos = Pos; p.m_LifeSpan = 0.3f; p.m_StartSize = 120.0f; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; m_pClient->m_pParticles->Add(CParticles::GROUP_EXPLOSIONS, &p); m_pClient->m_pSounds->Play(CSounds::CHN_WORLD, SOUND_HAMMER_HIT, 1.0f, Pos); }
void CParticleSystem::Render() { for(unsigned int i = 0; i < m_vActive.size(); i++ ) { for( unsigned int j =0; j < m_vActive[i]->GetParticles().size(); ++j) { CParticle* p = m_vActive[i]->GetParticles()[j] ; if( p->GetIsAlive() == true) { RECT rect = {0,0,m_vActive[i]->GetWidth(),m_vActive[i]->GetHeight()}; //Render the particles TM->Draw( m_vActive[i]->GetImageID(), (int)(p->GetParticlePosX() - m_vActive[i]->GetWidth()/2 * p->GetCurrScaleX()), (int)(p->GetParticlePosY() - m_vActive[i]->GetHeight()/2 * p->GetCurrScaleY()), p->GetCurrScaleX(), p->GetCurrScaleY(), &rect, (float)(m_vActive[i]->GetWidth()/2) /** m_vActive[i]->GetParticles()[j]->GetCurrScaleX()*/, (float)(m_vActive[i]->GetHeight()/2) /** m_vActive[i]->GetParticles()[j]->GetCurrScaleY()*/, m_vActive[i]->GetParticles()[j]->GetCurrRotation(), D3DCOLOR_ARGB(255/*(int)m_vActive[i]->GetParticles()[j]->GetCurrColorA()*/,(int)(p->GetCurrColorR()),(int)(p->GetCurrColorG()),(int)(p->GetCurrColorB())) ); } } } }
void CEffects::FakeExplosion(vec2 Pos) { // add the explosion CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_EXPL01; p.m_Pos = Pos; p.m_LifeSpan = 0.02f; p.m_StartSize = 150.0f; p.m_EndSize = 0; p.m_Rot = 0; p.m_Rotspeed = 0; p.m_Color = vec4(0.05f,1.0f,0.05f,1.0f); m_pClient->m_pParticles->Add(CParticles::GROUP_EXPLOSIONS, &p); }
void CEffects::BulletTrail(vec2 Pos) { if(!m_Add100hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_BALL; p.m_Pos = Pos; p.m_LifeSpan = 0.25f + frandom()*0.25f; p.m_StartSize = 8.0f; p.m_EndSize = 0; p.m_Friction = 0.7f; m_pClient->m_pParticles->Add(CParticles::GROUP_PROJECTILE_TRAIL, &p); }
void CEffects::Emp(vec2 Pos) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; p.m_Vel = vec2(0, 0); p.m_LifeSpan = 0.5f; p.m_StartSize = 0; p.m_EndSize = 1024.0f * 1024.0f; p.m_Friction = 0.0f; p.m_Gravity = 0.0f; p.m_FadeOut = true; p.m_Color = vec4(0.9f, 0.9f, 1.0f, 0.5f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CEffects::Explosion(vec2 Pos) { // add to flow for(int y = -8; y <= 8; y++) for(int x = -8; x <= 8; x++) { if(x == 0 && y == 0) continue; float a = 1 - (length(vec2(x,y)) / length(vec2(8,8))); m_pClient->m_pFlow->Add(Pos+vec2(x,y)*16, normalize(vec2(x,y))*5000.0f*a, 10.0f); } // add the explosion CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_EXPL01; p.m_Pos = Pos; p.m_LifeSpan = 0.4f; p.m_StartSize = 150.0f; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; if (g_Config.m_GfxEyeCandy) { p.m_LifeSpan = 0.6f; p.m_StartSize = 200.0f; } m_pClient->m_pParticles->Add(CParticles::GROUP_EXPLOSIONS, &p); // add the smoke for(int i = 0; i < 24; i++) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; p.m_Vel = RandomDir() * ((1.0f + frandom()*0.2f) * 1000.0f); p.m_LifeSpan = 0.5f + frandom()*0.4f; p.m_StartSize = 32.0f + frandom()*8; p.m_EndSize = 0; p.m_Gravity = frandom()*-800.0f; p.m_Friction = 0.4f; p.m_Color = mix(vec4(0.75f,0.75f,0.75f,1.0f), vec4(0.5f,0.5f,0.5f,1.0f), frandom()); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); } }
void CEffects::SgBulletTrail(vec2 Pos) { if(!m_Add100hz && g_Config.m_GfxEyeCandy) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_BALL; p.m_Pos = Pos; p.m_LifeSpan = 0.35f + frandom()*0.75f; p.m_StartSize = 9.0f; p.m_EndSize = 0; p.m_Friction = 0.5f; p.m_Gravity = -70 + frandom() * 4.0f; p.m_Color = vec4(frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, 1.0f); m_pClient->m_pParticles->Add(CParticles::GROUP_PROJECTILE_TRAIL, &p); }
void CEffects::SmokeTrail(vec2 Pos, vec2 Vel) { if(!m_Add50hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; p.m_Vel = Vel + RandomDir()*50.0f; p.m_LifeSpan = 0.5f + frandom()*0.5f; p.m_StartSize = 12.0f + frandom()*8; p.m_EndSize = 0; p.m_Friction = 0.7f; p.m_Gravity = frandom()*-500.0f; m_pClient->m_pParticles->Add(CParticles::GROUP_PROJECTILE_TRAIL, &p); }
void CEffects::IceExpl(vec2 Pos) { CParticle p; p.SetDefault(); p.m_Set = IMAGE_FX_ICE_EXPL; p.m_Spr = SPRITE_FX_ICE_EXPL; p.m_Pos = Pos; p.m_Vel = vec2(0, 0); p.m_LifeSpan = 0.5f; p.m_StartSize = 0; p.m_EndSize = 256.0f; p.m_Rotspeed = 0.2f; p.m_Friction = 0.0f; p.m_Gravity = 0.0f; p.m_FadeOut = true; m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CParticleManager::Update( float deltaTime ) { for (uint32_t i = 0; i < m_particle.size(); ++i) { CParticle* pParticle = m_particle[i]; if (pParticle != NULL) { if (pParticle->IsAlive()) { pParticle->Update(deltaTime); if (pParticle->GetType() == ePT_Visual) { Function<void(void)> func = Bind(*pParticle, &CParticle::PreRender); CRenderManager::GetInstance()->SendQuadToCache(pParticle->GetPhysics()->GetWorldPos(), pParticle->GetRadius(), pParticle->GetRadius(), pParticle->GetColor(), &func); } } else { UnRegister(pParticle); } } } }
void CEffects::SkidTrail(vec2 Pos, vec2 Vel) { if(!m_Add100hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; p.m_Vel = Vel + RandomDir()*50.0f; p.m_LifeSpan = 0.5f + frandom()*0.5f; p.m_StartSize = 24.0f + frandom()*12; p.m_EndSize = 0; p.m_Friction = 0.7f; p.m_Gravity = frandom()*-500.0f; p.m_Color = vec4(0.75f,0.75f,0.75f,1.0f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CEffects::SmokeTrail(vec2 Pos, vec2 Vel) { if(!m_Add50hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; p.m_Vel = Vel + RandomDir()*50.0f; p.m_LifeSpan = 0.5f + frandom()*0.5f; p.m_StartSize = 12.0f + frandom()*8; p.m_EndSize = 0; p.m_Friction = 0.7; p.m_Gravity = frandom()*-500.0f; if (g_Config.m_GfxEyeCandy) { switch (rand()%5) { case 0: p.m_Spr = SPRITE_PART_SMOKE; break; case 1: p.m_Spr = SPRITE_PART_SLICE; break; case 2: p.m_Spr = SPRITE_PART_AIRJUMP; break; case 3: p.m_Spr = SPRITE_PART_BALL; break; case 4: p.m_Spr = SPRITE_PART_SHELL; break; } p.m_LifeSpan = 0.8f + frandom() * 0.8f; p.m_StartSize = 12.0f + frandom() * 6.0f; p.m_Friction = 0.80005f; p.m_Gravity = frandom() * -1000.0f; p.m_Color = vec4(frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f, frandom() * 0.5f + 0.5f); } m_pClient->m_pParticles->Add(CParticles::GROUP_PROJECTILE_TRAIL, &p); }
void CEffects::PlayerDeath(vec2 Pos, int ClientID) { vec3 BloodColor(1.0f,1.0f,1.0f); if(ClientID >= 0) { if(m_pClient->m_GameInfo.m_GameFlags&GAMEFLAG_TEAMS) { int ColorVal = m_pClient->m_pSkins->GetTeamColor(m_pClient->m_aClients[ClientID].m_aUseCustomColors[CSkins::SKINPART_BODY], m_pClient->m_aClients[ClientID].m_aSkinPartColors[CSkins::SKINPART_BODY], m_pClient->m_aClients[ClientID].m_Team, CSkins::SKINPART_BODY); BloodColor = m_pClient->m_pSkins->GetColorV3(ColorVal); } else { if(m_pClient->m_aClients[ClientID].m_aUseCustomColors[CSkins::SKINPART_BODY]) BloodColor = m_pClient->m_pSkins->GetColorV3(m_pClient->m_aClients[ClientID].m_aSkinPartColors[CSkins::SKINPART_BODY]); else { const CSkins::CSkinPart *s = m_pClient->m_pSkins->GetSkinPart(CSkins::SKINPART_BODY, m_pClient->m_aClients[ClientID].m_SkinPartIDs[CSkins::SKINPART_BODY]); if(s) BloodColor = s->m_BloodColor; } } } for(int i = 0; i < 64; i++) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SPLAT01 + (random_int()%3); p.m_Pos = Pos; p.m_Vel = RandomDir() * ((frandom()+0.1f)*900.0f); p.m_LifeSpan = 0.3f + frandom()*0.3f; p.m_StartSize = 24.0f + frandom()*16; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = (frandom()-0.5f) * pi; p.m_Gravity = 800.0f; p.m_Friction = 0.8f; vec3 c = BloodColor * (0.75f + frandom()*0.25f); p.m_Color = vec4(c.r, c.g, c.b, 0.75f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); } }
void CEffects::Smoke(vec2 Pos, vec2 Dir) { if(!m_Add50hz) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SMOKE; p.m_Pos = Pos; Dir.x += frandom() * 10.0f; p.m_Vel = (Dir + RandomDir()) * ((1.0f + frandom() * 0.2f) * 50.0f); p.m_LifeSpan = 2.0f + frandom() * 2.0f; p.m_StartSize = 32.0f + frandom() * 8; p.m_EndSize = p.m_StartSize - 10.0f; p.m_Friction = 0.4f; p.m_Gravity = frandom() * -800.0f; p.m_Color = mix(vec4(0.75f,0.75f,0.75f,1.0f), vec4(0.5f,0.5f,0.5f,1.0f), frandom()); m_pClient->m_pParticles->Add(CParticles::GROUP_PROJECTILE_TRAIL, &p); }
void CSwarm::elitist_learning() { int j; //double value; CParticle pos; pos=Best; int D=Global::g_dbg->Get_Dimension(); double Sita1 = 1.0; //the start sita in equation (13) double Sita2 = 0.1; // the end sita in equation (13) j=Global::uniform.Next()*D; double mincoordinate=static_cast<Real_DBG*>(Global::g_dbg)->Get_Boundary()[j].lower; double maxcoordinate=static_cast<Real_DBG*>(Global::g_dbg)->Get_Boundary()[j].upper; pos.pself.x[j]=pos.pself.x[j]+(maxcoordinate-mincoordinate)*rnorm2(0,(Sita1-(Sita1-Sita2)*Global::generation/(Global::Max_gen-1))); //pos.x[j] = pos.x[j]+(uBound-lBound)*rnorm2(0,(Sita1-(Sita1-Sita2)*gen/(MAXGENS-1))); if(pos.pself.x[j]>maxcoordinate||pos.pself.x[j]<mincoordinate) pos.pself.x[j]=mincoordinate+(maxcoordinate-mincoordinate)*Global::uniform.Next(); pos.fitness = static_cast<Real_DBG*>(Global::g_dbg)->Evaluation(pos.pself.x); if(pos.Comparison(Best)==1) Best=pos; }
void CEffects::Fallout2(vec2 Pos) { vec3 FalloutColor(0.0f, 0.4f, 0.0f); CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_BALL; p.m_Pos = Pos; p.m_Vel = RandomDir() * ((frandom()+0.1f)*200.0f); p.m_LifeSpan = 5.0f + frandom()*5.0f; p.m_StartSize = 16.0f + frandom()*8; p.m_EndSize = p.m_StartSize; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = (frandom()-0.5f) * pi; p.m_Gravity = 800.0f; p.m_Friction = 0.9f; vec3 c = FalloutColor * (0.75f + frandom()*0.25f); p.m_Color = vec4(c.r, c.g, c.b, 0.75f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CEffects::BlueFlagShine(vec2 Pos, vec2 Size) { if(!m_Add100hz && g_Config.m_GfxEyeCandy) return; CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_SLICE; p.m_Pos = Pos + vec2((frandom()-0.5f) * Size.x / 2.0f, (frandom()-0.5f) * Size.y); p.m_Vel = vec2(0, 0); p.m_Gravity = frandom() -170.0; p.m_LifeSpan = 7.0f / 10.0f; p.m_Color = vec4(frandom()*0.5f,frandom()*0.5f,frandom()*0.5f + 0.5f,0.5f); p.m_StartSize = 15.0f; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = pi*2; p.m_Friction = 0.9f; p.m_FlowAffected = 0.0f; m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); }
void CEffects::AirJump(vec2 Pos) { CParticle p; p.SetDefault(); p.m_Spr = SPRITE_PART_AIRJUMP; p.m_Pos = Pos + vec2(-6.0f, 16.0f); p.m_Vel = vec2(0, -200); p.m_LifeSpan = 0.5f; p.m_StartSize = 48.0f; p.m_EndSize = 0; p.m_Rot = frandom()*pi*2; p.m_Rotspeed = pi*2; p.m_Gravity = 500; p.m_Friction = 0.7f; p.m_FlowAffected = 0.0f; m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); p.m_Pos = Pos + vec2(6.0f, 16.0f); m_pClient->m_pParticles->Add(CParticles::GROUP_GENERAL, &p); m_pClient->m_pSounds->Play(CSounds::CHN_WORLD, SOUND_PLAYER_AIRJUMP, 1.0f, Pos); }
void CPSSpawnEffect::Render(void) { if (PointIsVisible(m_vecOrigin)) { if (gHUD.m_iPaused <= 0) { gEngfuncs.GetViewAngles(m_vecAngles); VectorAdd(m_vecAngles, ev_punchangle, m_vecAngles); } Vector v_up, v_right; AngleVectors(m_vecAngles, NULL, v_right, v_up); CParticle *p = NULL; for (int i = 0; i < m_iNumParticles; ++i) { p = &m_pParticleList[i]; if (p->m_fEnergy <= 0.0f) continue; p->Render(v_right, v_up, m_iRenderMode); } gEngfuncs.pTriAPI->RenderMode(kRenderNormal);// ? } }
void CParticleEmitter::Update() { if (timer >= param.intervalTime) { //パーティクルを生成。 CParticle* p = new CParticle; p->Init(*random, *camera, param, emitPosition); timer = 0.0f; particleList.push_back(p); } timer += 1.0f / 60.0f; std::list<CParticle*>::iterator p = particleList.begin(); while (p != particleList.end()){ if ((*p)->GetDead()) { p = particleList.erase(p); } else { p++; } } p = particleList.begin(); while (p != particleList.end()){ (*p++)->Update(); } }
bool CPSSpawnEffect::Update(const float &time, const double &elapsedTime) { if (m_fDieTime > 0.0f && m_fDieTime <= time) dying = true; else if (m_iNumParticles == 0) dying = true; if (dying) return 1; if (!(m_iFlags & RENDERSYSTEM_FLAG_DONTFOLLOW)) FollowEntity(); CParticle *curPart = NULL; for (int i = 0; i < m_iNumParticles; ++i) { curPart = &m_pParticleList[i]; if (curPart->m_fEnergy <= 0.0f) m_pParticleList[i] = m_pParticleList[--m_iNumParticles]; VectorCopy(curPart->m_vPos, curPart->m_vPosPrev); curPart->m_vPos[0] = m_vecOrigin[0] + m_fRadius*sinf(-6.0f*time + (float)(i*2)); curPart->m_vPos[1] = m_vecOrigin[1] + m_fRadius*cosf(-6.0f*time + (float)(i*2)); curPart->m_vPos[2] = curPart->m_vPos[2] + curPart->m_vVel[2]*elapsedTime; VectorMA(curPart->m_vVel, elapsedTime, curPart->m_vAccel, curPart->m_vVel); if (m_iFlags & RENDERSYSTEM_FLAG_RANDOMFRAME) curPart->FrameRandomize(); else curPart->FrameIncrease(); // curPart->m_fEnergy += m_fBrightnessDelta*elapsedTime; curPart->UpdateColor(elapsedTime); curPart->UpdateSize(elapsedTime); curPart->UpdateEnergyByBrightness(); } m_fRadius += m_fRadiusDelta*elapsedTime;// effect radius is increasing return 0; }
//------------------------- // FX_AddParticle //------------------------- CParticle *FX_AddParticle( vec3_t org, vec3_t vel, vec3_t accel, float size1, float size2, float sizeParm, float alpha1, float alpha2, float alphaParm, vec3_t sRGB, vec3_t eRGB, float rgbParm, float rotation, float rotationDelta, vec3_t min, vec3_t max, float elasticity, int deathID, int impactID, int killTime, qhandle_t shader, int flags = 0, EMatImpactEffect matImpactFX /*MATIMPACTFX_NONE*/, int fxParm /*-1*/, int iGhoul2/*0*/, int entNum/*-1*/, int modelNum/*-1*/, int boltNum/*-1*/ ) { if ( theFxHelper.mFrameTime < 0 ) { // disallow adding effects when the system is paused return 0; } CParticle *fx = new CParticle; if ( fx ) { if (flags&FX_RELATIVE && iGhoul2>0) { fx->SetOrigin1( NULL ); fx->SetOrgOffset( org ); fx->SetBoltinfo( iGhoul2, entNum, modelNum, boltNum ); } else { fx->SetOrigin1( org ); } fx->SetOrigin1( org ); fx->SetMatImpactFX(matImpactFX); fx->SetMatImpactParm(fxParm); fx->SetVel( vel ); fx->SetAccel( accel ); // RGB---------------- fx->SetRGBStart( sRGB ); fx->SetRGBEnd( eRGB ); if (( flags & FX_RGB_PARM_MASK ) == FX_RGB_WAVE ) { fx->SetRGBParm( rgbParm * PI * 0.001f ); } else if ( flags & FX_RGB_PARM_MASK ) { // rgbParm should be a value from 0-100.. fx->SetRGBParm(rgbParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } // Alpha---------------- fx->SetAlphaStart( alpha1 ); fx->SetAlphaEnd( alpha2 ); if (( flags & FX_ALPHA_PARM_MASK ) == FX_ALPHA_WAVE ) { fx->SetAlphaParm( alphaParm * PI * 0.001f ); } else if ( flags & FX_ALPHA_PARM_MASK ) { fx->SetAlphaParm(alphaParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } // Size---------------- fx->SetSizeStart( size1 ); fx->SetSizeEnd( size2 ); if (( flags & FX_SIZE_PARM_MASK ) == FX_SIZE_WAVE ) { fx->SetSizeParm( sizeParm * PI * 0.001f ); } else if ( flags & FX_SIZE_PARM_MASK ) { fx->SetSizeParm(sizeParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } fx->SetFlags( flags ); fx->SetShader( shader ); fx->SetRotation( rotation ); fx->SetRotationDelta( rotationDelta ); fx->SetElasticity( elasticity ); fx->SetMin( min ); fx->SetMax( max ); fx->SetDeathFxID( deathID ); fx->SetImpactFxID( impactID ); fx->Init(); FX_AddPrimitive( (CEffect**)&fx, killTime ); } return fx; }
//--------------------------------------------------------------------- void CHeal::Update(unsigned long aulTime) { ulCurrentTime += aulTime; if (ulCurrentTime >= ulDuration) { return; } if (spells[spellinstance].caster == 0) { eSrc.x = player.pos.x; eSrc.y = player.pos.y; eSrc.z = player.pos.z; } else { if (ValidIONum(spells[spellinstance].target)) { eSrc.x = inter.iobj[spells[spellinstance].target]->pos.x; eSrc.y = inter.iobj[spells[spellinstance].target]->pos.y; eSrc.z = inter.iobj[spells[spellinstance].target]->pos.z; } } if (pPS->lLightId == -1) pPS->lLightId = GetFreeDynLight(); if (pPS->lLightId != -1) { long id = pPS->lLightId; DynLight[id].exist = 1; DynLight[id].intensity = 2.3f; DynLight[id].fallstart = 200.f; DynLight[id].fallend = 350.f; DynLight[id].rgb.r = 0.4f; DynLight[id].rgb.g = 0.4f; DynLight[id].rgb.b = 1.0f; DynLight[id].pos.x = eSrc.x; DynLight[id].pos.y = eSrc.y - 50.f; DynLight[id].pos.z = eSrc.z; DynLight[id].duration = 200; DynLight[id].extras = 0; } unsigned long ulCalc = ulDuration - ulCurrentTime ; ARX_CHECK_LONG(ulCalc); long ff = ARX_CLEAN_WARN_CAST_LONG(ulCalc); if (ff < 1500) { pPS->uMaxParticles = 0; pPS->ulParticleSpawn = PARTICLE_CIRCULAR; pPS->p3ParticleGravity.x = 0; pPS->p3ParticleGravity.y = 0; pPS->p3ParticleGravity.z = 0; list<CParticle *>::iterator i; for (i = pPS->listParticle.begin(); i != pPS->listParticle.end(); ++i) { CParticle * pP = *i; if (pP->isAlive()) { pP->fColorEnd[3] = 0; if (pP->ulTime + ff < pP->ulTTL) { pP->ulTime = pP->ulTTL - ff; } } } } pPS->SetPos(eSrc); pPS->Update(aulTime); }
//------------------------- // FX_AddParticle //------------------------- CParticle *FX_AddParticle( int clientID, const vec3_t org, const vec3_t vel, const vec3_t accel, float gravity, float size1, float size2, float sizeParm, float alpha1, float alpha2, float alphaParm, const vec3_t rgb1, const vec3_t rgb2, float rgbParm, float rotation, float rotationDelta, int killTime, qhandle_t shader, int flags = 0 ) { if ( theFxHelper.mFrameTime < 1 ) { // disallow adding effects when the system is paused return 0; } CParticle *fx = new CParticle; if ( fx ) { fx->SetOrigin1( NULL ); fx->SetOrgOffset( org ); fx->SetVel( vel ); fx->SetAccel( accel ); fx->SetGravity( gravity ); // RGB---------------- fx->SetRGBStart( rgb1 ); fx->SetRGBEnd( rgb2 ); if (( flags & FX_RGB_PARM_MASK ) == FX_RGB_WAVE ) { fx->SetRGBParm( rgbParm * PI * 0.001f ); } else if ( flags & FX_RGB_PARM_MASK ) { // rgbParm should be a value from 0-100.. fx->SetRGBParm( rgbParm * 0.01f * killTime + theFxHelper.mTime ); } // Alpha---------------- fx->SetAlphaStart( alpha1 ); fx->SetAlphaEnd( alpha2 ); if (( flags & FX_ALPHA_PARM_MASK ) == FX_ALPHA_WAVE ) { fx->SetAlphaParm( alphaParm * PI * 0.001f ); } else if ( flags & FX_ALPHA_PARM_MASK ) { fx->SetAlphaParm( alphaParm * 0.01f * killTime + theFxHelper.mTime ); } // Size---------------- fx->SetSizeStart( size1 ); fx->SetSizeEnd( size2 ); if (( flags & FX_SIZE_PARM_MASK ) == FX_SIZE_WAVE ) { fx->SetSizeParm( sizeParm * PI * 0.001f ); } else if ( flags & FX_SIZE_PARM_MASK ) { fx->SetSizeParm( sizeParm * 0.01f * killTime + theFxHelper.mTime ); } fx->SetFlags( flags ); fx->SetShader( shader ); fx->SetRotation( rotation ); fx->SetRotationDelta( rotationDelta ); fx->SetElasticity( 0.0f ); fx->SetMin( NULL ); fx->SetMax( NULL ); fx->SetClient( clientID ); FX_AddPrimitive( (CEffect**)&fx, killTime ); } return fx; }
//------------------------- // FX_AddParticle //------------------------- CParticle *FX_AddParticle( const vec3_t org, const vec3_t vel, const vec3_t accel, float size1, float size2, float sizeParm, float alpha1, float alpha2, float alphaParm, const vec3_t sRGB, const vec3_t eRGB, float rgbParm, float rotation, float rotationDelta, const vec3_t min, const vec3_t max, float elasticity, int deathID, int impactID, int killTime, qhandle_t shader, int flags = 0 ) { if ( theFxHelper.mFrameTime < 1 ) { // disallow adding effects when the system is paused return 0; } CParticle *fx = new CParticle; if ( fx ) { fx->SetOrigin1( org ); fx->SetVel( vel ); fx->SetAccel( accel ); // RGB---------------- fx->SetRGBStart( sRGB ); fx->SetRGBEnd( eRGB ); if (( flags & FX_RGB_PARM_MASK ) == FX_RGB_WAVE ) { fx->SetRGBParm( rgbParm * PI * 0.001f ); } else if ( flags & FX_RGB_PARM_MASK ) { // rgbParm should be a value from 0-100.. fx->SetRGBParm( rgbParm * 0.01f * killTime + theFxHelper.mTime ); } // Alpha---------------- fx->SetAlphaStart( alpha1 ); fx->SetAlphaEnd( alpha2 ); if (( flags & FX_ALPHA_PARM_MASK ) == FX_ALPHA_WAVE ) { fx->SetAlphaParm( alphaParm * PI * 0.001f ); } else if ( flags & FX_ALPHA_PARM_MASK ) { fx->SetAlphaParm( alphaParm * 0.01f * killTime + theFxHelper.mTime ); } // Size---------------- fx->SetSizeStart( size1 ); fx->SetSizeEnd( size2 ); if (( flags & FX_SIZE_PARM_MASK ) == FX_SIZE_WAVE ) { fx->SetSizeParm( sizeParm * PI * 0.001f ); } else if ( flags & FX_SIZE_PARM_MASK ) { fx->SetSizeParm( sizeParm * 0.01f * killTime + theFxHelper.mTime ); } fx->SetFlags( flags ); fx->SetShader( shader ); fx->SetRotation( rotation ); fx->SetRotationDelta( rotationDelta ); fx->SetElasticity( elasticity ); fx->SetMin( min ); fx->SetMax( max ); fx->SetDeathFxID( deathID ); fx->SetImpactFxID( impactID ); FX_AddPrimitive( (CEffect**)&fx, killTime ); // in the editor, fx may now be NULL } return fx; }
void CSystemInstance::SpawnParticle() { m_iNumParticlesAlive++; m_iTotalEmitted++; CParticle* pNewParticle = NULL; for (size_t i = 0; i < m_aParticles.size(); i++) { CParticle* pParticle = &m_aParticles[i]; if (pParticle->m_bActive) continue; pNewParticle = pParticle; break; } if (!pNewParticle) { m_aParticles.push_back(CParticle()); pNewParticle = &m_aParticles[m_aParticles.size()-1]; } Vector vecDistance = Vector(0,0,0); if (m_pSystem->GetEmissionMaxDistance() > 0) { float flYaw = RandomFloat(-180, 180); float flDistance = cos(RandomFloat(0, M_PI/2)) * m_pSystem->GetEmissionMaxDistance(); float flPitch = sin(RandomFloat(-M_PI/2, M_PI/2)) * 90; vecDistance = AngleVector(EAngle(flPitch, flYaw, 0)) * flDistance; } pNewParticle->Reset(); pNewParticle->m_vecOrigin = m_vecOrigin + m_pSystem->GetSpawnOffset() + vecDistance; pNewParticle->m_vecVelocity = m_vecInheritedVelocity * m_pSystem->GetInheritedVelocity(); if (m_pSystem->GetRandomVelocity().Size().LengthSqr() > 0) { Vector vecMins = m_pSystem->GetRandomVelocity().m_vecMins; Vector vecMaxs = m_pSystem->GetRandomVelocity().m_vecMaxs; pNewParticle->m_vecVelocity.x += RandomFloat(vecMins.x, vecMaxs.x); pNewParticle->m_vecVelocity.y += RandomFloat(vecMins.y, vecMaxs.y); pNewParticle->m_vecVelocity.z += RandomFloat(vecMins.z, vecMaxs.z); } pNewParticle->m_angAngles = m_angAngles; if (m_pSystem->GetRandomModelYaw()) pNewParticle->m_angAngles.y = RandomFloat(0, 360); if (m_pSystem->GetRandomModelRoll()) pNewParticle->m_angAngles.r = RandomFloat(-180, 180); if (m_pSystem->GetRandomAngleVelocity()) pNewParticle->m_angAngleVelocity = EAngle(RandomFloat(-90, 90), RandomFloat(-180, 180), RandomFloat(-90, 90)); if (m_pSystem->GetFadeIn()) pNewParticle->m_flAlpha = 0; else pNewParticle->m_flAlpha = m_pSystem->GetAlpha(); pNewParticle->m_flRadius = m_pSystem->GetStartRadius(); if (m_pSystem->GetRandomBillboardYaw()) pNewParticle->m_flBillboardYaw = RandomFloat(0, 360); else pNewParticle->m_flBillboardYaw = 0; }