BVB Source Codes

CRYENGINE Show ProceduralClipParams.cpp Source code

Return Download CRYENGINE: download ProceduralClipParams.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. //
  4. ////////////////////////////////////////////////////////////////////////////
  5.  
  6. #include "StdAfx.h"
  7.  
  8. #include "ICryMannequin.h"
  9. #include <CryExtension/ClassWeaver.h>
  10. #include <CryExtension/CryCreateClassInstance.h>
  11. #include <Mannequin/Serialization.h>
  12.  
  13. struct SSetParamParams : public IProceduralParams
  14. {
  15.         SProcDataCRC paramName;
  16.         float        target;
  17.         float        exitTarget;
  18.  
  19.         SSetParamParams()
  20.                 : target(0.f)
  21.                 , exitTarget(1.f)
  22.         {
  23.         }
  24.  
  25.         virtual void Serialize(Serialization::IArchive& ar)
  26.         {
  27.                 ar(paramName, "ParamName", "Param Name");
  28.                 ar(target, "Target", "Target");
  29.                 ar(exitTarget, "ExitTarget", "Exit Target");
  30.         }
  31. };
  32.  
  33. struct SParamTarget
  34. {
  35.         SParamTarget(float _target, float _start, float _blend)
  36.                 : targetValue(_target)
  37.                 , startValue(_start)
  38.                 , blendRate(_blend)
  39.                 , currentFraction(0.f)
  40.         {}
  41.         float targetValue;
  42.         float startValue;
  43.         float blendRate;
  44.         float currentFraction;
  45. };
  46.  
  47. class CProceduralContext_SetParam : public IProceduralContext
  48. {
  49. private:
  50.         typedef IProceduralContext BaseClass;
  51.  
  52.         virtual ~CProceduralContext_SetParam() {}
  53.  
  54. public:
  55.         PROCEDURAL_CONTEXT(CProceduralContext_SetParam, "SetParamContext", 0xC6C0871257814854, 0xADC56AB4252834BD);
  56.  
  57.         virtual void Update(float timePassed) override
  58.         {
  59.                 VectorMap<uint32, SParamTarget>::iterator it = m_paramTargets.begin();
  60.  
  61.                 while (it != m_paramTargets.end())
  62.                 {
  63.                         float currentFraction = min(1.f, it->second.currentFraction + (it->second.blendRate * timePassed));
  64.                         float newValue = LERP(it->second.startValue, it->second.targetValue, currentFraction);
  65.  
  66.                         m_actionController->SetParam(it->first, newValue);
  67.  
  68.                         if (currentFraction >= 1.f)
  69.                         {
  70.                                 it = m_paramTargets.erase(it);
  71.                         }
  72.                         else
  73.                         {
  74.                                 it->second.currentFraction = currentFraction;
  75.                                 ++it;
  76.                         }
  77.                 }
  78.         }
  79.  
  80.         void SetParamTarget(uint32 paramCRC, float paramTarget, float blendRate)
  81.         {
  82.                 VectorMap<uint32, SParamTarget>::iterator it = m_paramTargets.find(paramCRC);
  83.  
  84.                 if (blendRate < FLT_MAX)
  85.                 {
  86.                         if (it != m_paramTargets.end())
  87.                         {
  88.                                 it->second.targetValue = paramTarget;
  89.                                 it->second.blendRate = blendRate;
  90.                                 it->second.currentFraction = 0.f;
  91.  
  92.                                 m_actionController->GetParam(paramCRC, it->second.startValue);
  93.                         }
  94.                         else
  95.                         {
  96.                                 SParamTarget newParamTarget(paramTarget, 0.f, blendRate);
  97.                                 m_actionController->GetParam(paramCRC, newParamTarget.startValue);
  98.  
  99.                                 m_paramTargets.insert(VectorMap<uint32, SParamTarget>::value_type(paramCRC, newParamTarget));
  100.                         }
  101.                 }
  102.                 else
  103.                 {
  104.                         if (it != m_paramTargets.end())
  105.                         {
  106.                                 m_paramTargets.erase(it);
  107.                         }
  108.  
  109.                         m_actionController->SetParam(paramCRC, paramTarget);
  110.                 }
  111.         }
  112.  
  113. private:
  114.         VectorMap<uint32, SParamTarget> m_paramTargets;
  115. };
  116.  
  117. CRYREGISTER_CLASS(CProceduralContext_SetParam);
  118.  
  119. class CProceduralClipSetParam : public TProceduralContextualClip<CProceduralContext_SetParam, SSetParamParams>
  120. {
  121. public:
  122.         CProceduralClipSetParam();
  123.  
  124.         virtual void OnEnter(float blendTime, float duration, const SSetParamParams& params)
  125.         {
  126.                 float blendRate = blendTime > 0.f ? __fres(blendTime) : FLT_MAX;
  127.  
  128.                 m_context->SetParamTarget(params.paramName.crc, params.target, blendRate);
  129.  
  130.                 m_paramCRC = params.paramName.crc;
  131.                 m_exitTarget = params.exitTarget;
  132.         }
  133.  
  134.         virtual void OnExit(float blendTime)
  135.         {
  136.                 float blendRate = blendTime > 0.f ? __fres(blendTime) : FLT_MAX;
  137.                 m_context->SetParamTarget(m_paramCRC, m_exitTarget, blendRate);
  138.         }
  139.  
  140.         virtual void Update(float timePassed)
  141.         {
  142.         }
  143.  
  144. protected:
  145.         uint32 m_paramCRC;
  146.         float  m_exitTarget;
  147. };
  148.  
  149. CProceduralClipSetParam::CProceduralClipSetParam() : m_paramCRC(0), m_exitTarget(0.f)
  150. {
  151. }
  152.  
  153. REGISTER_PROCEDURAL_CLIP(CProceduralClipSetParam, "SetParam");
  154.  
downloadProceduralClipParams.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