rendered paste bodyVOID AnglesToAxis( const vec3_t angles, vec3_t axis[3] ){ vec3_t right; // angle vectors returns "right" instead of "y axis" AngleVectors( angles, axis[0], right, axis[2] ); VectorSubtract( vec3_origin, right, axis[1] );}VOID VectorInverse( vec3_t v ){ v[0] = -v[0]; v[1] = -v[1]; v[2] = -v[2];}vec_t VectorLength( const vec3_t v ){ return (vec_t) sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);}vec_t VectorDistance( const vec3_t p1, const vec3_t p2 ){ vec3_t v; VectorSubtract (p2, p1, v); return VectorLength( v );}FLOAT AngleNormalize360 ( FLOAT angle ) { return (360.0 / 65536) * ((int)(angle * (65536 / 360.0)) & 65535);}FLOAT AngleNormalize180 ( FLOAT angle ) { angle = AngleNormalize360( angle ); if ( angle > 180.0 ) { angle -= 360.0; } return angle;}VOID GetAngleToOrigin( vec3_t Origin, FLOAT &AngleX, FLOAT &AngleY ){ vec3_t entity, angle; VectorSubtract( Origin, cg->refdef.vieworg, entity ); VectorAngles( entity, angle ); if ( angle[YAW] > 180.0f ) angle[YAW] -= 360.0f; else if ( angle[YAW] < -180.0f ) angle[YAW] += 360.0f; if ( angle[PITCH] > 180.0f ) angle[PITCH] -= 360.0f; else if ( angle[PITCH] < -180.0f ) angle[PITCH] += 360.0f; angle[YAW] -= cg->refdefViewAngles[YAW]; angle[PITCH] -= cg->refdefViewAngles[PITCH]; if ( angle[YAW] > 180.0f ) angle[YAW] -= 360.0f; else if ( angle[YAW] < -180.0f ) angle[YAW] += 360.0f; if ( angle[PITCH] > 180.0f ) angle[PITCH] -= 360.0f; else if ( angle[PITCH] < -180.0f ) angle[PITCH] += 360.0f; AngleX = angle[YAW]; AngleY = angle[PITCH];}VOID VectorAngles( const vec3_t value1, vec3_t angles ){ FLOAT forward; FLOAT yaw, pitch; if ( value1[1] == 0 && value1[0] == 0 ) { yaw = 0; if ( value1[2] > 0 ) pitch = 90; else pitch = 270; } else { if ( value1[0] ) yaw = (FLOAT) ( atan2 ( value1[1], value1[0] ) * 180 / M_PI ); else if ( value1[1] > 0 ) yaw = 90; else yaw = 270; if ( yaw < 0 ) yaw += 360; forward = (FLOAT) sqrt ( value1[0]*value1[0] + value1[1]*value1[1] ); pitch = (FLOAT) ( atan2(value1[2], forward) * 180 / M_PI ); if ( pitch < 0 ) pitch += 360; } angles[PITCH] = -pitch; angles[YAW] = yaw; angles[ROLL] = 0;}VOID vectoangles( const vec3_t value1, vec3_t angles ) { FLOAT forward; FLOAT yaw, pitch; if ( value1[1] == 0 && value1[0] == 0 ) { yaw = 0; if ( value1[2] > 0 ) { pitch = 90; } else { pitch = 270; } } else { if ( value1[0] ) { yaw = ( atan2 ( value1[1], value1[0] ) * 180 / M_PI ); } else if ( value1[1] > 0 ) { yaw = 90; } else { yaw = 270; } if ( yaw < 0 ) { yaw += 360; } forward = sqrt ( value1[0]*value1[0] + value1[1]*value1[1] ); pitch = ( atan2(value1[2], forward) * 180 / M_PI ); if ( pitch < 0 ) { pitch += 360; } } angles[PITCH] = -pitch; angles[YAW] = yaw; angles[ROLL] = 0;}VOID AngleVectors( CONST vec3_t angles, vec3_t forward, vec3_t right, vec3_t up ) { FLOAT angle; static FLOAT sr, sp, sy, cr, cp, cy; angle = (FLOAT) angles[YAW] * ( (FLOAT) M_PI*2 / 360); sy= (FLOAT) sin(angle); cy = (FLOAT) cos(angle); angle = (FLOAT) angles[PITCH] * ( (FLOAT) M_PI*2 / 360); sp = (FLOAT) sin(angle); cp = (FLOAT) cos(angle); angle = (FLOAT) angles[ROLL] * (( FLOAT) M_PI*2 / 360); sr = (FLOAT) sin(angle); cr = (FLOAT) cos(angle); if ( forward ) { forward[0] = cp*cy; forward[1] = cp*sy; forward[2] = -sp; } if ( right ) { right[0] = (-1*sr*sp*cy+-1*cr*-sy); right[1] = (-1*sr*sp*sy+-1*cr*cy); right[2] = -1*sr*cp; } if ( up ) { up[0] = (cr*sp*cy+-sr*-sy); up[1] = (cr*sp*sy+-sr*cy); up[2] = cr*cp; }}