Prodigy Engine also incorporates a development console useful for running commands for actions such as opening/closing the profiler, changing memory tracking modes, performing screenshot jobs, etc.
Below is a video of the console in use:
The development console is fairly simple and uses an event system to perform command executions.
Below is the implementation of the dev console available in Prodigy Engine:
//------------------------------------------------------------------------------------------------------------------------------
struct ConsoleEntry
{
const std::string m_printString;
Rgba m_printColor;
unsigned int m_frameNum;
float m_calledTime;
explicit ConsoleEntry(const Rgba&, const std::string&, unsigned int, float);
};
//------------------------------------------------------------------------------------------------------------------------------
class DevConsole
{
public:
DevConsole();
~DevConsole();
void Startup();
void BeginFrame();
void UpdateConsole(float deltaTime);
void EndFrame();
void Shutdown();
void SetBitmapFont(BitmapFont& bitmapFont);
void GetVertsForDevConsoleMemTracker(std::vector<Vertex_PCU>& textVerts, AABB2& memTrackingBox, float lineHeight) const;
void PrintString( const Rgba& textColor, const std::string& devConsolePrintString );
void Render( RenderContext& renderer, Camera& camera, float lineHeight ) const;
void RenderMemTrackingInfo(RenderContext& renderer, Camera& camera, float lineHeight) const;
void ToggleOpenFull();
bool IsOpen() const;
bool ExecuteCommandLine(const std::string& commandLine);
void ShowLastCommand();
void ShowNextCommand();
void ResetIndexValues();
inline int GetFrameCount() {return m_frameCount;}
// handle arrows, enter, escape, backspace, delete, etc...
void HandleKeyUp( unsigned char vkKeyCode ); // WM_KEYUP
void HandleKeyDown( unsigned char vkKeyCode ); // WM_KEYDOWN
void HandleCharacter( unsigned char charCode ); // WM_CHAR
public:
//Public Event Systems test
static bool Command_Test(EventArgs& args);
static bool Command_Help(EventArgs& args);
static bool Command_Clear(EventArgs& args);
static bool Command_MemTracking(EventArgs& args);
static bool Command_MemLog(EventArgs& args);
static bool Command_EnableAllLogFilters(EventArgs& args);
static bool Command_DisableAllLogfilters(EventArgs& args);
static bool Command_EnableLogFilter(EventArgs& args);
static bool Command_DisableLogFilter(EventArgs& args);
static bool Command_FlushLogSystem(EventArgs& args);
static bool Command_Logf(EventArgs& args);
static bool Command_ScreenShot(EventArgs& args);
public:
const static Rgba CONSOLE_INFO;
const static Rgba CONSOLE_ERROR;
const static Rgba CONSOLE_ERROR_DESC;
const static Rgba CONSOLE_ECHO_COLOR;
const static Rgba CONSOLE_BG_COLOR;
const static Rgba CONSOLE_INPUT;
std::shared_mutex m_mutexLock;
private:
BitmapFont* m_consoleFont = nullptr;
bool m_isOpen = false;
int m_currentFrameNumber = 0;
std::vector<ConsoleEntry> m_printLog;
std::vector<std::string> m_commandLog;
unsigned int m_frameCount = 0;
float m_timeAtStart;
std::string m_currentInput;
unsigned int m_carotPosition = 0;
float m_carotTimeDiff = 0.f;
bool m_carotActive = true;
unsigned int m_lastCommandIndex = 0;
bool m_memTrackingEnabled = true;
Vec2 m_memTrackingBoxSize = Vec2(80.f,10.f);
std::string m_defaultShaderPath = "default_unlit.xml";
};
void LogHookForDevConsole(const LogObject_T* logObj);
Some of the features the development console supports are as follows:
- Log messages to the console
- Run events by passing parameters to console
- Display a text carrot
- Keep a cache of commands used in order of usage
- Using keys to toggle between previously executed commands
