BVB Source Codes

CRYENGINE Show CommunicationTestManager.cpp Source code

Return Download CRYENGINE: download CommunicationTestManager.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "CommunicationTestManager.h"
  5. #include "CommunicationManager.h"
  6.  
  7. CommunicationTestManager::CommunicationTestManager()
  8.         : m_playGenID(0)
  9. {
  10. }
  11.  
  12. void CommunicationTestManager::Reset()
  13. {
  14.         while (!m_playingActors.empty())
  15.                 Stop(m_playingActors.begin()->first);
  16. }
  17.  
  18. void CommunicationTestManager::StartFor(EntityId actorID, const char* commName, int variationNumber)
  19. {
  20.         IEntity* entity = gEnv->pEntitySystem->GetEntity(actorID);
  21.  
  22.         if (IAIObject* aiObject = entity->GetAI())
  23.         {
  24.                 if (IAIActorProxy* proxy = aiObject->GetProxy())
  25.                 {
  26.                         CryLogAlways("Playing communications test for '%s'...", entity ? entity->GetName() : "<null>");
  27.  
  28.                         std::pair<PlayingActors::iterator, bool> iresult = m_playingActors.insert(
  29.                           PlayingActors::value_type(actorID, PlayingActor()));
  30.  
  31.                         if (!iresult.second)
  32.                         {
  33.                                 // already playing
  34.                                 return;
  35.                         }
  36.  
  37.                         PlayingActor& playingActor = iresult.first->second;
  38.                         playingActor.configID = gAIEnv.pCommunicationManager->GetConfigID(proxy->GetCommunicationConfigName());
  39.                         playingActor.onlyOne = commName && *commName;
  40.  
  41.                         if (playingActor.onlyOne)
  42.                         {
  43.                                 playingActor.commID = gAIEnv.pCommunicationManager->GetCommunicationID(commName);
  44.                                 playingActor.variation = variationNumber;
  45.                         }
  46.  
  47.                         PlayNext(actorID);
  48.                 }
  49.         }
  50. }
  51.  
  52. void CommunicationTestManager::Stop(EntityId actorID)
  53. {
  54.         PlayingActors::iterator it = m_playingActors.find(actorID);
  55.  
  56.         if (it != m_playingActors.end())
  57.         {
  58.                 PlayingActor& playingActor = it->second;
  59.                 CommPlayID playID = playingActor.playID;
  60.                 m_playing.erase(playingActor.playID);
  61.                 m_playingActors.erase(it);
  62.  
  63.                 m_player.Stop(playID);
  64.  
  65.                 IEntity* entity = gEnv->pEntitySystem->GetEntity(actorID);
  66.                 CryLogAlways("Cancelled communications test for '%s'...", entity ? entity->GetName() : "<null>");
  67.         }
  68. }
  69.  
  70. void CommunicationTestManager::Update(float updateTime)
  71. {
  72.         m_player.Update(updateTime);
  73. }
  74.  
  75. void CommunicationTestManager::OnCommunicationFinished(const CommPlayID& playID, uint8 stateFlags)
  76. {
  77.         PlayingCommunications::iterator it = m_playing.find(playID);
  78.         if (it != m_playing.end())
  79.         {
  80.                 EntityId actorID = it->second;
  81.                 m_playing.erase(playID);
  82.  
  83.                 PlayingActors::iterator pit = m_playingActors.find(actorID);
  84.                 if (pit != m_playingActors.end())
  85.                 {
  86.                         PlayingActor& playingActor = pit->second;
  87.  
  88.                         if (playingActor.onlyOne)
  89.                         {
  90.                                 const CCommunicationManager::CommunicationsConfig& config =
  91.                                   gAIEnv.pCommunicationManager->GetConfig(playingActor.configID);
  92.  
  93.                                 Report(actorID, playingActor, config.name.c_str());
  94.                                 m_playingActors.erase(pit);
  95.                         }
  96.                         else
  97.                                 PlayNext(actorID);
  98.                 }
  99.         }
  100. }
  101.  
  102. void CommunicationTestManager::PlayNext(EntityId actorID)
  103. {
  104.         PlayingActors::iterator pit = m_playingActors.find(actorID);
  105.         if (pit != m_playingActors.end())
  106.         {
  107.                 PlayingActor& playingActor = pit->second;
  108.  
  109.                 const CCommunicationManager::CommunicationsConfig& config =
  110.                   gAIEnv.pCommunicationManager->GetConfig(playingActor.configID);
  111.  
  112.                 while (true)
  113.                 {
  114.                         if (!playingActor.commID && !config.comms.empty())
  115.                                 playingActor.commID = config.comms.begin()->first;
  116.  
  117.                         if (!playingActor.commID)
  118.                         {
  119.                                 Report(actorID, playingActor, config.name.c_str());
  120.                                 m_playingActors.erase(pit);
  121.  
  122.                                 return;
  123.                         }
  124.  
  125.                         CCommunicationManager::Communications::const_iterator commIt = config.comms.find(playingActor.commID);
  126.                         if (commIt == config.comms.end())
  127.                         {
  128.                                 ++playingActor.failedCount;
  129.                                 Report(actorID, playingActor, config.name.c_str());
  130.                                 m_playingActors.erase(pit);
  131.  
  132.                                 return;
  133.                         }
  134.  
  135.                         const SCommunication& prevComm = commIt->second;
  136.                         uint32 prevVarCount = prevComm.variations.size();
  137.  
  138.                         if (playingActor.variation >= prevVarCount)
  139.                         {
  140.                                 ++commIt;
  141.  
  142.                                 if (commIt == config.comms.end())
  143.                                 {
  144.                                         Report(actorID, playingActor, config.name.c_str());
  145.                                         m_playingActors.erase(pit);
  146.  
  147.                                         return;
  148.                                 }
  149.  
  150.                                 playingActor.variation = 0;
  151.                                 playingActor.commID = commIt->first;
  152.                         }
  153.  
  154.                         SCommunicationRequest request;
  155.                         request.actorID = actorID;
  156.                         request.commID = playingActor.commID;
  157.                         request.configID = playingActor.configID;
  158.  
  159.                         const SCommunication& comm = commIt->second;
  160.                         ++playingActor.totalCount;
  161.  
  162.                         SCommunication testComm(comm);
  163.                         SCommunicationVariation& variation = testComm.variations[playingActor.variation];
  164.                         variation.flags |= (SCommunication::FinishVoice | SCommunication::FinishSound);
  165.  
  166.                         ++m_playGenID.id;
  167.                         if (m_player.Play(m_playGenID, request, testComm, playingActor.variation++, this, 0))
  168.                         {
  169.                                 CryLogAlways("Now playing communication test '%s' variation %u from '%s'...",
  170.                                              comm.name.c_str(), playingActor.variation - 1, config.name.c_str());
  171.                                 m_playing.insert(PlayingCommunications::value_type(m_playGenID, actorID));
  172.                                 playingActor.playID = m_playGenID;
  173.  
  174.                                 break;
  175.                         }
  176.                         else
  177.                         {
  178.                                 CryLogAlways("Failed to play communication test '%s' variation '%u' from '%s'...",
  179.                                              comm.name.c_str(), playingActor.variation - 1, config.name.c_str());
  180.  
  181.                                 ++playingActor.failedCount;
  182.  
  183.                                 if (playingActor.onlyOne)
  184.                                 {
  185.                                         Report(actorID, playingActor, config.name.c_str());
  186.                                         m_playingActors.erase(pit);
  187.  
  188.                                         return;
  189.                                 }
  190.                         }
  191.                 }
  192.         }
  193. }
  194.  
  195. void CommunicationTestManager::Report(EntityId actorID, const PlayingActor& playingActor, const char* configName)
  196. {
  197.         IEntity* entity = gEnv->pEntitySystem->GetEntity(actorID);
  198.  
  199.         CryLogAlways("Finished communication test for '%s' using '%s'...", entity ? entity->GetName() : "<null>", configName);
  200.         CryLogAlways("Attempted: %u", playingActor.totalCount);
  201.         CryLogAlways("Failed: %u", playingActor.failedCount);
  202. }
  203.  
downloadCommunicationTestManager.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