#include #include #include #include #include #include #include #include "utils/logger.h" static FILE* s_logFileHandle = NULL; static DWORD s_logOpenTime = 0; void logWriteMsg(const char* msg) { DWORD dwCurrentTime = GetTickCount() - s_logOpenTime; static char buffer[1024]; int len = sprintf(buffer, "%02lu:%02lu.%02lu: %s", dwCurrentTime / 60000, dwCurrentTime / 1000 % 60, dwCurrentTime % 1000 / 10, msg); if (s_logFileHandle) { fwrite(buffer, sizeof(char), len, s_logFileHandle); fflush(s_logFileHandle); } } static bool s_Initialized = false; void Logger::Init() { s_logFileHandle = fopen("output.txt", "w"); assert(s_logFileHandle); s_logOpenTime = GetTickCount(); s_Initialized = true; } void Logger::Shutdown() { if (s_logFileHandle) { fclose(s_logFileHandle); s_logFileHandle = NULL; } } void Logger::LogPrint(const char* msg, ...) { static char buffer[2048 * 2]; if (s_Initialized == false) Logger::Init(); va_list args; va_start(args, msg); vsprintf(buffer, msg, args); va_end(args); strcat(buffer, "\n"); OutputDebugStringA(buffer); // write to console fwrite(buffer, sizeof(char), strlen(buffer), stdout); logWriteMsg(buffer); } void Logger::Error(const char* msg, ...) { static char buffer[2048 * 2]; va_list args; va_start(args, msg); vsprintf(buffer, msg, args); va_end(args); strcat(buffer, "\n"); OutputDebugStringA(buffer); // write to console fwrite(buffer, sizeof(char), strlen(buffer), stdout); logWriteMsg(buffer); MessageBoxA(NULL, buffer, "Engine Error", MB_OK | MB_ICONERROR); // if (IsDebuggerPresent()) // DebugBreak(); //else exit(-1); }