int isRadar(vec3_t origin, int *screen) { vec3_t vec,rot; float distance; VectorSubtract(origin, cgame->frame->cg_refdef.vieworg, vec); vec[2] = 0.0f; distance = VectorLength(vec)*0.025; vectoangles(vec,rot); rot[1] = AngleNormalize180(rot[1] - cgame->frame->cg_refdefViewAngles[1]); AngleVectors(rot,vec,0,0); VectorScale(vec,distance,vec); if (vec[0]>100.0f) VectorScale(vec,100.0f/vec[0],vec); else if (vec[0]<-100.0f) VectorScale(vec,-100.0f/vec[0],vec); if(vec[1]>100.0f) VectorScale(vec,100.0f/vec[1],vec); else if(vec[1]<-100.0f) VectorScale(vec,-100.0f/vec[1],vec); screen[0]=((int)-vec[1]+0)-2; screen[1]=((int)-vec[0]+0)-2; return 1; } void drawRadar() { vec4_t radarcolor = { 0.5f, 0.5f, 0.5f, 0.25f }; drawFillRect(0, 0,100, 100, radarcolor); int screen[2]; int player; for (player=0; player < MAX_CLIENTS; player++) { if (!IS_PLAYER_VALID(player) || !isRadar(cgame->frame->players[player].origin, screen)) continue; // added in order not to cross radar area if (screen[0] < 443) screen[0] = 443; if (screen[0] > 637) screen[0] = 637; if (screen[1] > 195) screen[1] = 195; syscall_R_SetColor(colorWhite); drawFillRect( screen[0]-2, screen[1]-2, 5, 5, colorBlue); syscall_R_SetColor(NULL); } }