BVB Source Codes

CRYENGINE Show SequenceAgent.h Source code

Return Download CRYENGINE: download SequenceAgent.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #pragma once
  4.  
  5. #ifndef SequenceAgent_h
  6.         #define SequenceAgent_h
  7.  
  8.         #include "AIBubblesSystem/AIBubblesSystem.h"
  9.  
  10. namespace AIActionSequence
  11. {
  12.  
  13. class SequenceAgent
  14. {
  15. public:
  16.         SequenceAgent(EntityId entityID)
  17.                 : m_aiActor(NULL)
  18.         {
  19.                 IEntity* entity = gEnv->pEntitySystem->GetEntity(entityID);
  20.                 if (!entity)
  21.                         return;
  22.  
  23.                 IAIObject* aiObject = entity->GetAI();
  24.                 if (!aiObject)
  25.                         return;
  26.  
  27.                 m_aiActor = aiObject->CastToCAIActor();
  28.                 if (!m_aiActor)
  29.                 {
  30.                         stack_string message;
  31.                         message.Format("AI SequenceAgent: agent '%s' is not of type CAIActor", entity->GetName());
  32.                         AIQueueBubbleMessage("AI SequenceAgent: agent is not of type CAIActor", entityID, message, eBNS_LogWarning | eBNS_Balloon);
  33.                 }
  34.         }
  35.  
  36.         bool ValidateAgent() const
  37.         {
  38.                 return m_aiActor != NULL;
  39.         }
  40.  
  41.         void SetSequenceBehavior(bool interruptible)
  42.         {
  43.                 if (!ValidateAgent())
  44.                         return;
  45.  
  46.                 if (interruptible)
  47.                         m_aiActor->SetBehaviorVariable("ExecuteInterruptibleSequence", true);
  48.                 else
  49.                         m_aiActor->SetBehaviorVariable("ExecuteSequence", true);
  50.         }
  51.  
  52.         bool IsRunningSequenceBehavior(bool interruptible)
  53.         {
  54.                 if (!ValidateAgent())
  55.                         return false;
  56.  
  57.                 IAIActorProxy* aiActorProxy = m_aiActor->GetProxy();
  58.                 assert(aiActorProxy);
  59.                 if (!aiActorProxy)
  60.                         return false;
  61.  
  62.                 const char* currentBehavior = aiActorProxy->GetCurrentBehaviorName();
  63.                 if (!currentBehavior)
  64.                         return false;
  65.  
  66.                 if (interruptible)
  67.                         return !strcmp(currentBehavior, "ExecuteInterruptibleSequence");
  68.                 else
  69.                         return !strcmp(currentBehavior, "ExecuteSequence");
  70.         }
  71.  
  72.         void ClearSequenceBehavior() const
  73.         {
  74.                 if (!ValidateAgent() && m_aiActor->IsEnabled())
  75.                         return;
  76.  
  77.                 m_aiActor->SetBehaviorVariable("ExecuteSequence", false);
  78.                 m_aiActor->SetBehaviorVariable("ExecuteInterruptibleSequence", false);
  79.         }
  80.  
  81.         void ClearGoalPipe() const
  82.         {
  83.                 if (!ValidateAgent())
  84.                         return;
  85.  
  86.                 if (IPipeUser* pipeUser = m_aiActor->CastToIPipeUser())
  87.                 {
  88.                         pipeUser->SelectPipe(0, "Empty", 0, 0, true);
  89.                 }
  90.         }
  91.  
  92.         IPipeUser* GetPipeUser()
  93.         {
  94.                 if (!ValidateAgent())
  95.                         return NULL;
  96.  
  97.                 return m_aiActor->CastToIPipeUser();
  98.         }
  99.  
  100.         IEntity* GetEntity()
  101.         {
  102.                 if (!ValidateAgent())
  103.                         return NULL;
  104.  
  105.                 return m_aiActor->GetEntity();
  106.         }
  107.  
  108.         EntityId GetEntityId() const
  109.         {
  110.                 if (!ValidateAgent())
  111.                         return 0;
  112.  
  113.                 return m_aiActor->GetEntityID();
  114.         }
  115.  
  116.         void SendSignal(const char* signalName, IEntity* pSender)
  117.         {
  118.                 if (!ValidateAgent())
  119.                         return;
  120.  
  121.                 IAISignalExtraData* pData = gEnv->pAISystem->CreateSignalExtraData();
  122.                 const int goalPipeId = gEnv->pAISystem->AllocGoalPipeId();
  123.                 pData->iValue = goalPipeId;
  124.                 m_aiActor->SetSignal(10, signalName, pSender, pData);
  125.         }
  126.  
  127. private:
  128.         SequenceAgent()
  129.                 : m_aiActor(NULL)
  130.         {
  131.         }
  132.  
  133.         CAIActor* m_aiActor;
  134. };
  135.  
  136. } // namespace AIActionSequence
  137.  
  138. #endif //SequenceAgent_h
  139.  
downloadSequenceAgent.h 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