BVB Source Codes

CRYENGINE Show MultiplexerNode.cpp Source code

Return Download CRYENGINE: download MultiplexerNode.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.  
  7. //////////////////////////////////////////////////////////////////////////
  8. class CMultiplexer_Node : public CFlowBaseNode<eNCT_Singleton>
  9. {
  10.         enum TriggerMode
  11.         {
  12.                 eTM_Always = 0,
  13.                 eTM_PortsOnly,
  14.                 eTM_IndexOnly,
  15.         };
  16.  
  17. public:
  18.         CMultiplexer_Node(SActivationInfo* pActInfo) {};
  19.         virtual void GetConfiguration(SFlowNodeConfig& config)
  20.         {
  21.                 static const SInputPortConfig in_config[] = {
  22.                         InputPortConfig<int>("Index",    _HELP("Index from 0 to 7")),
  23.                         InputPortConfig<int>("Mode",     eTM_Always,                 _HELP("IndexOnly: Only [Index] triggers output.\nPortsOnly: Only Port[Index] triggers output.\nAlways: Both [Index] and Port[Index] trigger output."),0, _UICONFIG("enum_int:Always=0,PortsOnly=1,IndexOnly=2")),
  24.                         InputPortConfig_AnyType("Port0", _HELP("Input Port 0")),
  25.                         InputPortConfig_AnyType("Port1", _HELP("Input Port 1")),
  26.                         InputPortConfig_AnyType("Port2", _HELP("Input Port 2")),
  27.                         InputPortConfig_AnyType("Port3", _HELP("Input Port 3")),
  28.                         InputPortConfig_AnyType("Port4", _HELP("Input Port 4")),
  29.                         InputPortConfig_AnyType("Port5", _HELP("Input Port 5")),
  30.                         InputPortConfig_AnyType("Port6", _HELP("Input Port 6")),
  31.                         InputPortConfig_AnyType("Port7", _HELP("Input Port 7")),
  32.                         { 0 }
  33.                 };
  34.                 static const SOutputPortConfig out_config[] = {
  35.                         OutputPortConfig_AnyType("out", _HELP("multiplexer output"), _HELP("Output")),
  36.                         { 0 }
  37.                 };
  38.                 config.sDescription = _HELP("Selects one of the inputs using the Index and sends it to the output. 3 Different modes!\nIndexOnly: Only [Index] triggers output.\nPortsOnly: Only Port[Index] triggers output.\nAlways: Both [Index] and Port[Index] trigger output.");
  39.                 config.pInputPorts = in_config;
  40.                 config.pOutputPorts = out_config;
  41.                 config.SetCategory(EFLN_APPROVED); // POLICY CHANGE: Should we output on Initialize?
  42.         }
  43.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  44.         {
  45.                 switch (event)
  46.                 {
  47.                 case eFE_Activate:
  48.                 case eFE_Initialize:
  49.                         {
  50.                                 const int mode = GetPortInt(pActInfo, 1);
  51.                                 if (event == eFE_Initialize && mode == eTM_Always)
  52.                                         return;
  53.  
  54.                                 // initialize & always -> no trigger, why?
  55.                                 // initialize & ports only -> same as activate
  56.                                 // initialize & index only -> same as activate
  57.  
  58.                                 // activate & always: trigger if Port[Index] or Index is activated
  59.                                 // activate & port only: trigger only if Port[Index] is activated
  60.                                 // activate & index only: trigger only if Index is activated
  61.  
  62.                                 const int port = (GetPortInt(pActInfo, 0) & 0x07) + 2;
  63.                                 const bool bPortActive = IsPortActive(pActInfo, port);
  64.                                 const bool bIndexActive = IsPortActive(pActInfo, 0);
  65.  
  66.                                 if (mode == eTM_IndexOnly && !bIndexActive)
  67.                                         return;
  68.                                 else if (mode == eTM_PortsOnly && !bPortActive)
  69.                                         return;
  70.                                 ActivateOutput(pActInfo, 0, pActInfo->pInputPorts[port]);
  71.                         }
  72.                 }
  73.                 ;
  74.         };
  75.  
  76.         virtual void GetMemoryUsage(ICrySizer* s) const
  77.         {
  78.                 s->Add(*this);
  79.         }
  80. };
  81.  
  82. //////////////////////////////////////////////////////////////////////////
  83. class CDeMultiplexer_Node : public CFlowBaseNode<eNCT_Singleton>
  84. {
  85.         enum TriggerMode
  86.         {
  87.                 eTM_Always = 0,
  88.                 eTM_InputOnly,
  89.                 eTM_IndexOnly,
  90.         };
  91. public:
  92.         CDeMultiplexer_Node(SActivationInfo* pActInfo) {};
  93.         virtual void GetConfiguration(SFlowNodeConfig& config)
  94.         {
  95.                 static const SInputPortConfig in_config[] = {
  96.                         InputPortConfig<int>("Index",    _HELP("Select Output port index from 0 to 7")),
  97.                         InputPortConfig<int>("Mode",     eTM_Always,                                    _HELP("InputOnly: Only [Input] triggers output.\nIndexOnly: Only [Index] triggers output.\nBoth: Both [Input] and [Index] trigger output."),0, _UICONFIG("enum_int:Always=0,InputOnly=1,IndexOnly=2")),
  98.                         InputPortConfig_AnyType("Input", _HELP("Input port")),
  99.                         { 0 }
  100.                 };
  101.                 static const SOutputPortConfig out_config[] = {
  102.                         OutputPortConfig_AnyType("Port0", _HELP("Output Port 0")),
  103.                         OutputPortConfig_AnyType("Port1", _HELP("Output Port 1")),
  104.                         OutputPortConfig_AnyType("Port2", _HELP("Output Port 2")),
  105.                         OutputPortConfig_AnyType("Port3", _HELP("Output Port 3")),
  106.                         OutputPortConfig_AnyType("Port4", _HELP("Output Port 4")),
  107.                         OutputPortConfig_AnyType("Port5", _HELP("Output Port 5")),
  108.                         OutputPortConfig_AnyType("Port6", _HELP("Output Port 6")),
  109.                         OutputPortConfig_AnyType("Port7", _HELP("Output Port 7")),
  110.                         { 0 }
  111.                 };
  112.                 config.sDescription = _HELP("Pushes the input to the selected (via Index) output port. 3 different modes:\nInputOnly: Only [Input] triggers output.\nIndexOnly: Only [Index] triggers output.\nBoth: Both [Input] and [Index] trigger output.");
  113.                 config.pInputPorts = in_config;
  114.                 config.pOutputPorts = out_config;
  115.                 config.SetCategory(EFLN_APPROVED); // POLICY CHANGE: Should we output on Initialize?
  116.         }
  117.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  118.         {
  119.                 switch (event)
  120.                 {
  121.                 case eFE_Activate:
  122.                 case eFE_Initialize:
  123.                         {
  124.                                 const int mode = GetPortInt(pActInfo, 1);
  125.                                 if (event == eFE_Initialize && mode == eTM_Always)
  126.                                         return;
  127.                                 const bool bIndexActive = IsPortActive(pActInfo, 0);
  128.                                 const bool bInputActive = IsPortActive(pActInfo, 2);
  129.                                 if (mode == eTM_IndexOnly && !bIndexActive)
  130.                                         return;
  131.                                 if (mode == eTM_InputOnly && !bInputActive)
  132.                                         return;
  133.                                 const int port = (GetPortInt(pActInfo, 0) & 0x07);
  134.                                 ActivateOutput(pActInfo, port, GetPortAny(pActInfo, 2));
  135.                         }
  136.                 }
  137.                 ;
  138.         };
  139.  
  140.         virtual void GetMemoryUsage(ICrySizer* s) const
  141.         {
  142.                 s->Add(*this);
  143.         }
  144. };
  145.  
  146. REGISTER_FLOW_NODE("Logic:Multiplexer", CMultiplexer_Node);
  147. REGISTER_FLOW_NODE("Logic:DeMultiplexer", CDeMultiplexer_Node);
  148.  
downloadMultiplexerNode.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