Skip to content

Commit

Permalink
Update hud_debug
Browse files Browse the repository at this point in the history
  • Loading branch information
Elinsrc committed Sep 4, 2024
1 parent 52ab554 commit e559845
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 53 deletions.
154 changes: 101 additions & 53 deletions cl_dll/hud_debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,84 +372,132 @@ vec3_t CHudDebug::GetEntityVelocityApprox(cl_entity_t *entity, int approxStep)
return vec3_t(0, 0, 0);
}

void CHudDebug::AllClientsInfo(int r, int g, int b)
void CHudDebug::TraceLine(vec3_t &origin, vec3_t &dir, float lineLen, pmtrace_t *traceData)
{
vec3_t lineStart;
vec3_t lineEnd;
cl_entity_t *localPlayer;

lineStart = origin;
lineEnd = lineStart + (dir * lineLen);
localPlayer = gEngfuncs.GetLocalPlayer();

gEngfuncs.pEventAPI->EV_SetUpPlayerPrediction(false, true);
gEngfuncs.pEventAPI->EV_PushPMStates();
gEngfuncs.pEventAPI->EV_SetSolidPlayers(localPlayer->index - 1);
gEngfuncs.pEventAPI->EV_SetTraceHull(2);
gEngfuncs.pEventAPI->EV_PlayerTrace(
lineStart, lineEnd, PM_NORMAL,
-1, traceData
);
gEngfuncs.pEventAPI->EV_PopPMStates();
}

int CHudDebug::TraceEntity(vec3_t origin, vec3_t dir, float distance, vec3_t &intersect)
{
for (int i = 1; i <= gEngfuncs.GetMaxClients(); i++)
pmtrace_t traceData;

TraceLine(origin, dir, distance, &traceData);
intersect = origin + dir * distance * traceData.fraction;
if (traceData.fraction < 1.f)
{
char str[256];
cl_entity_t *localPlayer = gEngfuncs.GetLocalPlayer();
cl_entity_t *pClient = gEngfuncs.GetEntityByIndex(i);
if (traceData.ent > 0)
return gEngfuncs.pEventAPI->EV_IndexFromTrace(&traceData);
}
return 0;
}

void CHudDebug::AllClientsInfo(int r, int g, int b)
{
const float lineLen = 11590.0f;
vec3_t intersectPoint;
char str[256];
cl_entity_t *localPlayer = gEngfuncs.GetLocalPlayer();

if (!CheckForClient(pClient))
continue;
vec3_t viewOrigin = localPlayer->origin;
vec3_t viewAngles, viewDir;

if (pClient == localPlayer || pClient->curstate.messagenum < localPlayer->curstate.messagenum || !gHUD.m_Health.m_iHealth > 0 || gHUD.m_iIntermission)
continue;
gEngfuncs.GetViewAngles(viewAngles);
gEngfuncs.pfnAngleVectors(viewAngles, viewDir, nullptr, nullptr);

Vector Top = Vector(pClient->origin.x, pClient->origin.y, pClient->origin.z + pClient->curstate.mins.z);
Vector Bot = Vector(pClient->origin.x, pClient->origin.y, pClient->origin.z + pClient->curstate.maxs.z);
int entityIndex;

float ScreenTop[2], ScreenBot[2];

bool m_bScreenTop = CalcScreen(Top, ScreenTop);
bool m_bScreenBot = CalcScreen(Bot, ScreenBot);
if( g_iUser1 )
entityIndex = g_iUser2;
else
entityIndex = TraceEntity(viewOrigin, viewDir, lineLen, intersectPoint);

if (m_bScreenTop && m_bScreenBot)
{
float Height = ScreenBot[1] - ScreenTop[1];
int y = Height + ScreenTop[1];
int x = ScreenTop[0] - (Height * 0.4f);
cl_entity_t *pClient = gEngfuncs.GetEntityByIndex(entityIndex);

sprintf(str, "%s", g_PlayerInfoList[i].name);
gHUD.DrawHudTextCentered(ScreenTop[0], y - 18, str, r, g, b);
if(!entityIndex)
return;

sprintf(str, "Index: %d", pClient->index);
gHUD.DrawHudText(x, y, str, r, g, b);
if (!CheckForClient(pClient))
return;

ClientModelName(pClient, x, y + 20, r, g, b);
Vector Top = Vector(pClient->origin.x, pClient->origin.y, pClient->origin.z + pClient->curstate.mins.z);
Vector Bot = Vector(pClient->origin.x, pClient->origin.y, pClient->origin.z + pClient->curstate.maxs.z);

sprintf(str, "Velocity: %.2f u/s", GetEntityVelocityApprox(pClient, 22).Length2D());
gHUD.DrawHudText(x, y + 60, str, r, g, b);
float ScreenTop[2], ScreenBot[2];

sprintf(str, "Origin: (%.2f, %.2f, %.2f)", pClient->origin.x, pClient->origin.y, pClient->origin.z);
gHUD.DrawHudText(x, y + 80, str, r, g, b);
bool m_bScreenTop = CalcScreen(Top, ScreenTop);
bool m_bScreenBot = CalcScreen(Bot, ScreenBot);

sprintf(str, "Angles: (%.2f, %.2f, %.2f)", pClient->angles.x, pClient->angles.y, pClient->angles.z);
gHUD.DrawHudText(x, y + 100, str, r, g, b);
if (m_bScreenTop && m_bScreenBot)
{
float Height = ScreenBot[1] - ScreenTop[1];
int y = Height + ScreenTop[1];
int x = ScreenTop[0] - (Height * 0.4f);

sprintf(str, "Movetype: %s", GetMovetypeName(pClient->curstate.movetype));
gHUD.DrawHudText(x, y + 120, str, r, g, b);
sprintf(str, "%s", g_PlayerInfoList[entityIndex].name);
gHUD.DrawHudTextCentered(ScreenTop[0], y - 18, str, r, g, b);

Vector vDiff = localPlayer->origin - pClient->origin;
sprintf(str, "Distance: %.2f", vDiff.Length());
gHUD.DrawHudText(x, y + 140, str, r, g, b);
sprintf(str, "Index: %d", pClient->index);
gHUD.DrawHudText(x, y, str, r, g, b);

sprintf(str, "Anim. Frame: %.1f", pClient->curstate.frame);
gHUD.DrawHudText(x, y + 180, str, r, g, b);
ClientModelName(pClient, x, y + 20, r, g, b);

sprintf(str, "Anim. Sequence: %d", pClient->curstate.sequence);
gHUD.DrawHudText(x, y + 200, str, r, g, b);
sprintf(str, "Velocity: %.2f u/s", GetEntityVelocityApprox(pClient, 22).Length2D());
gHUD.DrawHudText(x, y + 60, str, r, g, b);

sprintf(str, "Bodygroup Number: %d", pClient->curstate.body);
gHUD.DrawHudText(x, y + 220, str, r, g, b);
sprintf(str, "Origin: (%.2f, %.2f, %.2f)", pClient->origin.x, pClient->origin.y, pClient->origin.z);
gHUD.DrawHudText(x, y + 80, str, r, g, b);

sprintf(str, "Skin Number: %d", pClient->curstate.skin);
gHUD.DrawHudText(x, y + 240, str, r, g, b);
sprintf(str, "Angles: (%.2f, %.2f, %.2f)", pClient->angles.x, pClient->angles.y, pClient->angles.z);
gHUD.DrawHudText(x, y + 100, str, r, g, b);

sprintf(str, "Render Mode: %s", GetRenderModeName(pClient->curstate.rendermode));
gHUD.DrawHudText(x, y + 280, str, r, g, b);
sprintf(str, "Movetype: %s", GetMovetypeName(pClient->curstate.movetype));
gHUD.DrawHudText(x, y + 120, str, r, g, b);

sprintf(str, "Render Fx: %s", GetRenderFxName(pClient->curstate.renderfx));
gHUD.DrawHudText(x, y + 300, str, r, g, b);
Vector vDiff = localPlayer->origin - pClient->origin;
sprintf(str, "Distance: %.2f", vDiff.Length());
gHUD.DrawHudText(x, y + 140, str, r, g, b);

sprintf(str, "Render Amount: %d", pClient->curstate.renderamt);
gHUD.DrawHudText(x, y + 320, str, r, g, b);
sprintf(str, "Anim. Frame: %.1f", pClient->curstate.frame);
gHUD.DrawHudText(x, y + 180, str, r, g, b);

sprintf(str, "Render Color: %d %d %d", pClient->curstate.rendercolor.r, pClient->curstate.rendercolor.g, pClient->curstate.rendercolor.b);
gHUD.DrawHudText(x, y + 340, str, r, g, b);
sprintf(str, "Anim. Sequence: %d", pClient->curstate.sequence);
gHUD.DrawHudText(x, y + 200, str, r, g, b);

BoxCornerOutline(ScreenTop[0] - (Height * 0.25f), ScreenTop[1], Height / 2, Height, 1, 0, 255, 0, 255);
}
sprintf(str, "Bodygroup Number: %d", pClient->curstate.body);
gHUD.DrawHudText(x, y + 220, str, r, g, b);

sprintf(str, "Skin Number: %d", pClient->curstate.skin);
gHUD.DrawHudText(x, y + 240, str, r, g, b);

sprintf(str, "Render Mode: %s", GetRenderModeName(pClient->curstate.rendermode));
gHUD.DrawHudText(x, y + 280, str, r, g, b);

sprintf(str, "Render Fx: %s", GetRenderFxName(pClient->curstate.renderfx));
gHUD.DrawHudText(x, y + 300, str, r, g, b);

sprintf(str, "Render Amount: %d", pClient->curstate.renderamt);
gHUD.DrawHudText(x, y + 320, str, r, g, b);

sprintf(str, "Render Color: %d %d %d", pClient->curstate.rendercolor.r, pClient->curstate.rendercolor.g, pClient->curstate.rendercolor.b);
gHUD.DrawHudText(x, y + 340, str, r, g, b);
BoxCornerOutline(ScreenTop[0] - (Height * 0.25f), ScreenTop[1], Height / 2, Height, 1, 0, 255, 0, 255);
}
}

Expand Down
2 changes: 2 additions & 0 deletions cl_dll/hud_debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ class CHudDebug : public CHudBase
virtual void CurrentClientInfo( int r, int g, int b);
virtual bool CheckForClient(cl_entity_s *pEnt);
virtual vec3_t GetEntityVelocityApprox(cl_entity_t *entity, int approxStep );
virtual void TraceLine(vec3_t &origin, vec3_t &dir, float lineLen, pmtrace_t *traceData);
virtual int TraceEntity(vec3_t origin, vec3_t dir, float distance, vec3_t &intersect);
virtual void AllClientsInfo(int r, int g, int b);
virtual int Draw(float flTime);
};

0 comments on commit e559845

Please sign in to comment.