REDRIVER2/src_rebuild/DebugOverlay.cpp
2020-06-24 20:35:03 +06:00

155 lines
3.2 KiB
C++

#include "THISDUST.H"
#include "LIBGTE.H"
#include "LIBGPU.H"
#include "INLINE_C.H"
#include "GTEREG.H"
#include "GAME/ASM/ASMTEST.H"
#include "GAME/C/CONVERT.H"
#include "GAME/C/CAMERA.H"
#include "GAME/C/DRAW.H"
#include "GAME/C/SYSTEM.H"
#include "GAME/C/PRES.H"
#include "GAME/C/SPOOL.H"
int gDisplayDrawStats = 0;
struct LineDef_t
{
VECTOR posA, posB;
CVECTOR color;
};
LineDef_t gDebug_Lines[512];
int gDebug_numLines = 0;
void DrawDebugOverlays()
{
VECTOR _zerov = { 0 };
while(gDebug_numLines > 0)
{
LineDef_t& ld = gDebug_Lines[gDebug_numLines-1];
gte_SetTransVector(&_zerov);
gte_SetRotMatrix(&inv_camera_matrix);
SVECTOR a, b;
a.vx = ld.posA.vx - camera_position.vx;
a.vy = ld.posA.vy - camera_position.vy;
a.vz = ld.posA.vz - camera_position.vz;
b.vx = ld.posB.vx - camera_position.vx;
b.vy = ld.posB.vy - camera_position.vy;
b.vz = ld.posB.vz - camera_position.vz;
gte_ldv3(&a, &b, &b);
gte_rtpt();
gte_avsz4();
int z;
gte_stopz(&z);
if (z > 0)
{
LINE_F2* line = (LINE_F2*)current->primptr;
setLineF2(line);
setSemiTrans(line, 1);
gte_stsxy0(&line->x0)
gte_stsxy1(&line->x1);
line->r0 = ld.color.r;
line->g0 = ld.color.g;
line->b0 = ld.color.b;
addPrim(current->ot + 2, line);
current->primptr += sizeof(LINE_F2);
}
gDebug_numLines--;
}
gDebug_numLines = 0;
DR_TPAGE* tp = (DR_TPAGE*)current->primptr;
setDrawTPage(tp, 0, 0, 0);
addPrim(current->ot + 2, tp);
current->primptr += sizeof(DR_TPAGE);
char tempBuf[128];
int primTabLeft = current->primptr - current->primtab;
if (gDisplayDrawStats)
{
sprintf(tempBuf, "Primtab: %d of %d", primTabLeft, 0x1a180);
PrintString(tempBuf, 10, 80);
extern volatile int spoolactive;
sprintf(tempBuf, "Spooling: %d spec: %d, active: %d", doSpooling, allowSpecSpooling, spoolactive);
PrintString(tempBuf, 10, 90);
extern int numActiveCops;
extern int numCopCars;
extern int numCivCars;
extern int numParkedCars;
extern int maxCopCars;
extern int maxCivCars;
sprintf(tempBuf, "Civs: %d - %d parked - max %d", numCivCars, numParkedCars, maxCivCars);
PrintString(tempBuf, 10, 100);
sprintf(tempBuf, "Cops: %d - %d active - max %d", numCopCars, numActiveCops, maxCopCars);
PrintString(tempBuf, 10, 110);
}
}
void Debug_AddLine(VECTOR& pointA, VECTOR& pointB, CVECTOR& color)
{
if (gDebug_numLines + 1 > 512)
return;
int dx = camera_position.vx - pointA.vx;
int dz = camera_position.vz - pointA.vz;
if (dx * dx + dz * dz > (15000*15000))
return;
LineDef_t& ld = gDebug_Lines[gDebug_numLines++];
ld.posA = pointA;
ld.posB = pointB;
ld.color = color;
ld.posA.vy *= -1;
ld.posB.vy *= -1;
}
void Debug_AddLineOfs(VECTOR& pointA, VECTOR& pointB, VECTOR& ofs, CVECTOR& color)
{
if (gDebug_numLines + 1 > 512)
return;
int dx = camera_position.vx - ofs.vx;
int dz = camera_position.vz - ofs.vz;
if (dx * dx + dz * dz > (15000 * 15000))
return;
LineDef_t& ld = gDebug_Lines[gDebug_numLines++];
ld.posA = pointA;
ld.posB = pointB;
ld.color = color;
ld.posA.vx += ofs.vx;
ld.posA.vy += ofs.vy;
ld.posA.vz += ofs.vz;
ld.posB.vx += ofs.vx;
ld.posB.vy += ofs.vy;
ld.posB.vz += ofs.vz;
ld.posA.vy *= -1;
ld.posB.vy *= -1;
}