BVB Source Codes

CRYENGINE Show FlowAudioRtpcNode.cpp Source code

Return Download CRYENGINE: download FlowAudioRtpcNode.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. class CFlowNode_AudioRtpc final : public CFlowBaseNode<eNCT_Instanced>
  8. {
  9. public:
  10.  
  11.         explicit CFlowNode_AudioRtpc(SActivationInfo* pActInfo)
  12.                 : m_value(0.0f)
  13.         {}
  14.  
  15.         virtual ~CFlowNode_AudioRtpc() override = default;
  16.  
  17.         CFlowNode_AudioRtpc(CFlowNode_AudioRtpc const&) = delete;
  18.         CFlowNode_AudioRtpc(CFlowNode_AudioRtpc&&) = delete;
  19.         CFlowNode_AudioRtpc& operator=(CFlowNode_AudioRtpc const&) = delete;
  20.         CFlowNode_AudioRtpc& operator=(CFlowNode_AudioRtpc&&) = delete;
  21.  
  22.         //////////////////////////////////////////////////////////////////////////
  23.         virtual IFlowNodePtr Clone(SActivationInfo* pActInfo) override
  24.         {
  25.                 return new CFlowNode_AudioRtpc(pActInfo);
  26.         }
  27.  
  28.         //////////////////////////////////////////////////////////////////////////
  29.         enum INPUTS
  30.         {
  31.                 eIn_RtpcName,
  32.                 eIn_RtpcValue,
  33.         };
  34.  
  35.         enum OUTPUTS
  36.         {
  37.         };
  38.  
  39.         virtual void GetConfiguration(SFlowNodeConfig& config) override
  40.         {
  41.                 static const SInputPortConfig inputs[] =
  42.                 {
  43.                         InputPortConfig<string>("audioRTPC_Name", _HELP("RTPC name"),  "Name"),
  44.                         InputPortConfig<float>("value",           _HELP("RTPC value"), "Value"),
  45.                         { 0 }
  46.                 };
  47.  
  48.                 static const SOutputPortConfig outputs[] =
  49.                 {
  50.                         { 0 }
  51.                 };
  52.  
  53.                 config.pInputPorts = inputs;
  54.                 config.pOutputPorts = outputs;
  55.                 config.sDescription = _HELP("This node sets RTPC values.");
  56.                 config.nFlags |= EFLN_TARGET_ENTITY;
  57.                 config.SetCategory(EFLN_APPROVED);
  58.         }
  59.  
  60.         //////////////////////////////////////////////////////////////////////////
  61.         virtual void Serialize(SActivationInfo* pActInfo, TSerialize ser) override
  62.         {
  63.                 float fValue = m_value;
  64.                 ser.BeginGroup("FlowAudioRtpcNode");
  65.                 ser.Value("value", fValue);
  66.                 ser.EndGroup();
  67.  
  68.                 if (ser.IsReading())
  69.                 {
  70.                         SetValue(pActInfo->pEntity, fValue);
  71.                 }
  72.         }
  73.  
  74.         //////////////////////////////////////////////////////////////////////////
  75.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo) override
  76.         {
  77.                 switch (event)
  78.                 {
  79.                 case eFE_Initialize:
  80.                         {
  81.                                 Init(pActInfo);
  82.  
  83.                                 break;
  84.                         }
  85.                 case eFE_Activate:
  86.                         {
  87.                                 if (IsPortActive(pActInfo, eIn_RtpcValue))
  88.                                 {
  89.                                         SetValue(pActInfo->pEntity, GetPortFloat(pActInfo, eIn_RtpcValue));
  90.                                 }
  91.  
  92.                                 if (IsPortActive(pActInfo, eIn_RtpcName))
  93.                                 {
  94.                                         GetRtpcId(pActInfo);
  95.                                 }
  96.  
  97.                                 break;
  98.                         }
  99.                 }
  100.         }
  101.  
  102.         //////////////////////////////////////////////////////////////////////////
  103.         virtual void GetMemoryUsage(ICrySizer* s) const override
  104.         {
  105.                 s->Add(*this);
  106.         }
  107.  
  108. private:
  109.  
  110.         //////////////////////////////////////////////////////////////////////////
  111.         void GetRtpcId(SActivationInfo* const pActInfo)
  112.         {
  113.                 string const& rtpcName = GetPortString(pActInfo, eIn_RtpcName);
  114.  
  115.                 if (!rtpcName.empty())
  116.                 {
  117.                         gEnv->pAudioSystem->GetAudioRtpcId(rtpcName.c_str(), m_requestData.audioRtpcId);
  118.                 }
  119.         }
  120.  
  121.         //////////////////////////////////////////////////////////////////////////
  122.         void SetValue(IEntity* const pEntity, float const value)
  123.         {
  124.                 // Don't optimize here!
  125.                 // We always need to set the value as it could have been manipulated by another entity.
  126.                 m_value = value;
  127.  
  128.                 if (pEntity != nullptr)
  129.                 {
  130.                         SetOnProxy(pEntity, m_value);
  131.                 }
  132.                 else
  133.                 {
  134.                         SetOnGlobalObject(m_value);
  135.                 }
  136.         }
  137.  
  138.         //////////////////////////////////////////////////////////////////////////
  139.         void Init(SActivationInfo* const pActInfo)
  140.         {
  141.                 if (gEnv->pAudioSystem != nullptr)
  142.                 {
  143.                         GetRtpcId(pActInfo);
  144.  
  145.                         m_request.pData = &m_requestData;
  146.  
  147.                         SetValue(pActInfo->pEntity, 0.0f);
  148.                 }
  149.         }
  150.  
  151.         //////////////////////////////////////////////////////////////////////////
  152.         void SetOnProxy(IEntity* const pEntity, float const value)
  153.         {
  154.                 IEntityAudioComponent* const pIEntityAudioComponent = pEntity->GetOrCreateComponent<IEntityAudioComponent>();
  155.  
  156.                 if (pIEntityAudioComponent != nullptr)
  157.                 {
  158.                         pIEntityAudioComponent->SetRtpcValue(m_requestData.audioRtpcId, value);
  159.                 }
  160.         }
  161.  
  162.         //////////////////////////////////////////////////////////////////////////
  163.         void SetOnGlobalObject(float const value)
  164.         {
  165.                 m_requestData.value = value;
  166.                 gEnv->pAudioSystem->PushRequest(m_request);
  167.         }
  168.  
  169.         float         m_value;
  170.         SAudioRequest m_request;
  171.         SAudioObjectRequestData<eAudioObjectRequestType_SetRtpcValue> m_requestData;
  172. };
  173.  
  174. REGISTER_FLOW_NODE("Audio:Rtpc", CFlowNode_AudioRtpc);
  175.  
downloadFlowAudioRtpcNode.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