BVB Source Codes

CRYENGINE Show MaterialEffects.h Source code

Return Download CRYENGINE: download MaterialEffects.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH. All rights reserved.
  2. #pragma once
  3.  
  4. #include <CryAction/IMaterialEffects.h>
  5. #include <CryCore/Containers/CryListenerSet.h>
  6.  
  7. #include "MFXLibrary.h"
  8. #include "MFXContainer.h"
  9. #include "SurfacesLookupTable.h"
  10.  
  11. class CMaterialFGManager;
  12. class CScriptBind_MaterialEffects;
  13.  
  14. namespace MaterialEffectsUtils
  15. {
  16. class CVisualDebug;
  17. }
  18.  
  19. class CMaterialEffects : public IMaterialEffects
  20. {
  21. private:
  22.         friend class CScriptBind_MaterialEffects;
  23.  
  24.         static const int kMaxSurfaceCount = 255 + 1; // from SurfaceTypeManager.h, but will also work with any other number
  25.         typedef IEntityClass*                                                TPtrIndex;
  26.         typedef int                                                          TIndex;
  27.         typedef std::pair<TIndex, TIndex>                                    TIndexPair;
  28.  
  29.         typedef std::vector<TIndex>                                          TSurfaceIdToLookupTable;
  30.         typedef std::map<TMFXNameId, CMFXLibrary, stl::less_stricmp<string>> TFXLibrariesMap;
  31.         typedef std::map<const TPtrIndex, TIndex>                            TPointerToLookupTable;
  32.         typedef std::map<string, TIndex, stl::less_stricmp<string>>          TCustomNameToLookupTable;
  33.         typedef std::vector<TMFXContainerPtr>                                TMFXContainers;
  34.         typedef CListenerSet<IMaterialEffectsListener*>                      TEffectsListeners;
  35.  
  36.         struct SDelayedEffect
  37.         {
  38.                 SDelayedEffect()
  39.                         : m_delay(0.0f)
  40.                 {
  41.  
  42.                 }
  43.  
  44.                 SDelayedEffect(TMFXContainerPtr pEffectContainer, const SMFXRunTimeEffectParams& runtimeParams)
  45.                         : m_pEffectContainer(pEffectContainer)
  46.                         , m_effectRuntimeParams(runtimeParams)
  47.                         , m_delay(pEffectContainer->GetParams().delay)
  48.                 {
  49.                 }
  50.  
  51.                 void GetMemoryUsage(ICrySizer* pSizer) const
  52.                 {
  53.                         pSizer->AddObject(m_pEffectContainer);
  54.                 }
  55.  
  56.                 TMFXContainerPtr        m_pEffectContainer;
  57.                 SMFXRunTimeEffectParams m_effectRuntimeParams;
  58.                 float                   m_delay;
  59.         };
  60.  
  61.         typedef std::vector<SDelayedEffect> TDelayedEffects;
  62.  
  63. public:
  64.         CMaterialEffects();
  65.         virtual ~CMaterialEffects();
  66.  
  67.         // load flowgraph based effects
  68.         bool LoadFlowGraphLibs();
  69.  
  70.         // serialize
  71.         void Serialize(TSerialize ser);
  72.  
  73.         // load assets referenced by material effects.
  74.         void PreLoadAssets();
  75.  
  76.         // IMaterialEffects
  77.         virtual void                LoadFXLibraries();
  78.         virtual void                Reset(bool bCleanup);
  79.         virtual void                ClearDelayedEffects();
  80.         virtual TMFXEffectId        GetEffectIdByName(const char* libName, const char* effectName);
  81.         virtual TMFXEffectId        GetEffectId(int surfaceIndex1, int surfaceIndex2);
  82.         virtual TMFXEffectId        GetEffectId(const char* customName, int surfaceIndex2);
  83.         virtual TMFXEffectId        GetEffectId(IEntityClass* pEntityClass, int surfaceIndex2);
  84.         virtual SMFXResourceListPtr GetResources(TMFXEffectId effectId) const;
  85.         virtual bool                ExecuteEffect(TMFXEffectId effectId, SMFXRunTimeEffectParams& runtimeParams);
  86.         virtual void                StopEffect(TMFXEffectId effectId);
  87.         virtual int                 GetDefaultSurfaceIndex() { return m_defaultSurfaceId; }
  88.         virtual int                 GetDefaultCanopyIndex();
  89.         virtual bool                PlayBreakageEffect(ISurfaceType* pSurfaceType, const char* breakageType, const SMFXBreakageParams& breakageParams);
  90.         virtual void                SetCustomParameter(TMFXEffectId effectId, const char* customParameter, const SMFXCustomParamValue& customParameterValue);
  91.         virtual void                CompleteInit();
  92.         virtual void                ReloadMatFXFlowGraphs();
  93.         virtual int                 GetMatFXFlowGraphCount() const;
  94.         virtual IFlowGraphPtr       GetMatFXFlowGraph(int index, string* pFileName = NULL) const;
  95.         virtual IFlowGraphPtr       LoadNewMatFXFlowGraph(const string& filename);
  96.         virtual void                EnumerateEffectNames(EnumerateMaterialEffectsDataCallback& callback, const char* szLibraryName) const;
  97.         virtual void                EnumerateLibraryNames(EnumerateMaterialEffectsDataCallback& callback) const;
  98.         virtual void                LoadFXLibraryFromXMLInMemory(const char* szName, XmlNodeRef root);
  99.         virtual void                UnloadFXLibrariesWithPrefix(const char* szName);
  100.         virtual void                SetAnimFXEvents(IAnimFXEvents* pAnimEvents)                        { m_pAnimFXEvents = pAnimEvents; }
  101.         virtual IAnimFXEvents*      GetAnimFXEvents()                                                  { return m_pAnimFXEvents; }
  102.         virtual void                AddListener(IMaterialEffectsListener* pListener, const char* name) { m_listeners.Add(pListener, name); }
  103.         virtual void                RemoveListener(IMaterialEffectsListener* pListener)                { m_listeners.Remove(pListener); }
  104.         // ~IMaterialEffects
  105.  
  106.         void                GetMemoryUsage(ICrySizer* s) const;
  107.         void                NotifyFGHudEffectEnd(IFlowGraphPtr pFG);
  108.         void                Update(float frameTime);
  109.         void                SetUpdateMode(bool bMode);
  110.         CMaterialFGManager* GetFGManager() const { return m_pMaterialFGManager; }
  111.  
  112.         void                FullReload();
  113.  
  114. private:
  115.  
  116.         // Loading data from files
  117.         void LoadSpreadSheet();
  118.         void LoadFXLibrary(const char* name);
  119.  
  120.         // schedule effect
  121.         void TimedEffect(TMFXContainerPtr pEffectContainer, const SMFXRunTimeEffectParams& params);
  122.  
  123.         // index1 x index2 are used to lookup in m_matmat array
  124.         inline TMFXEffectId InternalGetEffectId(int index1, int index2) const
  125.         {
  126.                 const TMFXEffectId effectId = m_surfacesLookupTable.GetValue(index1, index2, InvalidEffectId);
  127.                 return effectId;
  128.         }
  129.  
  130.         inline TMFXContainerPtr InternalGetEffect(const char* libName, const char* effectName) const
  131.         {
  132.                 TFXLibrariesMap::const_iterator iter = m_mfxLibraries.find(CONST_TEMP_STRING(libName));
  133.                 if (iter != m_mfxLibraries.end())
  134.                 {
  135.                         const CMFXLibrary& mfxLibrary = iter->second;
  136.                         return mfxLibrary.FindEffectContainer(effectName);
  137.                 }
  138.                 return 0;
  139.         }
  140.  
  141.         inline TMFXContainerPtr InternalGetEffect(TMFXEffectId effectId) const
  142.         {
  143.                 assert(effectId < m_effectContainers.size());
  144.                 if (effectId < m_effectContainers.size())
  145.                         return m_effectContainers[effectId];
  146.                 return 0;
  147.         }
  148.  
  149.         inline TIndex SurfaceIdToMatrixEntry(int surfaceIndex)
  150.         {
  151.                 return (surfaceIndex >= 0 && surfaceIndex < m_surfaceIdToMatrixEntry.size()) ? m_surfaceIdToMatrixEntry[surfaceIndex] : 0;
  152.         }
  153.  
  154. private:
  155.  
  156.         int                 m_defaultSurfaceId;
  157.         int                 m_canopySurfaceId;
  158.         bool                m_bUpdateMode;
  159.         bool                m_bDataInitialized;
  160.         CMaterialFGManager* m_pMaterialFGManager;
  161.         IAnimFXEvents*      m_pAnimFXEvents;
  162.  
  163.         // other systems can respond to internal events
  164.         TEffectsListeners m_listeners;
  165.  
  166.         // The libraries we have loaded
  167.         TFXLibrariesMap m_mfxLibraries;
  168.  
  169.         // This maps a surface type to the corresponding column(==row) in the matrix
  170.         TSurfaceIdToLookupTable m_surfaceIdToMatrixEntry;
  171.  
  172.         // This maps custom pointers (entity classes)
  173.         TPointerToLookupTable m_ptrToMatrixEntryMap;
  174.  
  175.         // Converts custom tags to indices
  176.         TCustomNameToLookupTable m_customConvert;
  177.  
  178.         // Main lookup surface x surface -> effectId
  179.         MaterialEffectsUtils::SSurfacesLookupTable<TMFXEffectId> m_surfacesLookupTable;
  180.  
  181.         // All effect containers (indexed by TEffectId)
  182.         TMFXContainers m_effectContainers;
  183.  
  184.         // runtime effects which are delayed
  185.         TDelayedEffects m_delayedEffects;
  186.  
  187. #ifdef MATERIAL_EFFECTS_DEBUG
  188.         friend class MaterialEffectsUtils::CVisualDebug;
  189.  
  190.         MaterialEffectsUtils::CVisualDebug* m_pVisualDebug;
  191. #endif
  192. };
  193.  
downloadMaterialEffects.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