BVB Source Codes

CRYENGINE Show FlowDynamicResponseSignal.cpp Source code

Return Download CRYENGINE: download FlowDynamicResponseSignal.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.  
  5. #include <CryFlowGraph/IFlowBaseNode.h>
  6. #include <CryEntitySystem/IEntityComponent.h>
  7. #include <CryDynamicResponseSystem/IDynamicResponseSystem.h>
  8.  
  9. class CFlowNode_SendDynamicResponseSignal final : public CFlowBaseNode<eNCT_Instanced>, public DRS::IResponseManager::IListener
  10. {
  11. public:
  12.  
  13.         explicit CFlowNode_SendDynamicResponseSignal(SActivationInfo* pActInfo)
  14.         {
  15.         }
  16.  
  17.         //////////////////////////////////////////////////////////////////////////
  18.         ~CFlowNode_SendDynamicResponseSignal()
  19.         {
  20.                 gEnv->pDynamicResponseSystem->GetResponseManager()->RemoveListener(this);
  21.         }
  22.  
  23.         //////////////////////////////////////////////////////////////////////////
  24.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo) override
  25.         {
  26.                 return new CFlowNode_SendDynamicResponseSignal(pActInfo);
  27.         }
  28.  
  29.         //////////////////////////////////////////////////////////////////////////
  30.         enum EInputs
  31.         {
  32.                 eIn_Send,
  33.                 eIn_SignalName,
  34.                 eIn_StringContextVariableName,
  35.                 eIn_StringContextVariableValue,
  36.                 eIn_IntContextVariableName,
  37.                 eIn_IntContextVariableValue
  38.         };
  39.  
  40.         enum EOutputs
  41.         {
  42.                 eOut_SignalSent,
  43.                 eOut_Done
  44.         };
  45.  
  46.         virtual void GetConfiguration(SFlowNodeConfig& config) override
  47.         {
  48.                 static const SInputPortConfig inputs[] =
  49.                 {
  50.                         InputPortConfig_Void("Send",                          _HELP("send dynamic response signal name")),
  51.                         InputPortConfig<string>("SignalName",                 _HELP("dynamic response signal name")),
  52.                         InputPortConfig<string>("StringContextVariableName",  _HELP("the name of a string variable that is send along with this signal and can therefore be used in the responses")),
  53.                         InputPortConfig<string>("StringContextVariableValue", _HELP("a string value to send along with this signal")),
  54.                         InputPortConfig<string>("IntContextVariableName",     _HELP("the name of a numeric variable that is send along with this signal and can therefore be used in the responses")),
  55.                         InputPortConfig<int>("IntContextVariableValue",       _HELP("a numeric value to send along with this signal")),
  56.                         { 0 }
  57.                 };
  58.  
  59.                 static const SOutputPortConfig outputs[] =
  60.                 {
  61.                         OutputPortConfig<int>("Sent", _HELP("Will be triggered when the signal has been sent")),
  62.                         OutputPortConfig<int>("Done", _HELP("Will be triggered when the processing of the signal has finished. This means the response has finished or there was none.")),
  63.                         { 0 }
  64.                 };
  65.  
  66.                 config.pInputPorts = inputs;
  67.                 config.pOutputPorts = outputs;
  68.                 config.sDescription = _HELP("This node sends a signal to the Dynamic Response System.");
  69.                 config.nFlags |= EFLN_TARGET_ENTITY;
  70.                 config.SetCategory(EFLN_APPROVED);
  71.         }
  72.  
  73.         //////////////////////////////////////////////////////////////////////////
  74.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser) override
  75.         {
  76.         }
  77.  
  78.         //////////////////////////////////////////////////////////////////////////
  79.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo) override
  80.         {
  81.                 switch (event)
  82.                 {
  83.                 case eFE_Initialize:
  84.                         {
  85.                                 break;
  86.                         }
  87.                 case eFE_Activate:
  88.                         {
  89.                                 if (IsPortActive(pActInfo, eIn_Send))
  90.                                 {
  91.                                         if (pActInfo->pEntity)
  92.                                         {
  93.                                                 const string& signalName = GetPortString(pActInfo, eIn_SignalName);
  94.                                                 IEntityDynamicResponseComponent* const pIEntityDrsProxy = crycomponent_cast<IEntityDynamicResponseComponent*>(pActInfo->pEntity->CreateProxy(ENTITY_PROXY_DYNAMICRESPONSE));
  95.  
  96.                                                 SET_DRS_USER_SCOPED("SendDrsSignal FlowGraph");
  97.  
  98.                                                 const string& stringVariableName = GetPortString(pActInfo, eIn_StringContextVariableName);
  99.                                                 const string& intVariableName = GetPortString(pActInfo, eIn_IntContextVariableName);
  100.  
  101.                                                 DRS::IVariableCollectionSharedPtr pContextVariableCollection = nullptr;
  102.                                                 if (!stringVariableName.empty())
  103.                                                 {
  104.                                                         pContextVariableCollection = gEnv->pDynamicResponseSystem->CreateContextCollection();
  105.                                                         const string& stringVariableValue = GetPortString(pActInfo, eIn_StringContextVariableValue);
  106.                                                         pContextVariableCollection->SetVariableValue(stringVariableName, CHashedString(stringVariableValue));
  107.                                                 }
  108.                                                 if (!intVariableName.empty())
  109.                                                 {
  110.                                                         if (!pContextVariableCollection)
  111.                                                         {
  112.                                                                 pContextVariableCollection = gEnv->pDynamicResponseSystem->CreateContextCollection();
  113.                                                         }
  114.                                                         const int intVariableValue = GetPortInt(pActInfo, eIn_IntContextVariableValue);
  115.                                                         pContextVariableCollection->SetVariableValue(intVariableName.c_str(), intVariableValue);
  116.                                                 }
  117.  
  118.                                                 DRS::SignalInstanceId signalID;
  119.                                                 if (IsOutputConnected(pActInfo, eOut_Done)) //we only need to register ourself as a listener to the signal, if the done port is used
  120.                                                 {
  121.                                                         m_actInfo = *pActInfo;
  122.                                                         signalID = pIEntityDrsProxy->GetResponseActor()->QueueSignal(signalName, pContextVariableCollection, this);
  123.                                                 }
  124.                                                 else
  125.                                                 {
  126.                                                         signalID = pIEntityDrsProxy->GetResponseActor()->QueueSignal(signalName, pContextVariableCollection);
  127.                                                 }
  128.  
  129.                                                 ActivateOutput(pActInfo, eOut_SignalSent, static_cast<int>(signalID));
  130.                                         }
  131.                                         else
  132.                                         {
  133.                                                 CryWarning(VALIDATOR_MODULE_GAME, VALIDATOR_WARNING, "CAction:DRS_SendSignal: Cannot send a signal without an specified EntityID.");
  134.                                         }
  135.                                 }
  136.                                 break;
  137.                         }
  138.                 }
  139.         }
  140.  
  141.         //////////////////////////////////////////////////////////////////////////
  142.         virtual void GetMemoryUsage(ICrySizer* s) const override
  143.         {
  144.                 s->Add(*this);
  145.         }
  146.  
  147.         //////////////////////////////////////////////////////////
  148.         // DRS::IResponseManager::IListener implementation
  149.         virtual void OnSignalProcessingFinished(DRS::IResponseManager::IListener::SSignalInfos& signal, DRS::IResponseInstance* pFinishedResponse, DRS::IResponseManager::IListener::eProcessingResult outcome) override
  150.         {
  151.                 ActivateOutput(&m_actInfo, eOut_Done, static_cast<int>(signal.id));
  152.         }
  153.         //////////////////////////////////////////////////////////////////////////
  154.  
  155. private:
  156.         SActivationInfo m_actInfo;
  157.         //////////////////////////////////////////////////////////////////////////
  158. };
  159.  
  160. class CFlowNode_CancelDynamicResponseSignal final : public CFlowBaseNode<eNCT_Instanced>
  161. {
  162. public:
  163.         explicit CFlowNode_CancelDynamicResponseSignal(SActivationInfo* pActInfo)
  164.         {
  165.         }
  166.  
  167.         //////////////////////////////////////////////////////////////////////////
  168.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo) override
  169.         {
  170.                 return new CFlowNode_CancelDynamicResponseSignal(pActInfo);
  171.         }
  172.  
  173.         //////////////////////////////////////////////////////////////////////////
  174.         enum EInputs
  175.         {
  176.                 eIn_Cancel,
  177.                 eIn_SignalName,
  178.         };
  179.  
  180.         enum EOutputs
  181.         {
  182.                 eOut_CancelRequestSent,
  183.         };
  184.  
  185.         virtual void GetConfiguration(SFlowNodeConfig& config) override
  186.         {
  187.                 static const SInputPortConfig inputs[] =
  188.                 {
  189.                         InputPortConfig_Void("Cancel",        _HELP("cancel the processing of the dynamic response signal")),
  190.                         InputPortConfig<string>("SignalName", _HELP("the name of the dynamic response signal name to cancel"),"Name"),
  191.                         { 0 }
  192.                 };
  193.  
  194.                 static const SOutputPortConfig outputs[] =
  195.                 {
  196.                         OutputPortConfig<string>("Canceled", _HELP("Will be triggered when the cancel-request for the signal has been sent")),
  197.                         { 0 }
  198.                 };
  199.  
  200.                 config.pInputPorts = inputs;
  201.                 config.pOutputPorts = outputs;
  202.                 config.sDescription = _HELP("This node sends a signal to the Dynamic Response System.");
  203.                 config.nFlags |= EFLN_TARGET_ENTITY;
  204.                 config.SetCategory(EFLN_APPROVED);
  205.         }
  206.  
  207.         //////////////////////////////////////////////////////////////////////////
  208.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser) override
  209.         {
  210.         }
  211.  
  212.         //////////////////////////////////////////////////////////////////////////
  213.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo) override
  214.         {
  215.                 switch (event)
  216.                 {
  217.                 case eFE_Initialize:
  218.                         {
  219.                                 break;
  220.                         }
  221.                 case eFE_Activate:
  222.                         {
  223.                                 if (IsPortActive(pActInfo, eIn_Cancel))
  224.                                 {
  225.                                         const string& signalName = GetPortString(pActInfo, eIn_SignalName);
  226.                                         if (pActInfo->pEntity)
  227.                                         {
  228.                                                 IEntityDynamicResponseComponent* const pIEntityDrsProxy = crycomponent_cast<IEntityDynamicResponseComponent*>(pActInfo->pEntity->CreateProxy(ENTITY_PROXY_DYNAMICRESPONSE));
  229.                                                 gEnv->pDynamicResponseSystem->CancelSignalProcessing(signalName, pIEntityDrsProxy->GetResponseActor());
  230.                                         }
  231.                                         else
  232.                                         {
  233.                                                 gEnv->pDynamicResponseSystem->CancelSignalProcessing(signalName);
  234.                                         }
  235.                                         ActivateOutput(pActInfo, eOut_CancelRequestSent, true);
  236.                                 }
  237.                                 break;
  238.                         }
  239.                 }
  240.         }
  241.  
  242.         //////////////////////////////////////////////////////////////////////////
  243.         virtual void GetMemoryUsage(ICrySizer* s) const override
  244.         {
  245.                 s->Add(*this);
  246.         }
  247.  
  248. private:
  249.         //////////////////////////////////////////////////////////////////////////
  250. };
  251.  
  252. #if !defined(IS_EAAS)
  253. REGISTER_FLOW_NODE("DynamicResponse:SendSignal", CFlowNode_SendDynamicResponseSignal);
  254. REGISTER_FLOW_NODE("DynamicResponse:CancelSignalProcessing", CFlowNode_CancelDynamicResponseSignal);
  255. #endif
  256.  
downloadFlowDynamicResponseSignal.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