Initial commit
This commit is contained in:
202
Torque/SDK/engine/game/debugView.cc
Normal file
202
Torque/SDK/engine/game/debugView.cc
Normal file
@@ -0,0 +1,202 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "console/console.h"
|
||||
#include "dgl/dgl.h"
|
||||
#include "gui/core/guiTSControl.h"
|
||||
#include "game/gameConnection.h"
|
||||
#include "game/player.h"
|
||||
#include "game/debugView.h"
|
||||
|
||||
IMPLEMENT_CONOBJECT(DebugView);
|
||||
|
||||
DebugView::DebugView()
|
||||
{
|
||||
for (int i = 0; i < MaxTextLines; i++)
|
||||
mTextLines[i][0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
ConsoleMethod( DebugView, addLine, void, 5, 5, "( Point3F start, Point3F end, Color3F color)"
|
||||
"Cause a line to be drawn persistently by the DebugView.")
|
||||
{
|
||||
Point3F start(0, 0, 0);
|
||||
Point3F end(0, 0, 0);
|
||||
ColorF color(0, 0, 0, 1.0f);
|
||||
int numArgsRead;
|
||||
|
||||
//read the args in
|
||||
numArgsRead = dSscanf(argv[2], "%g %g %g", &start.x, &start.y, &start.z);
|
||||
if (numArgsRead != 3)
|
||||
{
|
||||
Con::printf("%s() - invalid start point.", argv[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
numArgsRead = dSscanf(argv[3], "%g %g %g", &end.x, &end.y, &end.z);
|
||||
if (numArgsRead != 3)
|
||||
{
|
||||
Con::printf("%s() - invalid end point.", argv[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
numArgsRead = dSscanf(argv[4], "%g %g %g", &color.red, &color.green, &color.blue);
|
||||
if (numArgsRead != 3)
|
||||
{
|
||||
Con::printf("%s() - invalid color.", argv[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
object->addLine(start, end, color);
|
||||
}
|
||||
|
||||
ConsoleMethod( DebugView, clearLines, void, 2, 2, "()"
|
||||
"Clear all lines added by addLine.")
|
||||
{
|
||||
object->clearLines();
|
||||
}
|
||||
|
||||
ConsoleMethod( DebugView, setText, void, 4, 5, "(int line, string text, Color3F color=NULL)"
|
||||
"Set one of the lines in the DebugView to contain the specified text at the specified color.")
|
||||
{
|
||||
ColorF color(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
bool setColor = false;
|
||||
if (argc >= 5)
|
||||
{
|
||||
int numArgsRead = dSscanf(argv[4], "%g %g %g", &color.red, &color.green, &color.blue);
|
||||
if (numArgsRead == 3)
|
||||
setColor = true;
|
||||
}
|
||||
object->setTextLine(dAtoi(argv[2]), argv[3], setColor ? &color : NULL);
|
||||
}
|
||||
|
||||
ConsoleMethod( DebugView, clearText, void, 2, 3, "(int line=-1)"
|
||||
"Clears all lines, or if a line is specified, that specific line.")
|
||||
{
|
||||
int lineNum = -1;
|
||||
if (argc == 3)
|
||||
lineNum = dAtoi(argv[2]);
|
||||
object->clearTextLine(lineNum);
|
||||
}
|
||||
|
||||
void DebugView::addLine(const Point3F &start, const Point3F &end, const ColorF &color)
|
||||
{
|
||||
DebugLine newLine(start, end, color);
|
||||
mLines.push_back(newLine);
|
||||
}
|
||||
|
||||
void DebugView::clearLines()
|
||||
{
|
||||
mLines.clear();
|
||||
}
|
||||
|
||||
void DebugView::setTextLine(int line, const char *text, ColorF *color)
|
||||
{
|
||||
if (line < 0 || line >= MaxTextLines || !text)
|
||||
return;
|
||||
dStrncpy(&mTextLines[line][0], text, MaxTextLineLength);
|
||||
mTextLines[line][MaxTextLineLength] = '\0';
|
||||
|
||||
if (!color)
|
||||
mTextColors[line] = mProfile->mFontColor;
|
||||
else
|
||||
mTextColors[line] = *color;
|
||||
}
|
||||
|
||||
void DebugView::clearTextLine(int line)
|
||||
{
|
||||
if (line < 0)
|
||||
{
|
||||
for (int i = 0; i < MaxTextLines; i++)
|
||||
mTextLines[i][0] = '\0';
|
||||
}
|
||||
else if (line < MaxTextLines)
|
||||
mTextLines[line][0] = '\0';
|
||||
}
|
||||
|
||||
void DebugView::onRender(Point2I offset, const RectI &updateRect)
|
||||
{
|
||||
S32 i;
|
||||
#if defined(TORQUE_DEBUG) || defined(INTERNAL_RELEASE)
|
||||
GuiTSCtrl *tsCtrl;
|
||||
if (! Sim::findObject("PlayGui", tsCtrl))
|
||||
{
|
||||
Con::printf("DebugView failed - unable to find TS ctrl.");
|
||||
return;
|
||||
}
|
||||
|
||||
//draw the lines first
|
||||
for (i = 0; i < mLines.size(); i++)
|
||||
{
|
||||
//project the line to the screen
|
||||
Point3F startPos, endPos;
|
||||
if (tsCtrl->project(mLines[i].start, &startPos) && tsCtrl->project(mLines[i].end, &endPos))
|
||||
{
|
||||
glBegin(GL_LINES);
|
||||
glColor4f(mLines[i].color.red, mLines[i].color.green, mLines[i].color.blue, 1.0f);
|
||||
glVertex2i((S32)startPos.x, (S32)startPos.y);
|
||||
glVertex2i((S32)endPos.x, (S32)endPos.y);
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
//draw the task above each player's head
|
||||
SimGroup *g = Sim::getClientGroup();
|
||||
SimGroup::iterator j;
|
||||
for (j = g->begin(); j != g->end(); j++)
|
||||
{
|
||||
GameConnection *client = static_cast<GameConnection*>(*j);
|
||||
Player *player = NULL;
|
||||
if (! client->getControlObject())
|
||||
continue;
|
||||
|
||||
player = dynamic_cast<Player*>(client->getControlObject());
|
||||
if (! player)
|
||||
continue;
|
||||
|
||||
//draw a test string above everyone's head
|
||||
Point3F playerPos;
|
||||
MatrixF const& tempTransform = player->getTransform();
|
||||
tempTransform.getColumn(3, &playerPos);
|
||||
playerPos.z += 1.7f;
|
||||
Point3F textPos;
|
||||
if (tsCtrl->project(playerPos, &textPos))
|
||||
{
|
||||
//const char *textStr = client->getDataField("objective", NULL);
|
||||
const char *textStr = Con::executef(2, "aiGetTaskDesc", avar("%d", client->getId()));
|
||||
if (!textStr || !textStr[0])
|
||||
textStr = "Shoot Me!";
|
||||
if ((textStr[0] == 'E' || textStr[0] == 'F') && textStr[1] == ':')
|
||||
{
|
||||
if (textStr[0] == 'E')
|
||||
dglSetBitmapModulation(ColorF(1.0, 0.0, 0.0, 1.0));
|
||||
else
|
||||
dglSetBitmapModulation(ColorF(0.0, 1.0, 0.0, 1.0));
|
||||
dglDrawText(mFont, Point2I(textPos.x, textPos.y), &textStr[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
dglSetBitmapModulation(mProfile->mFontColor);
|
||||
dglDrawText(mFont, Point2I(textPos.x, textPos.y), textStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//draw the text - for final release, this is the only thing to be rendered
|
||||
Point2I textOffset = offset;
|
||||
for (i = 0; i < MaxTextLines; i++)
|
||||
{
|
||||
dglSetBitmapModulation(mTextColors[i]);
|
||||
if (mTextLines[i][0] != '\0')
|
||||
dglDrawText(mFont, textOffset, mTextLines[i]);
|
||||
textOffset.y += mFont->getHeight();
|
||||
}
|
||||
|
||||
renderChildControls(offset, updateRect);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user