From 816d331b91773b51469beb90f41d70bc343ea1e0 Mon Sep 17 00:00:00 2001 From: TimeServ Date: Thu, 26 Aug 2004 17:59:48 +0000 Subject: [PATCH] particle trail fixes... hopefully git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@50 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/r_part.c | 70 +++++++++++++++++++++++++-------------- engine/client/r_partset.c | 4 +-- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/engine/client/r_part.c b/engine/client/r_part.c index 8c59faed0..7a0feec78 100644 --- a/engine/client/r_part.c +++ b/engine/client/r_part.c @@ -1865,13 +1865,12 @@ float R_RocketTrail (vec3_t start, vec3_t end, int type, float lastdistance) { vec3_t vec, right, up; float len; - int j; - static int tcount; + int tcount; particle_t *p; part_type_t *ptype = &part_type[type]; float veladd = -ptype->veladd; - float randvel = ptype->randomvel*2; + float randvel = ptype->randomvel; float step; float stop; @@ -1901,8 +1900,8 @@ float R_RocketTrail (vec3_t start, vec3_t end, int type, float lastdistance) if (ptype->spawnmode == SM_SPIRAL) { VectorVectors(vec, right, up); - VectorScale(right, ptype->offsetspread, right); - VectorScale(up, ptype->offsetspread, up); +// VectorScale(right, ptype->offsetspread, right); +// VectorScale(up, ptype->offsetspread, up); } stop = lastdistance + len; //when to stop @@ -1931,6 +1930,9 @@ float R_RocketTrail (vec3_t start, vec3_t end, int type, float lastdistance) p->color = 0; p->nextemit = particletime + ptype->emitstart - p->die; + if (ptype->spawnmode == SM_TRACER) + tcount = (int)(len * ptype->count); + if (ptype->colorindex >= 0) { int cidx; @@ -1962,42 +1964,60 @@ float R_RocketTrail (vec3_t start, vec3_t end, int type, float lastdistance) switch(ptype->spawnmode) { case SM_TRACER: - VectorCopy(start, p->org); - tcount++; - if (tcount & 1) { - p->vel[0] = vec[1]*ptype->areaspread; - p->vel[1] = -vec[0]*ptype->areaspread; + p->vel[0] = vec[1]*ptype->offsetspread; + p->vel[1] = -vec[0]*ptype->offsetspread; + p->org[0] = vec[1]*ptype->areaspread; + p->org[1] = -vec[0]*ptype->areaspread; } else { - p->vel[0] = -vec[1]*ptype->areaspread; - p->vel[1] = vec[0]*ptype->areaspread; + p->vel[0] = -vec[1]*ptype->offsetspread; + p->vel[1] = vec[0]*ptype->offsetspread; + p->org[0] = -vec[1]*ptype->areaspread; + p->org[1] = vec[0]*ptype->areaspread; } p->vel[0] += vec[0]*veladd+crandom()*randvel; p->vel[1] += vec[1]*veladd+crandom()*randvel; p->vel[2] = vec[2]*veladd+crandom()*randvel; + + p->org[0] += start[0]; + p->org[1] += start[1]; + p->org[2] = start[2]; break; case SM_SPIRAL: - p->vel[0] = cos(len/50); - p->vel[1] = sin(len/50); - for (j=0 ; j<3 ; j++) - p->org[j] = start[j] + right[j]*p->vel[0] + up[j]*p->vel[1]; + { + float tsin, tcos; - p->vel[0] = vec[0]*veladd+crandom()*randvel; - p->vel[1] = vec[1]*veladd+crandom()*randvel; - p->vel[2] = vec[2]*veladd+crandom()*randvel; + tcos = cos(len/50)*ptype->areaspread; + tsin = sin(len/50)*ptype->areaspread; + + p->org[0] = start[0] + right[0]*tcos + up[0]*tsin; + p->org[1] = start[1] + right[1]*tcos + up[1]*tsin; + p->org[2] = start[2] + right[2]*tcos + up[2]*tsin; + + tcos = cos(len/50)*ptype->offsetspread; + tsin = sin(len/50)*ptype->offsetspread; + + p->vel[0] = vec[0]*veladd+crandom()*randvel + right[0]*tcos + up[0]*tsin; + p->vel[1] = vec[1]*veladd+crandom()*randvel + right[1]*tcos + up[1]*tsin; + p->vel[2] = vec[2]*veladd+crandom()*randvel + right[2]*tcos + up[2]*tsin; + } break; default: - p->org[0] = start[0] + crandom()*ptype->areaspread; - p->org[1] = start[1] + crandom()*ptype->areaspread; - p->org[2] = start[2] + crandom()*ptype->areaspreadvert; + p->org[0] = crandom(); + p->org[1] = crandom(); + p->org[2] = crandom(); - p->vel[0] = vec[0]*veladd+crandom()*randvel; - p->vel[1] = vec[1]*veladd+crandom()*randvel; - p->vel[2] = vec[2]*veladd+crandom()*randvel; + p->vel[0] = vec[0]*veladd+crandom()*randvel + p->org[0]*ptype->offsetspread; + p->vel[1] = vec[1]*veladd+crandom()*randvel + p->org[1]*ptype->offsetspread; + p->vel[2] = vec[2]*veladd+crandom()*randvel + p->org[2]*ptype->offsetspreadvert; + + p->org[0] = p->org[0]*ptype->areaspread + start[0]; + p->org[1] = p->org[1]*ptype->areaspread + start[1]; + p->org[2] = p->org[2]*ptype->areaspreadvert + start[2]; break; } diff --git a/engine/client/r_partset.c b/engine/client/r_partset.c index 81593a20d..83e524545 100644 --- a/engine/client/r_partset.c +++ b/engine/client/r_partset.c @@ -913,7 +913,7 @@ char *particle_set_faithful = " alphachange 0\n" " colorindex 52\n" " citracer 1\n" -" areaspread 30\n" +" offsetspread 30\n" " spawnmode tracer\n" "}\n" "\n" @@ -927,7 +927,7 @@ char *particle_set_faithful = " alphachange 0\n" " colorindex 230\n" " citracer 1\n" -" areaspread 30\n" +" offsetspread 30\n" " spawnmode tracer\n" "}\n" "\n"