Exemplo n.º 1
0
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);
	}
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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 );		
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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()))
						);
				}
			}
	}
}
Exemplo n.º 7
0
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);
}
Exemplo n.º 8
0
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);
}
Exemplo n.º 9
0
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);
}
Exemplo n.º 10
0
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);
	}
}
Exemplo n.º 11
0
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);
}
Exemplo n.º 12
0
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);
}
Exemplo n.º 13
0
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);
}
Exemplo n.º 14
0
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);
            }
        }
    }
}
Exemplo n.º 15
0
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);
}
Exemplo n.º 16
0
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);
}
Exemplo n.º 17
0
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);
	}
}
Exemplo n.º 18
0
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);
}
Exemplo n.º 19
0
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;
}
Exemplo n.º 20
0
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);
}
Exemplo n.º 21
0
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);
}
Exemplo n.º 22
0
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);
}
Exemplo n.º 23
0
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);// ?
	}
}
Exemplo n.º 24
0
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();
	}
}
Exemplo n.º 25
0
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;
}
Exemplo n.º 26
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);
}
Exemplo n.º 28
0
//-------------------------
//  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;
}
Exemplo n.º 29
0
//-------------------------
//  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;
}
Exemplo n.º 30
0
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;
}