Код
void CESP::Draw3DBox(cl_entity_t *pEnt,color_s *pColor)
{
if(!pEnt || !pColor)
return;
vec3_t vF,vR,vU;
g_Math.AngleVectors(Vector(0.0f,pEnt->angles[1],0.0f),vF,vR,vU);
//If you want only the hitbox of the player. simply make it only maxs & mins instead of adding numbers:P
float flForward=pEnt->curstate.maxs.y+15.0f;
float flBack=pEnt->curstate.mins.y-5.0f;
float flRight=pEnt->curstate.maxs.x+5.0f;
float flLeft=pEnt->curstate.mins.x-5.0f;
vec3_t vUFLeft=pEnt->origin + vU*pEnt->curstate.maxs.z + vF*flForward + vR*flLeft; // vUFLeft = Top left front
vec3_t vUFRight=pEnt->origin + vU*pEnt->curstate.maxs.z + vF*flForward + vR*flRight; // vUFRight = Top right front
vec3_t vUBLeft=pEnt->origin + vU*pEnt->curstate.maxs.z + vF*flBack + vR*flLeft; // vUBLeft = Top left back
vec3_t vUBRight=pEnt->origin + vU*pEnt->curstate.maxs.z + vF*flBack + vR*flRight; // vUBRight = Top right back
vec3_t vBFLeft=pEnt->origin + vU*pEnt->curstate.mins.z + vF*flForward + vR*flLeft; // vBFLeft = Bottom left front
vec3_t vBFRight=pEnt->origin + vU*pEnt->curstate.mins.z + vF*flForward + vR*flRight; // vBFRight = Bottom right front
vec3_t vBBLeft=pEnt->origin + vU*pEnt->curstate.mins.z + vF*flBack + vR*flLeft; // vBBLeft = Bottom left back
vec3_t vBBRight=pEnt->origin + vU*pEnt->curstate.mins.z + vF*flBack + vR*flRight; // vBBRight = Bottom right back
//Top Box
DrawVectorLine(vUBLeft,vUBRight,1,pColor); // Back left -> Back right
DrawVectorLine(vUBRight,vUFRight,1,pColor); // Back right -> Front right
DrawVectorLine(vUFRight,vUFLeft,1,pColor); // Front right -> Front left
DrawVectorLine(vUFLeft,vUBLeft,1,pColor); // Front left -> Back right
//Mid Box
DrawVectorLine(vUBLeft,vBBLeft,1,pColor); // Top left -> Bottom left
DrawVectorLine(vUBRight,vBBRight,1,pColor); // Top right -> Bottom right
DrawVectorLine(vUFRight,vBFRight,1,pColor); // Top right -> Bottom right
DrawVectorLine(vUFLeft,vBFLeft,1,pColor); // Top left -> Bottom left
//Bottom Box
DrawVectorLine(vBBLeft,vBBRight,1,pColor); // Back left -> Back right
DrawVectorLine(vBBRight,vBFRight,1,pColor); // Back right -> Front right
DrawVectorLine(vBFRight,vBFLeft,1,pColor); // Front right -> Front left
DrawVectorLine(vBFLeft,vBBLeft,1,pColor); // Front left -> Back right
}
void CESP::DrawVectorLine(float *flSrc,float *flDestination,int lw,color_s *pColor)
{
vec3_t vScreenSrc,vScreenDest;
if(!g_Math.WorldToScreen(flSrc,vScreenSrc) || !g_Math.WorldToScreen(flDestination,vScreenDest))
return;
g_Draw.DrawLine((int)vScreenSrc[0],(int)vScreenSrc[1],(int)vScreenDest[0],(int)vScreenDest[1],lw,pColor);
}
void CDraw::DrawLine(int x1,int y1,int x2,int y2,int lw,color_s *pColor)
{
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glColor4ub(pColor->r,pColor->g,pColor->b,pColor->a);
glLineWidth((float)lw);
glBegin(GL_LINES);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd();
glColor3f(1.0f,1.0f,1.0f);
glEnable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
}