BVB Source Codes

CRYENGINE Show ActionScope.h Source code

Return Download CRYENGINE: download ActionScope.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. //
  4. ////////////////////////////////////////////////////////////////////////////
  5. #ifndef __ACTIONSCOPE_H__
  6. #define __ACTIONSCOPE_H__
  7.  
  8. #include "ICryMannequin.h"
  9. #include "ActionController.h"
  10.  
  11. struct SScopeContext
  12. {
  13.         SScopeContext()
  14.                 : id(0)
  15.                 , mask(0)
  16.                 , pDatabase(NULL)
  17.                 , pCharInst(NULL)
  18.                 , entityId(0)
  19.                 , pCachedEntity(NULL)
  20.                 , pEnslavedController(NULL)
  21.         {
  22.         }
  23.  
  24.         void Reset(uint32 scopeContextId)
  25.         {
  26.                 id = scopeContextId;
  27.                 mask = (1 << scopeContextId);
  28.                 pDatabase = NULL;
  29.                 pCharInst = NULL;
  30.                 entityId = 0;
  31.                 pCachedEntity = NULL;
  32.                 pEnslavedController = NULL;
  33.         }
  34.  
  35.         // HasInvalidCharInst returns true when
  36.         //   character instance is not NULL
  37.         // and
  38.         //   the character instance is not part of the entity
  39.         bool HasInvalidCharInst() const;
  40.  
  41.         // HasInvalidEntity returns true when
  42.         //   entityId is not 0
  43.         // and
  44.         //   the cachedEntity is that entity
  45.         bool HasInvalidEntity() const;
  46.  
  47.         uint32                         id;
  48.         uint32                         mask;
  49.         const CAnimationDatabase*      pDatabase;
  50.         _smart_ptr<ICharacterInstance> pCharInst;
  51.         EntityId                       entityId;
  52.         IEntity*                       pCachedEntity;
  53.         CActionController*             pEnslavedController;
  54.         TagState                       sharedTags;
  55.         TagState                       setTags;
  56. };
  57.  
  58. class CActionScope : public IScope
  59. {
  60. public:
  61.         friend class CActionController;
  62.  
  63.         CActionScope(const char* _name, uint32 scopeID, CActionController& actionController, SAnimationContext& _context, SScopeContext& _scopeContext, int layer, int numLayers, const TagState& additionalTags);
  64.  
  65.         // -- IScope implementation -------------------------------------------------
  66.         virtual ~CActionScope();
  67.  
  68.         virtual const char* GetName()
  69.         {
  70.                 return m_name.c_str();
  71.         }
  72.  
  73.         virtual uint32 GetID()
  74.         {
  75.                 return m_id;
  76.         }
  77.  
  78.         virtual ICharacterInstance* GetCharInst()
  79.         {
  80.                 return m_scopeContext.pCharInst;
  81.         }
  82.  
  83.         virtual IActionController& GetActionController() const
  84.         {
  85.                 return (IActionController&)m_actionController;
  86.         }
  87.  
  88.         virtual SAnimationContext& GetContext() const
  89.         {
  90.                 return m_context;
  91.         }
  92.  
  93.         virtual uint32 GetContextID() const
  94.         {
  95.                 return m_scopeContext.id;
  96.         }
  97.  
  98.         virtual const IAnimationDatabase& GetDatabase() const
  99.         {
  100.                 CRY_ASSERT(m_scopeContext.pDatabase);
  101.                 return (const IAnimationDatabase&)*m_scopeContext.pDatabase;
  102.         }
  103.  
  104.         virtual bool HasDatabase() const
  105.         {
  106.                 return(m_scopeContext.pDatabase != NULL);
  107.         }
  108.  
  109.         virtual IEntity& GetEntity() const
  110.         {
  111.                 CRY_ASSERT(m_scopeContext.pCachedEntity);
  112.                 return *m_scopeContext.pCachedEntity;
  113.         }
  114.  
  115.         virtual EntityId GetEntityId() const
  116.         {
  117.                 return m_scopeContext.entityId;
  118.         }
  119.  
  120.         virtual uint32 GetTotalLayers() const
  121.         {
  122.                 return m_numLayers;
  123.         }
  124.         virtual uint32 GetBaseLayer() const
  125.         {
  126.                 return m_layer;
  127.         }
  128.         virtual IAction* GetAction() const
  129.         {
  130.                 return m_pAction.get();
  131.         }
  132.  
  133.         virtual void              IncrementTime(float timeDelta);
  134.  
  135.         virtual const CAnimation* GetTopAnim(int layer) const;
  136.  
  137.         virtual CAnimation*       GetTopAnim(int layer);
  138.  
  139.         virtual void              ApplyAnimWeight(uint32 layer, float weight);
  140.  
  141.         virtual bool              IsDifferent(const FragmentID aaID, const TagState& fragmentTags, const TagID subContext = TAG_ID_INVALID) const;
  142.  
  143.         virtual ILINE FragmentID  GetLastFragmentID() const
  144.         {
  145.                 return m_lastFragmentID;
  146.         }
  147.  
  148.         virtual ILINE const SFragTagState& GetLastTagState() const
  149.         {
  150.                 return m_lastFragSelection.tagState;
  151.         }
  152.  
  153.         virtual float    CalculateFragmentTimeRemaining() const;
  154.  
  155.         virtual float    CalculateFragmentDuration(const CFragment& fragment) const;
  156.  
  157.         virtual void     _FlushFromEditor()          { Flush(FM_Normal); }
  158.  
  159.         virtual float    GetFragmentDuration() const { return m_fragmentDuration; }
  160.  
  161.         virtual float    GetFragmentTime() const     { return m_fragmentTime; }
  162.  
  163.         virtual TagState GetAdditionalTags() const   { return m_additionalTags; }
  164.  
  165.         virtual void     MuteLayers(uint32 mutedAnimLayerMask, uint32 mutedProcLayerMask);
  166.  
  167.         // -- ~IScope implementation ------------------------------------------------
  168.  
  169.         bool NeedsInstall(uint32 currentContextMask) const
  170.         {
  171.                 return (m_additionalTags != TAG_STATE_EMPTY) || ((currentContextMask & m_scopeContext.mask) == 0);
  172.         }
  173.  
  174.         bool  InstallAnimation(int animID, const CryCharAnimationParams& animParams);
  175.         bool  InstallAnimation(const SAnimationEntry& animEntry, int layer, const SAnimBlend& animBlend);
  176.         void  StopAnimationOnLayer(uint32 layer, float blendTime);
  177.         float GetFragmentStartTime() const;
  178.         bool  CanInstall(EPriorityComparison priorityComparison, FragmentID fragID, const SFragTagState& fragTagState, bool isRequeue, float& timeRemaining) const;
  179.         void  Install(IAction& action)
  180.         {
  181.                 m_pAction = &action;
  182.                 m_speedBias = action.GetSpeedBias();
  183.                 m_animWeight = action.GetAnimWeight();
  184.         }
  185.         void         UpdateSequencers(float timePassed);
  186.         void         Update(float timePassed);
  187.         void         ClearSequencers();
  188.         void         Flush(EFlushMethod flushMethod);
  189.         void         QueueAnimFromSequence(uint32 layer, uint32 pos, bool isPersistent);
  190.         void         QueueProcFromSequence(uint32 layer, uint32 pos);
  191.         int          GetNumAnimsInSequence(uint32 layer) const;
  192.         bool         PlayPendingAnim(uint32 layer, float timePassed = 0.0f);
  193.         bool         PlayPendingProc(uint32 layer);
  194.         bool         QueueFragment(FragmentID aaID, const SFragTagState& fragTagState, uint32 optionIdx = OPTION_IDX_RANDOM, float startTime = 0.0f, uint32 userToken = 0, bool isRootScope = true, bool isHigherPriority = false, bool principleContext = true);
  195.         void         BlendOutFragments();
  196.  
  197.         ILINE uint32 GetContextMask() const
  198.         {
  199.                 return m_scopeContext.mask;
  200.         }
  201.  
  202.         ILINE uint32 GetLastOptionIdx() const
  203.         {
  204.                 return m_lastFragSelection.optionIdx;
  205.         }
  206.  
  207.         ILINE bool HasFragment() const
  208.         {
  209.                 return ((m_sequenceFlags & eSF_Fragment) != 0);
  210.         }
  211.         ILINE bool HasTransition() const
  212.         {
  213.                 return ((m_sequenceFlags & eSF_Transition) != 0);
  214.         }
  215.         ILINE bool HasOutroTransition() const
  216.         {
  217.                 return ((m_sequenceFlags & eSF_TransitionOutro) != 0);
  218.         }
  219.         ILINE float GetTransitionDuration() const
  220.         {
  221.                 return m_transitionDuration;
  222.         }
  223.  
  224.         ILINE float GetTransitionOutroDuration() const
  225.         {
  226.                 return m_transitionOutroDuration;
  227.         }
  228.         ILINE const IActionPtr& GetPlayingAction()
  229.         {
  230.                 return m_pExitingAction ? m_pExitingAction : m_pAction;
  231.         }
  232.  
  233.         ILINE IActionController* GetEnslavedActionController() const
  234.         {
  235.                 return m_scopeContext.pEnslavedController;
  236.         }
  237.  
  238.         void InstallProceduralClip(const SProceduralEntry& proc, int layer, const SAnimBlend& blend, float duration);
  239.  
  240.         void Pause();
  241.         void Resume(float forcedBlendOutTime, uint32 resumeFlags);
  242.  
  243. private:
  244.         void InitAnimationParams(const SAnimationEntry& animEntry, const uint32 sequencerLayer, const SAnimBlend& animBlend, CryCharAnimationParams& paramsOut);
  245.         void FillBlendQuery(SBlendQuery& query, FragmentID fragID, const SFragTagState& fragTagState, bool isHigherPriority, float* pLoopDuration) const;
  246.         void ClipInstalled(uint8 clipType);
  247.  
  248. private:
  249.         CActionScope();
  250.         CActionScope(const CActionScope&);
  251.         CActionScope& operator=(const CActionScope&);
  252.  
  253. private:
  254.  
  255.         enum ESequencerFlags
  256.         {
  257.                 eSF_Queued      = BIT(0),
  258.                 eSF_BlendingOut = BIT(1)
  259.         };
  260.  
  261.         struct SSequencer
  262.         {
  263.  
  264.                 SSequencer()
  265.                         :
  266.                         installTime(-1.0f),
  267.                         referenceTime(-1.0f),
  268.                         savedAnimNormalisedTime(-1),
  269.                         pos(0),
  270.                         flags(0)
  271.                 {
  272.                 }
  273.  
  274.                 TAnimClipSequence sequence;
  275.                 SAnimBlend        blend;
  276.                 float             installTime; // time in seconds until installation
  277.                 float             referenceTime;
  278.                 float             savedAnimNormalisedTime;
  279.                 uint8             pos;
  280.                 uint8             flags;
  281.         };
  282.  
  283.         struct SProcSequencer
  284.         {
  285.                 SProcSequencer()
  286.                         :
  287.                         installTime(-1.0f),
  288.                         pos(0),
  289.                         flags(0)
  290.                 {
  291.                 }
  292.  
  293.                 TProcClipSequence                sequence;
  294.                 SAnimBlend                       blend;
  295.                 float                            installTime;
  296.                 std::shared_ptr<IProceduralClip> proceduralClip;
  297.                 uint8                            pos;
  298.                 uint8                            flags;
  299.         };
  300.  
  301.         string                      m_name;
  302.         uint32                      m_id;
  303.         SAnimationContext&          m_context;
  304.         SScopeContext&              m_scopeContext;
  305.         CActionController&          m_actionController;
  306.         int                         m_layer;
  307.         uint32                      m_numLayers;
  308.         SSequencer*                 m_layerSequencers;
  309.         std::vector<SProcSequencer> m_procSequencers;
  310.         float                       m_speedBias;
  311.         float                       m_animWeight;
  312.         float                       m_timeIncrement;
  313.         TagState                    m_additionalTags;
  314.         mutable TagState            m_cachedFragmentTags;
  315.         mutable TagState            m_cachedContextStateMask;
  316.         mutable FragmentID          m_cachedaaID;
  317.         mutable uint32              m_cachedTagSetIdx;
  318.         FragmentID                  m_lastFragmentID;
  319.         SFragmentSelection          m_lastFragSelection;
  320.         SFragTagState               m_lastQueueTagState;
  321.         uint32                      m_sequenceFlags;
  322.         float                       m_fragmentTime;
  323.         float                       m_fragmentDuration;
  324.         float                       m_transitionOutroDuration;
  325.         float                       m_transitionDuration;
  326.         float                       m_blendOutDuration;
  327.         EClipType                   m_partTypes[SFragmentData::PART_TOTAL];
  328.  
  329.         float                       m_lastNormalisedTime;
  330.         float                       m_normalisedTime;
  331.  
  332.         IActionPtr                  m_pAction;
  333.         IActionPtr                  m_pExitingAction;
  334.         uint32                      m_userToken; // token that will be passed when installing animations
  335.  
  336.         uint32                      m_mutedAnimLayerMask;
  337.         uint32                      m_mutedProcLayerMask;
  338.  
  339.         bool                        m_isOneShot;
  340.         bool                        m_fragmentInstalled;
  341. };
  342.  
  343. #endif //!__ACTIONSCOPE_H__
  344.  
downloadActionScope.h 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