static void CG_PlayerFlag( centity_t *cent, qhandle_t hModel ) {
refEntity_t ent;
vec3_t angles;
vec3_t axis[3];
vec3_t boltOrg, tAng, getAng, right;
mdxaBone_t boltMatrix;
clientInfo_t *ci;
if (cent->currentState.number == cg.snap->ps.clientNum &&
!cg.renderingThirdPerson)
{
return;
}
if (!cent->ghoul2)
{
return;
}
if (cent->currentState.eType == ET_NPC)
{
ci = cent->npcClient;
assert(ci);
}
else
{
ci = &cgs.clientinfo[cent->currentState.number];
}
VectorSet( tAng, cent->turAngles[PITCH], cent->turAngles[YAW], cent->turAngles[ROLL] );
trap_G2API_GetBoltMatrix(cent->ghoul2, 0, ci->bolt_llumbar, &boltMatrix, tAng, cent->lerpOrigin, cg.time, cgs.gameModels, cent->modelScale);
BG_GiveMeVectorFromMatrix(&boltMatrix, ORIGIN, boltOrg);
BG_GiveMeVectorFromMatrix(&boltMatrix, POSITIVE_X, tAng);
vectoangles(tAng, tAng);
VectorCopy(cent->lerpAngles, angles);
boltOrg[2] -= 12;
VectorSet(getAng, 0, cent->lerpAngles[1], 0);
AngleVectors(getAng, 0, right, 0);
boltOrg[0] += right[0]*8;
boltOrg[1] += right[1]*8;
boltOrg[2] += right[2]*8;
angles[PITCH] = -cent->lerpAngles[PITCH]/2-30;
angles[YAW] = tAng[YAW]+270;
AnglesToAxis(angles, axis);
memset( &ent, 0, sizeof( ent ) );
VectorMA( boltOrg, 24, axis[0], ent.origin );
angles[ROLL] += 20;
AnglesToAxis( angles, ent.axis );
ent.hModel = hModel;
if ( 1 /*cg_q4flags.integer*/ )
{
// vec3_t angs;
int team = 0;
ent.modelScale[0] = 0.5;
ent.modelScale[1] = -0.5;//0.5;//edited by ent; raz0r's simple flag
ent.modelScale[2] = 0.5;
ScaleModelAxis(&ent);
/*
if (cent->currentState.number == cg.snap->ps.clientNum)
{ //If we're the current client (in third person), render the flag on our back transparently
ent.renderfx |= RF_FORCE_ENT_ALPHA;
ent.shaderRGBA[3] = 100;
}
*/
//FIXME: Not doing this at the moment because sorting totally messes up
ent.reType = RT_ORIENTED_QUAD;
team = cgs.clientinfo[cent->currentState.number].team;
if (cgs.gametype == GT_CTF)
{
if (team == TEAM_RED)
{
ent.customShader = trap_R_RegisterShaderNoMip( "models/flags/blueflag" );
}
else
{
ent.customShader = trap_R_RegisterShaderNoMip( "models/flags/redflag" );
}
}
ent.shaderRGBA[0] = ent.shaderRGBA[1] = ent.shaderRGBA[2] = 255;
ent.shaderRGBA[3] = 200;
ent.radius = 32;
/* works wrong :s
VectorCopy( cent->currentState.angles, angs );
angs[2] = 0.0f;
AnglesToAxis( angs, ent.axis );
*/
ent.origin[2] += 17;
ent.renderfx |= RF_FORCE_ENT_ALPHA;
trap_R_AddRefEntityToScene( &ent/*, cent->currentState.number*/ );
ent.modelScale[0] = 1.0;
ent.modelScale[1] = -1.0;
ent.modelScale[2] = 1.0;
ScaleModelAxis( &ent );
// trap_R_AddRefEntityToScene( &ent );
trap_R_AddRefEntityToScene( &ent/*, cent->currentState.number*/ );
return;
}
ent.modelScale[0] = 0.5;
ent.modelScale[1] = 0.5;
ent.modelScale[2] = 0.5;
ScaleModelAxis(&ent);
/*
if (cent->currentState.number == cg.snap->ps.clientNum)
{ //If we're the current client (in third person), render the flag on our back transparently
ent.renderfx |= RF_FORCE_ENT_ALPHA;
ent.shaderRGBA[3] = 100;
}
*/
//FIXME: Not doing this at the moment because sorting totally messes up
trap_R_AddRefEntityToScene( &ent );
}