BVB Source Codes

CRYENGINE Show AILog.cpp Source code

Return Download CRYENGINE: download AILog.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    -------------------------------------------------------------------------
  5.    File name:   AILog.cpp
  6.    $Id$
  7.    Description:
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - ?
  12.    - 2 Mar 2009 : Evgeny Adamenkov: Replaced IRenderer with CDebugDrawContext
  13.  
  14.  *********************************************************************/
  15. #include "StdAfx.h"
  16.  
  17. #ifdef CRYAISYSTEM_VERBOSITY
  18.  
  19.         #include "AILog.h"
  20.         #include "CAISystem.h"
  21.         #include "CryAISystem.h"
  22.  
  23.         #include <CrySystem/ISystem.h>
  24.         #include <CrySystem/ITimer.h>
  25.         #include <CrySystem/IValidator.h>
  26.         #include <CrySystem/IConsole.h>
  27.         #include "DebugDrawContext.h"
  28.         #include <CrySystem/ITestSystem.h>
  29.  
  30. // these should all be in sync - so testing one for 0 should be the same for all
  31. ISystem* pSystem = 0;
  32.  
  33. static const char outputPrefix[] = "AI: ";
  34. static const unsigned outputPrefixLen = sizeof(outputPrefix) - 1;
  35.  
  36.         #define DECL_OUTPUT_BUF char outputBufferLog[MAX_WARNING_LENGTH + outputPrefixLen];
  37.  
  38. static const int maxSavedMsgs = 5;
  39. static const int maxSavedMsgLength = MAX_WARNING_LENGTH + outputPrefixLen + 1;
  40. enum ESavedMsgType {SMT_WARNING, SMT_ERROR};
  41. struct SSavedMsg
  42. {
  43.         ESavedMsgType savedMsgType;
  44.         char          savedMsg[maxSavedMsgLength];
  45.         CTimeValue    time;
  46. };
  47. static SSavedMsg savedMsgs[maxSavedMsgs];
  48. static int savedMsgIndex = 0;
  49.  
  50. //====================================================================
  51. // DebugDrawLabel
  52. //====================================================================
  53. static void DebugDrawLabel(ESavedMsgType type, float timeFrac, int col, int row, const char* szText)
  54. {
  55.         float ColumnSize = 11;
  56.         float RowSize = 11;
  57.         float baseY = 10;
  58.         ColorB colorWarning(0, 255, 255);
  59.         ColorB colorError(255, 255, 0);
  60.         ColorB& color = (type == SMT_ERROR) ? colorError : colorWarning;
  61.         CDebugDrawContext dc;
  62.  
  63.         float alpha = 1.0f;
  64.         static float fadeFrac = 0.5f;
  65.         if (timeFrac < fadeFrac && fadeFrac > 0.0f)
  66.                 alpha = timeFrac / fadeFrac;
  67.         color.a = static_cast<uint8>(255 * alpha);
  68.  
  69.         float actualCol = ColumnSize * static_cast<float>(col);
  70.         float actualRow;
  71.         if (row >= 0)
  72.                 actualRow = baseY + RowSize * static_cast<float>(row);
  73.         else
  74.                 actualRow = dc->GetHeight() - (baseY + RowSize * static_cast<float>(-row));
  75.  
  76.         dc->Draw2dLabel(actualCol, actualRow, 1.2f, color, false, "%s", szText);
  77. }
  78.  
  79. //====================================================================
  80. // DisplaySavedMsgs
  81. //====================================================================
  82. void AILogDisplaySavedMsgs()
  83. {
  84.         float savedMsgDuration = gAIEnv.CVars.OverlayMessageDuration;
  85.         if (savedMsgDuration < 0.01f)
  86.                 return;
  87.         static int col = 1;
  88.  
  89.         int row = -1;
  90.         CTimeValue currentTime = gEnv->pTimer->GetFrameStartTime();
  91.         CTimeValue time = currentTime - CTimeValue(savedMsgDuration);
  92.         for (int i = 0; i < maxSavedMsgs; ++i)
  93.         {
  94.                 int index = (maxSavedMsgs + savedMsgIndex - i) % maxSavedMsgs;
  95.                 if (savedMsgs[index].time < time)
  96.                         return;
  97.                 // get rid of msgs from the future - can happen during load/save
  98.                 if (savedMsgs[index].time > currentTime)
  99.                         savedMsgs[index].time = time;
  100.                 //      savedMsgIndex = (maxSavedMsgs + savedMsgIndex - 1) % maxSavedMsgs;
  101.  
  102.                 float timeFrac = (savedMsgs[index].time - time).GetSeconds() / savedMsgDuration;
  103.                 DebugDrawLabel(savedMsgs[index].savedMsgType, timeFrac, col, row, savedMsgs[index].savedMsg);
  104.                 --row;
  105.         }
  106. }
  107.  
  108. //====================================================================
  109. // AIInitLog
  110. //====================================================================
  111. void AIInitLog(ISystem* system)
  112. {
  113.         if (pSystem)
  114.                 AIWarning("Re-registering AI Logging");
  115.  
  116.         AIAssert(system);
  117.         if (!system)
  118.                 return;
  119.         IConsole* console = gEnv->pConsole;
  120.         #ifdef _DEBUG
  121.         int isDebug = 1;
  122.         #else
  123.         int isDebug = 0;
  124.         #endif
  125.  
  126.         if (console)
  127.                 pSystem = system;
  128.  
  129.         for (int i = 0; i < maxSavedMsgs; ++i)
  130.         {
  131.                 savedMsgs[i].savedMsg[0] = '\0';
  132.                 savedMsgs[i].savedMsgType = SMT_WARNING;
  133.                 savedMsgs[i].time = CTimeValue(0.0f);
  134.                 savedMsgIndex = 0;
  135.         }
  136. }
  137.  
  138. //====================================================================
  139. // AIGetLogConsoleVerbosity
  140. //====================================================================
  141. int AIGetLogConsoleVerbosity()
  142. {
  143.         return gAIEnv.CVars.LogConsoleVerbosity;
  144. }
  145.  
  146. //====================================================================
  147. // AIGetLogFileVerbosity
  148. //====================================================================
  149. int AIGetLogFileVerbosity()
  150. {
  151.         return gAIEnv.CVars.LogFileVerbosity;
  152. }
  153.  
  154. //====================================================================
  155. // AICheckLogVerbosity
  156. //====================================================================
  157. bool AICheckLogVerbosity(const AI_LOG_VERBOSITY CheckVerbosity)
  158. {
  159.         bool bResult = false;
  160.  
  161.         const int iAILogVerbosity = AIGetLogFileVerbosity();
  162.         const int iAIConsoleVerbosity = AIGetLogConsoleVerbosity();
  163.  
  164.         if (iAILogVerbosity >= CheckVerbosity || iAIConsoleVerbosity >= CheckVerbosity)
  165.         {
  166.                 // Check against actual log system
  167.                 const int nVerbosity = gEnv->pLog->GetVerbosityLevel();
  168.                 bResult = (nVerbosity >= CheckVerbosity);
  169.         }
  170.  
  171.         return bResult;
  172. }
  173.  
  174. //===================================================================
  175. // AIGetWarningErrorsEnabled
  176. //===================================================================
  177. bool AIGetWarningErrorsEnabled()
  178. {
  179.         return gAIEnv.CVars.EnableWarningsErrors != 0;
  180. }
  181.  
  182. //====================================================================
  183. // AIError
  184. //====================================================================
  185. void AIError(const char* format, ...)
  186. {
  187.         if (!pSystem || !AIGetWarningErrorsEnabled() || !AICheckLogVerbosity(AI_LOG_ERROR))
  188.                 return;
  189.  
  190.         DECL_OUTPUT_BUF;
  191.  
  192.         va_list args;
  193.         va_start(args, format);
  194.         cry_vsprintf(outputBufferLog, format, args);
  195.         va_end(args);
  196.  
  197.         if (gEnv->IsEditor())
  198.         {
  199.                 pSystem->Warning(VALIDATOR_MODULE_AI, VALIDATOR_ERROR, VALIDATOR_FLAG_AI, 0, "!AI: Error: %s", outputBufferLog);
  200.         }
  201.         else
  202.         {
  203.                 gEnv->pLog->LogError("%s", outputBufferLog);
  204.         }
  205.  
  206.         savedMsgIndex = (savedMsgIndex + 1) % maxSavedMsgs;
  207.         savedMsgs[savedMsgIndex].savedMsgType = SMT_ERROR;
  208.         cry_strcpy(savedMsgs[savedMsgIndex].savedMsg, outputBufferLog);
  209.         savedMsgs[savedMsgIndex].time = gEnv->pTimer->GetFrameStartTime();
  210. }
  211.  
  212. //====================================================================
  213. // AIWarning
  214. //====================================================================
  215. void AIWarning(const char* format, ...)
  216. {
  217.         if (!pSystem || !AIGetWarningErrorsEnabled() || !AICheckLogVerbosity(AI_LOG_WARNING))
  218.                 return;
  219.  
  220.         DECL_OUTPUT_BUF;
  221.  
  222.         va_list args;
  223.         va_start(args, format);
  224.         cry_vsprintf(outputBufferLog, format, args);
  225.         va_end(args);
  226.         pSystem->Warning(VALIDATOR_MODULE_AI, VALIDATOR_WARNING, VALIDATOR_FLAG_AI, 0, "AI: %s", outputBufferLog);
  227.  
  228.         savedMsgIndex = (savedMsgIndex + 1) % maxSavedMsgs;
  229.         savedMsgs[savedMsgIndex].savedMsgType = SMT_WARNING;
  230.         cry_strcpy(savedMsgs[savedMsgIndex].savedMsg, outputBufferLog);
  231.         savedMsgs[savedMsgIndex].time = gEnv->pTimer->GetFrameStartTime();
  232. }
  233.  
  234. //====================================================================
  235. // AILogAlways
  236. //====================================================================
  237. void AILogAlways(const char* format, ...)
  238. {
  239.         if (!pSystem)
  240.                 return;
  241.  
  242.         DECL_OUTPUT_BUF;
  243.  
  244.         memcpy(outputBufferLog, outputPrefix, outputPrefixLen);
  245.         va_list args;
  246.         va_start(args, format);
  247.         cry_vsprintf(outputBufferLog + outputPrefixLen, sizeof(outputBufferLog) - outputPrefixLen, format, args);
  248.         va_end(args);
  249.  
  250.         gEnv->pLog->Log("%s", outputBufferLog);
  251. }
  252.  
  253. void AILogLoading(const char* format, ...)
  254. {
  255.         if (!pSystem)
  256.                 return;
  257.  
  258.         const char outputPrefix2[] = "--- AI: ";
  259.         const unsigned outputPrefixLen2 = sizeof(outputPrefix2) - 1;
  260.  
  261.         DECL_OUTPUT_BUF;
  262.  
  263.         memcpy(outputBufferLog, outputPrefix2, outputPrefixLen2);
  264.         va_list args;
  265.         va_start(args, format);
  266.         cry_vsprintf(outputBufferLog + outputPrefixLen2, sizeof(outputBufferLog) - outputPrefixLen2, format, args);
  267.         va_end(args);
  268.  
  269.         gEnv->pLog->UpdateLoadingScreen("%s", outputBufferLog);
  270. }
  271.  
  272. //====================================================================
  273. // AIHandleLogMessage
  274. //====================================================================
  275. void AIHandleLogMessage(const char* outputBufferLog)
  276. {
  277.         const int cV = AIGetLogConsoleVerbosity();
  278.         const int fV = AIGetLogFileVerbosity();
  279.  
  280.         if ((cV >= AI_LOG_PROGRESS) && (fV >= AI_LOG_PROGRESS))
  281.                 gEnv->pLog->Log("%s", outputBufferLog);
  282.         else if (cV >= AI_LOG_PROGRESS)
  283.                 gEnv->pLog->LogToConsole("%s", outputBufferLog);
  284.         else if (fV >= AI_LOG_PROGRESS)
  285.                 gEnv->pLog->LogToFile("%s", outputBufferLog);
  286. }
  287.  
  288. //====================================================================
  289. // AILogProgress
  290. //====================================================================
  291. void AILogProgress(const char* format, ...)
  292. {
  293.         if (!pSystem || !AICheckLogVerbosity(AI_LOG_PROGRESS))
  294.                 return;
  295.  
  296.         DECL_OUTPUT_BUF;
  297.  
  298.         memcpy(outputBufferLog, outputPrefix, outputPrefixLen);
  299.         va_list args;
  300.         va_start(args, format);
  301.         cry_vsprintf(outputBufferLog + outputPrefixLen, sizeof(outputBufferLog) - outputPrefixLen, format, args);
  302.         va_end(args);
  303.  
  304.         AIHandleLogMessage(outputBufferLog);
  305. }
  306.  
  307. //====================================================================
  308. // AILogEvent
  309. //====================================================================
  310. void AILogEvent(const char* format, ...)
  311. {
  312.         if (!pSystem || !AICheckLogVerbosity(AI_LOG_EVENT))
  313.                 return;
  314.  
  315.         DECL_OUTPUT_BUF;
  316.  
  317.         memcpy(outputBufferLog, outputPrefix, outputPrefixLen);
  318.         va_list args;
  319.         va_start(args, format);
  320.         cry_vsprintf(outputBufferLog + outputPrefixLen, sizeof(outputBufferLog) - outputPrefixLen, format, args);
  321.         va_end(args);
  322.  
  323.         AIHandleLogMessage(outputBufferLog);
  324. }
  325.  
  326. //====================================================================
  327. // AILogComment
  328. //====================================================================
  329. void AILogComment(const char* format, ...)
  330. {
  331.         if (!pSystem || !AICheckLogVerbosity(AI_LOG_COMMENT))
  332.                 return;
  333.  
  334.         DECL_OUTPUT_BUF;
  335.  
  336.         memcpy(outputBufferLog, outputPrefix, outputPrefixLen);
  337.         va_list args;
  338.         va_start(args, format);
  339.         cry_vsprintf(outputBufferLog + outputPrefixLen, sizeof(outputBufferLog) - outputPrefixLen, format, args);
  340.         va_end(args);
  341.  
  342.         AIHandleLogMessage(outputBufferLog);
  343. }
  344.  
  345. #endif // CRYAISYSTEM_VERBOSITY
  346.  
downloadAILog.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top