BVB Source Codes

CRYENGINE Show FlowDynamicResponseVariable.cpp Source code

Return Download CRYENGINE: download FlowDynamicResponseVariable.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. namespace
  10. {
  11. DRS::IVariableCollection* GetVariableCollection(EntityId entityID, const string& collectionName)
  12. {
  13.         if (entityID != INVALID_ENTITYID)    //entityID specified = use local collection of that entity
  14.         {
  15.                 IEntity* pVariableCollectionOwningEntity = gEnv->pEntitySystem->GetEntity(entityID);
  16.                 if (pVariableCollectionOwningEntity)
  17.                 {
  18.                         const IEntityDynamicResponseComponent* pIEntityDrsProxy = crycomponent_cast<IEntityDynamicResponseComponent*>(pVariableCollectionOwningEntity->CreateProxy(ENTITY_PROXY_DYNAMICRESPONSE));
  19.                         if (pIEntityDrsProxy)
  20.                         {
  21.                                 return pIEntityDrsProxy->GetLocalVariableCollection();
  22.                         }
  23.                 }
  24.         }
  25.         else
  26.         {
  27.                 DRS::IVariableCollection* pVariableCollection = gEnv->pDynamicResponseSystem->GetCollection(collectionName);    //fetch an existing Collection
  28.                 if (!pVariableCollection)
  29.                 {
  30.                         pVariableCollection = gEnv->pDynamicResponseSystem->CreateVariableCollection(collectionName);    //or create a new one
  31.                 }
  32.                 return pVariableCollection;
  33.         }
  34.         return nullptr;
  35. }
  36. }
  37.  
  38. class CFlowNode_SetFloatDynamicResponseVariable : public CFlowBaseNode<eNCT_Instanced>
  39. {
  40. public:
  41.         enum EInputs
  42.         {
  43.                 eIn_Set,
  44.                 eIn_EntityID,
  45.                 eIn_VariableCollectionName,
  46.                 eIn_VariableName,
  47.                 eIn_FloatValue,
  48.                 eIn_ResetTime,
  49.         };
  50.  
  51.         enum EOutputs
  52.         {
  53.                 eOut_VariableCollectionName,
  54.         };
  55.  
  56.         explicit CFlowNode_SetFloatDynamicResponseVariable(SActivationInfo* pActInfo)
  57.         {
  58.         }
  59.  
  60.         //////////////////////////////////////////////////////////////////////////
  61.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo)
  62.         {
  63.                 return new CFlowNode_SetFloatDynamicResponseVariable(pActInfo);
  64.         }
  65.  
  66.         //////////////////////////////////////////////////////////////////////////
  67.  
  68.         virtual void GetConfiguration(SFlowNodeConfig& config)
  69.         {
  70.                 static const SInputPortConfig inputs[] =
  71.                 {
  72.                         InputPortConfig_Void("Set",               _HELP("Sets the given value to the specified variable. Will create a new variable collection or use existing")),
  73.                         InputPortConfig<EntityId>("EntityID",     _HELP("The ID of the entity to fetch the collection from.")),
  74.                         InputPortConfig<string>("CollectionName", _HELP("The name of a collection. Only used if no entity-id is specified, otherwise the entity-local variable collection will be used"),"CollectionName"),
  75.                         InputPortConfig<string>("VariableName",   _HELP("The name of the variable to set, will be created if not existing"),                                                             "VariableName"),
  76.                         InputPortConfig<float>("FloatValue",      _HELP("A float value to set to the variable"),                                                                                         "FloatValue"),
  77.                         InputPortConfig<float>("ResetTime",       _HELP("The time after which the variable is reset to its previous value"),                                                             "ResetTime"),
  78.                         { 0 }
  79.                 };
  80.  
  81.                 static const SOutputPortConfig outputs[] = {
  82.                         OutputPortConfig<string>("UsedCollectionName", _HELP("Outputs the name of the variable-collection created or used")),
  83.                         { 0 }
  84.                 };
  85.  
  86.                 config.pInputPorts = inputs;
  87.                 config.pOutputPorts = outputs;
  88.                 config.sDescription = _HELP("This node is used to set a variable in a variable collection for the Dynamic Response System.");
  89.                 //config.nFlags |= EFLN_TARGET_ENTITY;
  90.                 config.SetCategory(EFLN_APPROVED);
  91.         }
  92.  
  93.         //////////////////////////////////////////////////////////////////////////
  94.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser)
  95.         {
  96.         }
  97.  
  98.         //////////////////////////////////////////////////////////////////////////
  99.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  100.         {
  101.                 switch (event)
  102.                 {
  103.                 case eFE_Initialize:
  104.                         {
  105.                                 break;
  106.                         }
  107.                 case eFE_Activate:
  108.                         {
  109.                                 if (IsPortActive(pActInfo, eIn_Set))
  110.                                 {
  111.                                         const string& variableName = GetPortString(pActInfo, eIn_VariableName);
  112.                                         if (variableName.empty())
  113.                                         {
  114.                                                 CryWarning(VALIDATOR_MODULE_GAME, VALIDATOR_WARNING, "CAction:DRS_SetVariable: Cannot be executed without a Variable Name.");
  115.                                                 return;
  116.                                         }
  117.  
  118.                                         const string& collectionName = GetPortString(pActInfo, eIn_VariableCollectionName);
  119.                                         EntityId entityID = GetPortEntityId(pActInfo, eIn_EntityID);
  120.  
  121.                                         DRS::IVariableCollection* variableCollection = GetVariableCollection(entityID, collectionName);
  122.  
  123.                                         if (variableCollection)
  124.                                         {
  125.                                                 SET_DRS_USER_SCOPED("SetDrsVariable FlowGraphNode");
  126.                                                 float newVariableValue = GetPortFloat(pActInfo, eIn_FloatValue);
  127.                                                 variableCollection->SetVariableValue(variableName, newVariableValue, true, GetPortFloat(pActInfo, eIn_ResetTime));
  128.                                                 ActivateOutput(pActInfo, eOut_VariableCollectionName, variableCollection->GetName().GetText());
  129.                                         }
  130.                                 }
  131.                                 break;
  132.                         }
  133.                 }
  134.         }
  135.  
  136.         //////////////////////////////////////////////////////////////////////////
  137.         virtual void GetMemoryUsage(ICrySizer* s) const
  138.         {
  139.                 s->Add(*this);
  140.         }
  141. };
  142.  
  143. //////////////////////////////////////////////////////////////////////////
  144. //////////////////////////////////////////////////////////////////////////
  145. //////////////////////////////////////////////////////////////////////////
  146.  
  147. class CFlowNode_SetIntegerDynamicResponseVariable : public CFlowBaseNode<eNCT_Instanced>
  148. {
  149. public:
  150.         enum EInputs
  151.         {
  152.                 eIn_Set,
  153.                 eIn_EntityID,
  154.                 eIn_VariableCollectionName,
  155.                 eIn_VariableName,
  156.                 eIn_IntegerValue,
  157.                 eIn_ResetTime,
  158.         };
  159.  
  160.         enum EOutputs
  161.         {
  162.                 eOut_VariableCollectionName,
  163.         };
  164.  
  165.         explicit CFlowNode_SetIntegerDynamicResponseVariable(SActivationInfo* pActInfo)
  166.         {
  167.         }
  168.  
  169.         //////////////////////////////////////////////////////////////////////////
  170.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo)
  171.         {
  172.                 return new CFlowNode_SetIntegerDynamicResponseVariable(pActInfo);
  173.         }
  174.  
  175.         //////////////////////////////////////////////////////////////////////////
  176.  
  177.         virtual void GetConfiguration(SFlowNodeConfig& config)
  178.         {
  179.                 static const SInputPortConfig inputs[] =
  180.                 {
  181.                         InputPortConfig_Void("Set",               _HELP("Sets the given value to the specified variable. Will create a new variable collection or use existing")),
  182.                         InputPortConfig<EntityId>("EntityID",     _HELP("The ID of the entity to fetch the collection from.")),
  183.                         InputPortConfig<string>("CollectionName", _HELP("The name of a collection. Only used if no entity-id is specified, otherwise the entity-local variable collection will be used"),"CollectionName"),
  184.                         InputPortConfig<string>("VariableName",   _HELP("The name of the variable to set, will be created if not existing"),                                                             "VariableName"),
  185.                         InputPortConfig<int>("IntegerValue",      _HELP("A integer value to set to the variable"),                                                                                       "IntegerValue"),
  186.                         InputPortConfig<float>("ResetTime",       _HELP("The time after which the variable is reset to its previous value"),                                                             "ResetTime"),
  187.                         { 0 }
  188.                 };
  189.  
  190.                 static const SOutputPortConfig outputs[] = {
  191.                         OutputPortConfig<string>("UsedCollectionName", _HELP("Outputs the name of the variable-collection created or used")),
  192.                         { 0 }
  193.                 };
  194.  
  195.                 config.pInputPorts = inputs;
  196.                 config.pOutputPorts = outputs;
  197.                 config.sDescription = _HELP("This node is used to set a variable in a variable collection for the Dynamic Response System.");
  198.                 //config.nFlags |= EFLN_TARGET_ENTITY;
  199.                 config.SetCategory(EFLN_APPROVED);
  200.         }
  201.  
  202.         //////////////////////////////////////////////////////////////////////////
  203.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser)
  204.         {
  205.         }
  206.  
  207.         //////////////////////////////////////////////////////////////////////////
  208.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  209.         {
  210.                 switch (event)
  211.                 {
  212.                 case eFE_Initialize:
  213.                         {
  214.                                 break;
  215.                         }
  216.                 case eFE_Activate:
  217.                         {
  218.                                 if (IsPortActive(pActInfo, eIn_Set))
  219.                                 {
  220.                                         const string& variableName = GetPortString(pActInfo, eIn_VariableName);
  221.  
  222.                                         if (variableName.empty())
  223.                                         {
  224.                                                 CryWarning(VALIDATOR_MODULE_GAME, VALIDATOR_WARNING, "CAction:DRS_SetVariable: Cannot be executed without a Variable Name.");
  225.                                                 return;
  226.                                         }
  227.                                         const string& collectionName = GetPortString(pActInfo, eIn_VariableCollectionName);
  228.                                         EntityId entityID = GetPortEntityId(pActInfo, eIn_EntityID);
  229.  
  230.                                         DRS::IVariableCollection* variableCollection = GetVariableCollection(entityID, collectionName);
  231.  
  232.                                         if (variableCollection)
  233.                                         {
  234.                                                 SET_DRS_USER_SCOPED("SetDrsVariable FlowGraphNode");
  235.                                                 int newVariableValue = GetPortInt(pActInfo, eIn_IntegerValue);
  236.                                                 variableCollection->SetVariableValue(variableName, newVariableValue, true, GetPortFloat(pActInfo, eIn_ResetTime));
  237.                                                 ActivateOutput(pActInfo, eOut_VariableCollectionName, variableCollection->GetName().GetText());
  238.                                         }
  239.                                 }
  240.                                 break;
  241.                         }
  242.                 }
  243.         }
  244.  
  245.         //////////////////////////////////////////////////////////////////////////
  246.         virtual void GetMemoryUsage(ICrySizer* s) const
  247.         {
  248.                 s->Add(*this);
  249.         }
  250. };
  251.  
  252. //////////////////////////////////////////////////////////////////////////
  253. //////////////////////////////////////////////////////////////////////////
  254. //////////////////////////////////////////////////////////////////////////
  255.  
  256. class CFlowNode_SetStringDynamicResponseVariable : public CFlowBaseNode<eNCT_Instanced>
  257. {
  258. public:
  259.         enum EInputs
  260.         {
  261.                 eIn_Set,
  262.                 eIn_EntityID,
  263.                 eIn_VariableCollectionName,
  264.                 eIn_VariableName,
  265.                 eIn_StringValue,
  266.                 eIn_ResetTime,
  267.         };
  268.  
  269.         enum EOutputs
  270.         {
  271.                 eOut_VariableCollectionName,
  272.         };
  273.  
  274.         explicit CFlowNode_SetStringDynamicResponseVariable(SActivationInfo* pActInfo)
  275.         {
  276.         }
  277.  
  278.         //////////////////////////////////////////////////////////////////////////
  279.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo)
  280.         {
  281.                 return new CFlowNode_SetStringDynamicResponseVariable(pActInfo);
  282.         }
  283.  
  284.         //////////////////////////////////////////////////////////////////////////
  285.  
  286.         virtual void GetConfiguration(SFlowNodeConfig& config)
  287.         {
  288.                 static const SInputPortConfig inputs[] =
  289.                 {
  290.                         InputPortConfig_Void("Set",               _HELP("Sets the given value to the specified variable. Will create a new variable collection or use existing")),
  291.                         InputPortConfig<EntityId>("EntityID",     _HELP("The ID of the entity to fetch the collection from.")),
  292.                         InputPortConfig<string>("CollectionName", _HELP("The name of a collection. Only used if no entity-id is specified, otherwise the entity-local variable collection will be used"),"CollectionName"),
  293.                         InputPortConfig<string>("VariableName",   _HELP("The name of the variable to set, will be created if not existing"),                                                             "VariableName"),
  294.                         InputPortConfig<string>("StringValue",    _HELP("A string value to set to the variable"),                                                                                        "StringValue"),
  295.                         InputPortConfig<float>("ResetTime",       _HELP("The time after which the variable is reset to its previous value"),                                                             "ResetTime"),
  296.                         { 0 }
  297.                 };
  298.  
  299.                 static const SOutputPortConfig outputs[] = {
  300.                         OutputPortConfig<string>("UsedCollectionName", _HELP("Outputs the name of the variable-collection created or used")),
  301.                         { 0 }
  302.                 };
  303.  
  304.                 config.pInputPorts = inputs;
  305.                 config.pOutputPorts = outputs;
  306.                 config.sDescription = _HELP("This node is used to set a variable in a variable collection for the Dynamic Response System.");
  307.                 //config.nFlags |= EFLN_TARGET_ENTITY;
  308.                 config.SetCategory(EFLN_APPROVED);
  309.         }
  310.  
  311.         //////////////////////////////////////////////////////////////////////////
  312.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser)
  313.         {
  314.         }
  315.  
  316.         //////////////////////////////////////////////////////////////////////////
  317.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  318.         {
  319.                 switch (event)
  320.                 {
  321.                 case eFE_Initialize:
  322.                         {
  323.                                 break;
  324.                         }
  325.                 case eFE_Activate:
  326.                         {
  327.                                 if (IsPortActive(pActInfo, eIn_Set))
  328.                                 {
  329.                                         const string& variableName = GetPortString(pActInfo, eIn_VariableName);
  330.  
  331.                                         if (variableName.empty())
  332.                                         {
  333.                                                 CryWarning(VALIDATOR_MODULE_GAME, VALIDATOR_WARNING, "CAction:DRS_SetVariable: Cannot be executed without a Variable Name.");
  334.                                                 break;
  335.                                         }
  336.  
  337.                                         const string& collectionName = GetPortString(pActInfo, eIn_VariableCollectionName);
  338.                                         EntityId entityID = GetPortEntityId(pActInfo, eIn_EntityID);
  339.  
  340.                                         DRS::IVariableCollection* variableCollection = GetVariableCollection(entityID, collectionName);
  341.  
  342.                                         if (variableCollection)
  343.                                         {
  344.                                                 SET_DRS_USER_SCOPED("SetDrsVariable FlowGraphNode");
  345.                                                 const string& newVariableValue = GetPortString(pActInfo, eIn_StringValue);
  346.                                                 variableCollection->SetVariableValue(variableName, CHashedString(newVariableValue), true, GetPortFloat(pActInfo, eIn_ResetTime));
  347.                                                 ActivateOutput(pActInfo, eOut_VariableCollectionName, variableCollection->GetName().GetText());
  348.                                         }
  349.                                 }
  350.                                 break;
  351.                         }
  352.                 }
  353.         }
  354.  
  355.         //////////////////////////////////////////////////////////////////////////
  356.         virtual void GetMemoryUsage(ICrySizer* s) const
  357.         {
  358.                 s->Add(*this);
  359.         }
  360. };
  361.  
  362. #if !defined(IS_EAAS)
  363. REGISTER_FLOW_NODE("DynamicResponse:SetFloatVariable", CFlowNode_SetFloatDynamicResponseVariable);
  364. REGISTER_FLOW_NODE("DynamicResponse:SetIntegerVariable", CFlowNode_SetIntegerDynamicResponseVariable);
  365. REGISTER_FLOW_NODE("DynamicResponse:SetStringVariable", CFlowNode_SetStringDynamicResponseVariable);
  366. #endif
  367.  
downloadFlowDynamicResponseVariable.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