rpgxef/code/cgame/cg_motionblur.c

85 lines
1.9 KiB
C

#include "cg_local.h"
#define MAX_MOTIONBLURDOTS 20
typedef struct motionblurDot_s {
qboolean active;
refEntity_t refEnt;
int32_t startTime;
int32_t lifeTime;
} motionblurDot_t;
//static motionblurDot_t cg_motionblurDots[MAX_MOTIONBLURDOTS];
void CG_MotionBlur(void) {
//motionblurDot_t *dot;
//vec3_t pos, axis[3];
//int32_t i;
/*if ( !cg.snap->ps.powerups[PW_BOOST] && cg.snap->ps.timers[tmZanzoken] < 1 && !cg.snap->ps.timers[tmTransform]) {
cg.refdef.rdflags &= ~RDF_MOTIONBLUR;
//for ( i = 0; i < MAX_MOTIONBLURDOTS; i++ ) {
// cg_motionblurDots[i].active = qfalse;
//}
return;
}*/
cg.refdef.rdflags |= RDF_MOTIONBLUR;
/*
// Destroy dots over lifetime
for ( i = 0; i < MAX_MOTIONBLURDOTS; i++ ) {
dot = &cg_motionblurDots[i];
if ( dot->lifeTime + dot->startTime < cg.time ) {
dot->active = qfalse;
}
}
// Create new dots
for ( i = 0; i < MAX_MOTIONBLURDOTS; i++ ) {
dot = &cg_motionblurDots[i];
if ( dot->active )
continue;
VectorCopy( cg.predictedPlayerEntity.lerpOrigin, pos );
VectorNormalize2( cg.predictedPlayerState.velocity, axis[0] );
VectorMA( pos, 300, axis[0], pos );
RotateAroundDirection( axis, crandom() * 360 );
VectorMA( pos, 120, axis[2], pos );
memset( &(dot->refEnt), 0, sizeof(refEntity_t));
dot->refEnt.reType = RT_SPRITE;
dot->refEnt.radius = 2;
dot->refEnt.customShader = cgs.media.whiteShader;
dot->refEnt.shaderRGBA[0] = 255;
dot->refEnt.shaderRGBA[1] = 255;
dot->refEnt.shaderRGBA[2] = 255;
dot->refEnt.shaderRGBA[3] = 128;
VectorCopy( pos, dot->refEnt.origin );
dot->lifeTime = 250 + crandom() * 100;
dot->startTime = cg.time + crandom() * 150;
dot->active = qtrue;
}
// Render dots
for ( i = 0; i < MAX_MOTIONBLURDOTS; i++ ) {
dot = &cg_motionblurDots[i];
if ( dot->startTime > cg.time )
continue;
trap_R_AddRefEntityToScene( &(dot->refEnt));
}
*/
}