BVB Source Codes

CRYENGINE Show CodeCoverageGUI.cpp Source code

Return Download CRYENGINE: download CodeCoverageGUI.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:   CodeCoverageGUI.cpp
  6.    $Id$
  7.    Description:
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - ?
  12.    - 2 Mar 2009 : Evgeny Adamenkov: Removed parameter of type IRenderer from DebugDraw
  13.  
  14.  *********************************************************************/
  15. #include "StdAfx.h"
  16.  
  17. #if !defined(_RELEASE)
  18.  
  19.         #include "CodeCoverageGUI.h"
  20.         #include <CryGame/IGameFramework.h>
  21.         #include "CodeCoverageManager.h"
  22.         #include "DebugDrawContext.h"
  23.  
  24. // CCodeCoverageGUI construction & destruction
  25. CCodeCoverageGUI::CCodeCoverageGUI(void) :
  26.         m_pTex(NULL), m_pTexHit(NULL), m_pTexUnexpected(NULL), m_fPercentageDone(0.0f), m_fNewHit(0.0f), m_fUnexpectedHit(0.0f), m_nListUnexpectedSize(0)
  27. {
  28. }
  29.  
  30. CCodeCoverageGUI::~CCodeCoverageGUI(void)
  31. {
  32.         SAFE_RELEASE(m_pTex);
  33.         SAFE_RELEASE(m_pTexHit);
  34.         SAFE_RELEASE(m_pTexUnexpected);
  35. }
  36.  
  37. // CCodeCoverageGUI operations
  38. void CCodeCoverageGUI::Reset(IAISystem::EResetReason reason)
  39. {
  40.         MEMSTAT_CONTEXT(EMemStatContextTypes::MSC_Other, 0, "Code coverage GUI");
  41.  
  42.         for (int i = 0; i < CCLAST_ELEM; ++i)
  43.                 m_arrLast3[i] = SStrAndTime();
  44.  
  45.         stl::free_container(m_vecRemaining);
  46.  
  47.         if ((reason == IAISystem::RESET_ENTER_GAME) || (reason == IAISystem::RESET_INTERNAL_LOAD))
  48.         {
  49.                 m_fPercentageDone = 0.f;
  50.                 m_fNewHit = 0.f;
  51.                 m_fUnexpectedHit = 0.f;
  52.                 m_nListUnexpectedSize = 0;
  53.  
  54.                 SAFE_RELEASE(m_pTex);
  55.                 CDebugDrawContext dc;
  56.                 m_pTex = dc->LoadTexture("EngineAssets/CodeCoverage/pbar.dds", 0);
  57.  
  58.                 SAFE_RELEASE(m_pTexHit);
  59.                 m_pTexHit = dc->LoadTexture("EngineAssets/CodeCoverage/hit.dds", 0);
  60.  
  61.                 SAFE_RELEASE(m_pTexUnexpected);
  62.                 m_pTexUnexpected = dc->LoadTexture("EngineAssets/CodeCoverage/unexpected.dds", 0);
  63.         }
  64.         else if ((reason == IAISystem::RESET_EXIT_GAME) || (reason == IAISystem::RESET_UNLOAD_LEVEL))
  65.         {
  66.                 /*
  67.                    // Dump the list (TEMP)
  68.                    {
  69.                    typedef std::list<CCodeCoverageCheckPoint *> CheckPointList;
  70.                    FILE *stream = freopen("ListOnExitGame.txt", "wt", stdout);
  71.                    CheckPointList &lst = gAIEnv.pCodeCoverageTracker->GetTempList();
  72.                    for (CheckPointList::iterator it = lst.begin(); it != lst.end(); ++it)
  73.                    {
  74.                     fprintf(stream, "%s\r\n", (*it)->GetLabel());
  75.                    }
  76.                    fclose(stream);
  77.                    }*/
  78.  
  79.                 SAFE_RELEASE(m_pTex);
  80.                 SAFE_RELEASE(m_pTexHit);
  81.                 SAFE_RELEASE(m_pTexUnexpected);
  82.         }
  83. }
  84.  
  85. void CCodeCoverageGUI::Update(CTimeValue frameStartTime, float frameDeltaTime)
  86. {
  87.         if (!gAIEnv.pCodeCoverageManager || !gAIEnv.pCodeCoverageManager->IsContextValid())
  88.                 return;
  89.  
  90.         int iTotal = gAIEnv.pCodeCoverageManager->GetTotal();
  91.         int iTotalReg = gAIEnv.pCodeCoverageManager->GetTotalRegistered();
  92.         m_fPercentageDone = (iTotal ? iTotalReg / (float)iTotal : -0.0f);
  93.  
  94.         // Check for unexpected hits
  95.         int nSize = gAIEnv.pCodeCoverageManager->GetUnexpectedCheckpoints().size();
  96.         if (nSize != m_nListUnexpectedSize)
  97.         {
  98.                 m_nListUnexpectedSize = nSize;
  99.                 m_fUnexpectedHit = 1.f;
  100.         }
  101.         else
  102.         {
  103.                 if (m_fUnexpectedHit > 0.f)
  104.                         m_fUnexpectedHit -= frameDeltaTime * .2f;
  105.         }
  106.  
  107.         // Update the list
  108.         for (int i = 0; i < CCLAST_ELEM; ++i)
  109.         {
  110.                 if (m_arrLast3[i].fTime > 0.f)
  111.                         m_arrLast3[i].fTime -= frameDeltaTime;
  112.         }
  113.  
  114.         if (m_fNewHit > 0.f)
  115.                 m_fNewHit -= frameDeltaTime * .33f;
  116.  
  117.         const char* pNewHit[3];
  118.         gAIEnv.pCodeCoverageTracker->GetMostRecentAndReset(pNewHit);
  119.  
  120.         for (int i = 0; i < 3; ++i)
  121.                 if (pNewHit[i])
  122.                 {
  123.                         for (int j = 1; j < CCLAST_ELEM; ++j)
  124.                                 m_arrLast3[j - 1] = m_arrLast3[j];
  125.                         m_arrLast3[CCLAST_ELEM - 1] = SStrAndTime(pNewHit[i], 3.f);
  126.                         m_fNewHit = 1.f;
  127.                 }
  128.  
  129.         // If there are only 10 left
  130.         int nPointsLeft = gAIEnv.pCodeCoverageManager->GetTotal() - gAIEnv.pCodeCoverageManager->GetTotalRegistered();
  131.         if ((nPointsLeft <= 10) && (nPointsLeft > 0))
  132.                 gAIEnv.pCodeCoverageManager->GetRemainingCheckpointLabels(m_vecRemaining);
  133.         else if ((nPointsLeft == 0) && !m_vecRemaining.empty())
  134.                 m_vecRemaining.clear();
  135. }
  136.  
  137. void CCodeCoverageGUI::DebugDraw(int nMode)
  138. {
  139.         if (!gAIEnv.pCodeCoverageManager || !gAIEnv.pCodeCoverageManager->IsContextValid())
  140.                 return;
  141.  
  142.         if (m_pTex && m_pTexHit)
  143.         {
  144.                 if ((nMode == 3) || (nMode == 1 && m_fPercentageDone > .7f))
  145.                 {
  146.                         // For 3D drawing we have to assume 800x600. An old convention I guess.
  147.                         int w = 800;
  148.                         int h = 600;
  149.  
  150.                         CDebugDrawContext dc;
  151.                         dc->Init2DMode();
  152.                         dc->SetAlphaBlended(false);
  153.                         dc->SetDepthTest(false);
  154.  
  155.                         // Render the progress bar
  156.                         float xBar = w * .05f;
  157.                         float yBar = h * .05f;
  158.                         float wBar = w * .035f;
  159.                         float hBar = h * .9f;
  160.                         dc->Draw2dImage(xBar, yBar + hBar * (1.0f - m_fPercentageDone), wBar, hBar * m_fPercentageDone, m_pTex->GetTextureID(), 0.f, 1.f - m_fPercentageDone, 1, 1, 0, 1.f, 1.f, 1.f, .5f);
  161.  
  162.                         // Render the NewHit quad
  163.                         if (m_fNewHit > 0.f)
  164.                         {
  165.                                 float xNewHit = w * .05f;
  166.                                 float yNewHit = h * .04f;
  167.                                 float wNewHit = wBar;
  168.                                 float hNewHit = h * (.062f - .04f);
  169.                                 dc->Draw2dImage(xNewHit, yNewHit, wNewHit, hNewHit, m_pTexHit->GetTextureID(), 0, 1, 1, 0, 0, 1.f, 1.f, 1.f, m_fNewHit);
  170.                         }
  171.  
  172.                         // Render UnexpectedHit quad
  173.                         if ((m_fUnexpectedHit > 0.f) && m_pTexUnexpected)
  174.                         {
  175.                                 float xUnexpHit = w * .6f;
  176.                                 float yUnexpHit = h * .75f;
  177.                                 dc->Draw2dImage(xUnexpHit, yUnexpHit, 150, 75, m_pTexUnexpected->GetTextureID(), 0, 1, 1, 0, 0, 1.f, 1.f, 1.f, m_fUnexpectedHit);
  178.                         }
  179.  
  180.                         // Render the 3 last hit
  181.                         float fLeft = .15f * w, fTop = .02f * h;
  182.                         for (int i = 0; i < CCLAST_ELEM; ++i)
  183.                                 if (m_arrLast3[i].fTime > 0.f)
  184.                                 {
  185.                                         ColorB color(128, 255, 255, uint8(255 * m_arrLast3[i].fTime / 3.f));
  186.                                         dc->Draw2dLabel(fLeft, fTop, 1.7f, color, false, "%s", m_arrLast3[i].pStr);
  187.                                         fTop += 20.f;
  188.                                 }
  189.  
  190.                         // Render percentage
  191.                         ColorB colorPercentage(255, 255, 255);
  192.                         dc->Draw2dLabel(xBar + wBar * 0.5f, yBar + hBar * 0.5f, 1.5f, colorPercentage, false, "%0.0f%%", m_fPercentageDone * 100.f);
  193.  
  194.                         // Render the remaining 10
  195.                         if (!m_vecRemaining.empty())
  196.                         {
  197.                                 fTop = .14f * h;
  198.                                 ColorB color(255, 102, 102);
  199.                                 for (std::vector<const char*>::iterator it = m_vecRemaining.begin(); it != m_vecRemaining.end(); ++it)
  200.                                 {
  201.                                         dc->Draw2dLabel(fLeft, fTop, 1.2f, color, false, "%s", *it);
  202.                                         fTop += 14.f;
  203.                                 }
  204.                         }
  205.                 }
  206.         }
  207. }
  208.  
  209. #endif //_RELEASE
  210.  
downloadCodeCoverageGUI.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