本文整理汇总了C++中CL_AllocParticle函数的典型用法代码示例。如果您正苦于以下问题:C++ CL_AllocParticle函数的具体用法?C++ CL_AllocParticle怎么用?C++ CL_AllocParticle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CL_AllocParticle函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CL_ColorExplosionParticles
/*
===============
CL_ColorExplosionParticles
===============
*/
void CL_ColorExplosionParticles (vec3_t org, int color, int run)
{
int i, j;
cparticle_t *p;
for (i=0 ; i<128 ; i++)
{
p = CL_AllocParticle();
if (!p)
return;
p->time = cl.time;
p->color = color + (rand() % run);
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()%32)-16);
p->vel[j] = (rand()%256)-128;
}
p->accel[0] = p->accel[1] = 0;
p->accel[2] = -PARTICLE_GRAVITY;
p->alpha = 1.0;
p->alphavel = -0.4 / (0.6 + frand()*0.2);
}
}
示例2: CL_RunParticleEffect
/*
===============
ParticleEffect
PARTICLE_EFFECT on server
===============
*/
void CL_RunParticleEffect( const vec3_t org, const vec3_t dir, int color, int count )
{
particle_t *p;
int i, j;
if( count == 1024 )
{
// Quake hack: count == 255 it's a RocketExplode
CL_ParticleExplosion( org );
return;
}
for( i = 0; i < count; i++ )
{
p = CL_AllocParticle( NULL );
if( !p ) return;
p->die += Com_RandomFloat( 0.0f, 0.5f );
p->color = ( color & ~7 ) + Com_RandomLong( 0, 8 );
p->type = pt_slowgrav;
for( j = 0; j < 3; j++ )
{
p->org[j] = org[j] + Com_RandomFloat( -8, 8 );
p->vel[j] = dir[j] * 15;
}
}
}
示例3: CL_ParticleBurst
/*
===============
CL_ParticleBurst
===============
*/
void CL_ParticleBurst( const vec3_t org, int size, int color, float life )
{
particle_t *p;
float vel;
vec3_t dir;
int i, j, k;
for( i = -size; i < size; i++ )
{
for( j = -size; j < size; j++ )
{
for( k = 0; k < 1; k++ )
{
p = CL_AllocParticle( NULL );
if( !p ) return;
p->die += life + Com_RandomFloat( 0.0f, 0.1f );
p->color = color;
p->type = pt_slowgrav;
dir[0] = j * 8 + Com_RandomLong( 0, 8 );
dir[1] = i * 8 + Com_RandomLong( 0, 8 );
dir[2] = 256;
p->org[0] = org[0] + dir[0];
p->org[1] = org[1] + dir[1];
p->org[2] = org[2] + Com_RandomLong( 0, 64 );
VectorNormalize( dir );
vel = 50 + Com_RandomLong( 0, 64 );
VectorScale( dir, vel, p->vel );
}
}
}
}
示例4: CL_TracerEffect
/*
===============
CL_TracerEffect
===============
*/
void CL_TracerEffect( const vec3_t start, const vec3_t end )
{
particle_t *p;
byte *color;
vec3_t dir;
float life, dist;
p = CL_AllocParticle( CL_BulletTracerDraw );
if( !p ) return;
// get out shot direction and length
VectorSubtract( end, start, dir );
VectorCopy( dir, p->vel );
dist = VectorNormalizeLength( dir );
// don't make small tracers
if( dist <= traceroffset->value )
return;
p->ramp = Com_RandomFloat( 200.0f, 256.0f ) * tracerlength->value;
color = gTracerColors[4];
life = ( dist + p->ramp ) / ( max( 1.0f, tracerspeed->value ));
p->color = CL_LookupColor( color[0], color[1], color[2] );
VectorCopy( start, p->org );
p->type = pt_tracer;
p->die += life;
}
示例5: CL_EntityParticles
/*
===============
CL_EntityParticles
set EF_BRIGHTFIELD effect
===============
*/
void CL_EntityParticles( cl_entity_t *ent )
{
float angle;
float sr, sp, sy, cr, cp, cy;
vec3_t forward;
particle_t *p;
int i;
for( i = 0; i < NUMVERTEXNORMALS; i++ )
{
p = CL_AllocParticle( NULL );
if( !p ) return;
angle = cl.time * cl_avelocities[i][0];
SinCos( angle, &sy, &cy );
angle = cl.time * cl_avelocities[i][1];
SinCos( angle, &sp, &cp );
angle = cl.time * cl_avelocities[i][2];
SinCos( angle, &sr, &cr );
VectorSet( forward, cp * cy, cp * sy, -sp );
p->die += 0.01f;
p->color = 111; // yellow
p->type = pt_explode;
p->org[0] = ent->origin[0] + cl_avertexnormals[i][0] * 64.0f + forward[0] * 16.0f;
p->org[1] = ent->origin[1] + cl_avertexnormals[i][1] * 64.0f + forward[1] * 16.0f;
p->org[2] = ent->origin[2] + cl_avertexnormals[i][2] * 64.0f + forward[2] * 16.0f;
}
}
示例6: CL_LavaSplash
/*
===============
CL_LavaSplash
===============
*/
void CL_LavaSplash( const vec3_t org )
{
particle_t *p;
float vel;
vec3_t dir;
int i, j, k;
for( i = -16; i < 16; i++ )
{
for( j = -16; j <16; j++ )
{
for( k = 0; k < 1; k++ )
{
p = CL_AllocParticle( NULL );
if( !p ) return;
p->die += 2.0f + (rand() & 31) * 0.02f;
p->color = 224 + (rand() & 7);
p->type = pt_slowgrav;
dir[0] = j * 8.0f + (rand() & 7);
dir[1] = i * 8.0f + (rand() & 7);
dir[2] = 256;
p->org[0] = org[0] + dir[0];
p->org[1] = org[1] + dir[1];
p->org[2] = org[2] + (rand() & 63);
VectorNormalize( dir );
vel = 50 + (rand() & 63);
VectorScale( dir, vel, p->vel );
}
}
}
}
示例7: CL_TeleportSplash
/*
===============
CL_TeleportSplash
===============
*/
void CL_TeleportSplash( const vec3_t org )
{
particle_t *p;
vec3_t dir;
int i, j, k;
for( i = -16; i < 16; i += 4 )
{
for( j = -16; j < 16; j += 4 )
{
for( k = -24; k < 32; k += 4 )
{
p = CL_AllocParticle( NULL );
if( !p ) return;
p->die += 0.2f + (rand() & 7) * 0.02f;
p->color = 7 + (rand() & 7);
p->type = pt_slowgrav;
dir[0] = j * 8.0f;
dir[1] = i * 8.0f;
dir[2] = k * 8.0f;
p->org[0] = org[0] + i + (rand() & 3);
p->org[1] = org[1] + j + (rand() & 3);
p->org[2] = org[2] + k + (rand() & 3);
VectorNormalize( dir );
VectorScale( dir, (50 + (rand() & 63)), p->vel );
}
}
}
}
示例8: CLQ2_BigTeleportParticles
void CLQ2_BigTeleportParticles( vec3_t origin ) {
static int colortable[ 4 ] = {2 * 8, 13 * 8, 21 * 8, 18 * 8};
for ( int i = 0; i < 4096; i++ ) {
cparticle_t* p = CL_AllocParticle();
if ( !p ) {
return;
}
p->type = pt_q2static;
p->color = colortable[ rand() & 3 ];
float angle = idMath::TWO_PI * ( rand() & 1023 ) / 1023.0;
float dist = rand() & 31;
p->org[ 0 ] = origin[ 0 ] + cos( angle ) * dist;
p->vel[ 0 ] = cos( angle ) * ( 70 + ( rand() & 63 ) );
p->accel[ 0 ] = -cos( angle ) * 100;
p->org[ 1 ] = origin[ 1 ] + sin( angle ) * dist;
p->vel[ 1 ] = sin( angle ) * ( 70 + ( rand() & 63 ) );
p->accel[ 1 ] = -sin( angle ) * 100;
p->org[ 2 ] = origin[ 2 ] + 8 + ( rand() % 90 );
p->vel[ 2 ] = -100 + ( rand() & 31 );
p->accel[ 2 ] = PARTICLE_GRAVITY * 4;
p->alpha = 1.0;
p->alphavel = -0.3 / ( 0.5 + frand() * 0.3 );
}
}
示例9: CLQ2_BlasterTrail
void CLQ2_BlasterTrail( vec3_t start, vec3_t end ) {
vec3_t move;
VectorCopy( start, move );
vec3_t vec;
VectorSubtract( end, start, vec );
float len = VectorNormalize( vec );
int dec = 5;
VectorScale( vec, 5, vec );
// FIXME: this is a really silly way to have a loop
while ( len > 0 ) {
len -= dec;
cparticle_t* p = CL_AllocParticle();
if ( !p ) {
return;
}
p->type = pt_q2static;
VectorClear( p->accel );
p->alpha = 1.0;
p->alphavel = -1.0 / ( 0.3 + frand() * 0.2 );
p->color = 0xe0;
for ( int j = 0; j < 3; j++ ) {
p->org[ j ] = move[ j ] + crand();
p->vel[ j ] = crand() * 5;
p->accel[ j ] = 0;
}
VectorAdd( move, vec, move );
}
}
示例10: CLQ2_Tracker_Explode
void CLQ2_Tracker_Explode( vec3_t origin ) {
for ( int i = 0; i < 300; i++ ) {
cparticle_t* p = CL_AllocParticle();
if ( !p ) {
return;
}
p->type = pt_q2static;
VectorClear( p->accel );
p->alpha = 1.0;
p->alphavel = -1.0;
p->color = 0;
vec3_t dir;
dir[ 0 ] = crand();
dir[ 1 ] = crand();
dir[ 2 ] = crand();
VectorNormalize( dir );
vec3_t backdir;
VectorScale( dir, -1, backdir );
VectorMA( origin, 64, dir, p->org );
VectorScale( backdir, 64, p->vel );
}
}
示例11: CLQ2_ItemRespawnParticles
void CLQ2_ItemRespawnParticles( vec3_t origin ) {
for ( int i = 0; i < 64; i++ ) {
cparticle_t* p = CL_AllocParticle();
if ( !p ) {
return;
}
p->type = pt_q2static;
p->color = 0xd4 + ( rand() & 3 ); // green
p->org[ 0 ] = origin[ 0 ] + crand() * 8;
p->org[ 1 ] = origin[ 1 ] + crand() * 8;
p->org[ 2 ] = origin[ 2 ] + crand() * 8;
for ( int j = 0; j < 3; j++ ) {
p->vel[ j ] = crand() * 8;
}
p->accel[ 0 ] = p->accel[ 1 ] = 0;
p->accel[ 2 ] = -PARTICLE_GRAVITY * 0.2;
p->alpha = 1.0;
p->alphavel = -1.0 / ( 1.0 + frand() * 0.3 );
}
}
示例12: CLQ2_WidowSplash
void CLQ2_WidowSplash( vec3_t origin ) {
static int colortable[ 4 ] = {2 * 8, 13 * 8, 21 * 8, 18 * 8};
for ( int i = 0; i < 256; i++ ) {
cparticle_t* p = CL_AllocParticle();
if ( !p ) {
return;
}
p->type = pt_q2static;
p->color = colortable[ rand() & 3 ];
vec3_t dir;
dir[ 0 ] = crand();
dir[ 1 ] = crand();
dir[ 2 ] = crand();
VectorNormalize( dir );
VectorMA( origin, 45.0, dir, p->org );
VectorMA( oldvec3_origin, 40.0, dir, p->vel );
p->accel[ 0 ] = p->accel[ 1 ] = 0;
p->alpha = 1.0;
p->alphavel = -0.8 / ( 0.5 + frand() * 0.3 );
}
}
示例13: puffs
/*
===============
CL_BlasterParticles2
Wall impact puffs (Green)
===============
*/
void CL_BlasterParticles2 (vec3_t org, vec3_t dir, unsigned int color)
{
int i, j;
cparticle_t *p;
float d;
int count;
count = 40;
for (i=0 ; i<count ; i++)
{
p = CL_AllocParticle();
if (!p)
return;
p->time = cl.time;
p->color = color + (rand()&7);
d = rand()&15;
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()&7)-4) + d*dir[j];
p->vel[j] = dir[j] * 30 + crand()*40;
}
p->accel[0] = p->accel[1] = 0;
p->accel[2] = -PARTICLE_GRAVITY;
p->alpha = 1.0;
p->alphavel = -1.0 / (0.5 + frand()*0.3);
}
}
示例14: CL_ParticleSmokeEffect
/*
===============
CL_ParticleSmokeEffect - like the steam effect, but unaffected by gravity
===============
*/
void CL_ParticleSmokeEffect (vec3_t org, vec3_t dir, int color, int count, int magnitude)
{
int i, j;
cparticle_t *p;
float d;
vec3_t r, u;
MakeNormalVectors (dir, r, u);
for (i=0 ; i<count ; i++)
{
p = CL_AllocParticle();
if (!p)
return;
p->time = cl.time;
p->color = color + (rand()&7);
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + magnitude*0.1*crand();
// p->vel[j] = dir[j]*magnitude;
}
VectorScale (dir, magnitude, p->vel);
d = crand()*magnitude/3;
VectorMA (p->vel, d, r, p->vel);
d = crand()*magnitude/3;
VectorMA (p->vel, d, u, p->vel);
p->accel[0] = p->accel[1] = p->accel[2] = 0;
p->alpha = 1.0;
p->alphavel = -1.0 / (0.5 + frand()*0.3);
}
}
示例15: CL_ParseParticles
/*
==================
CL_ParseParticles
==================
*/
void CL_ParseParticles( sizebuf_t *msg )
{
vec3_t org, dir;
int i, count, color;
float life;
BF_ReadVec3Coord( msg, org );
for( i = 0; i < 3; i++ )
dir[i] = BF_ReadChar( msg ) * (1.0f / 16);
count = BF_ReadByte( msg );
color = BF_ReadByte( msg );
if( count == 255 ) count = 1024;
life = BF_ReadByte( msg ) * 0.125f;
if( life != 0.0f && count == 1 )
{
particle_t *p;
p = CL_AllocParticle( NULL );
if( !p ) return;
p->die += life;
p->color = color;
p->type = pt_static;
VectorCopy( org, p->org );
VectorCopy( dir, p->vel );
}
else CL_RunParticleEffect( org, dir, color, count );
}