BVB Source Codes

CRYENGINE Show FlowSystem.h Source code

Return Download CRYENGINE: download FlowSystem.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __FLOWSYSTEM_H__
  4. #define __FLOWSYSTEM_H__
  5.  
  6. #pragma once
  7.  
  8. #include <CryFlowGraph/IFlowSystem.h>
  9. #include "FlowSystemCVars.h"
  10. #include <CryCore/Containers/CryListenerSet.h>
  11.  
  12. class CFlowGraphBase;
  13. class CFlowGraphModuleManager;
  14.  
  15. struct CFlowSystemContainer : public IFlowSystemContainer
  16. {
  17.         virtual void           AddItem(TFlowInputData item);
  18.         virtual void           AddItemUnique(TFlowInputData item);
  19.  
  20.         virtual void           RemoveItem(TFlowInputData item);
  21.  
  22.         virtual TFlowInputData GetItem(int i);
  23.  
  24.         virtual void           RemoveItemAt(int i);
  25.         virtual int            GetItemCount() const;
  26.  
  27.         virtual void           Clear();
  28.  
  29.         virtual void           GetMemoryUsage(ICrySizer* s) const;
  30.  
  31.         virtual void           Serialize(TSerialize ser);
  32. private:
  33.         DynArray<TFlowInputData> m_container;
  34. };
  35.  
  36. class CFlowSystem : public IFlowSystem, public IEntitySystemSink
  37. {
  38. public:
  39.         CFlowSystem();
  40.         ~CFlowSystem();
  41.  
  42.         // IFlowSystem
  43.         virtual void                     Release();
  44.         virtual void                     Update();
  45.         virtual void                     Reset(bool unload);
  46.         virtual void                     ReloadAllNodeTypes();
  47.         virtual IFlowGraphPtr            CreateFlowGraph();
  48.         virtual TFlowNodeTypeId          RegisterType(const char* type, IFlowNodeFactoryPtr factory);
  49.         virtual bool                     UnregisterType(const char* typeName);
  50.         virtual bool                     HasRegisteredDefaultFlowNodes() { return m_bRegisteredDefaultNodes; }
  51.         virtual const char*              GetTypeName(TFlowNodeTypeId typeId);
  52.         virtual TFlowNodeTypeId          GetTypeId(const char* typeName);
  53.         virtual IFlowNodeTypeIteratorPtr CreateNodeTypeIterator();
  54.         virtual void                     RegisterInspector(IFlowGraphInspectorPtr pInspector, IFlowGraphPtr pGraph = 0);
  55.         virtual void                     UnregisterInspector(IFlowGraphInspectorPtr pInspector, IFlowGraphPtr pGraph = 0);
  56.         virtual void                     EnableInspecting(bool bEnable) { m_bInspectingEnabled = bEnable; }
  57.         virtual bool                     IsInspectingEnabled() const    { return m_bInspectingEnabled; }
  58.         virtual IFlowGraphInspectorPtr   GetDefaultInspector() const    { return m_pDefaultInspector; }
  59.         virtual IFlowGraph*              GetGraphById(TFlowGraphId graphId);
  60.         virtual void                     OnEntityIdChanged(EntityId oldId, EntityId newId);
  61.         virtual void                     GetMemoryUsage(ICrySizer* s) const;
  62.  
  63.         virtual bool                     CreateContainer(TFlowSystemContainerId id);
  64.         virtual void                     DeleteContainer(TFlowSystemContainerId id);
  65.         virtual IFlowSystemContainerPtr  GetContainer(TFlowSystemContainerId id);
  66.  
  67.         virtual void                     Serialize(TSerialize ser);
  68.         // ~IFlowSystem
  69.  
  70.         // TODO Make a single point of entry for this and the AIProxyManager to share?
  71.         // IEntitySystemSink
  72.         virtual bool OnBeforeSpawn(SEntitySpawnParams& params)      { return true; }
  73.         virtual void OnSpawn(IEntity* pEntity, SEntitySpawnParams& params);
  74.         virtual bool OnRemove(IEntity* pEntity)                     { return true; }
  75.         virtual void OnReused(IEntity* pEntity, SEntitySpawnParams& params);
  76.         virtual void OnEvent(IEntity* pEntity, SEntityEvent& event) {}
  77.         //~IEntitySystemSink
  78.  
  79.         IFlowNodePtr                   CreateNodeOfType(IFlowNode::SActivationInfo*, TFlowNodeTypeId typeId);
  80.         void                           NotifyCriticalLoadingError() { m_criticalLoadingErrorHappened = true; }
  81.  
  82.         void                           PreInit();
  83.         void                           Init();
  84.         void                           Shutdown();
  85.         void                           Enable(bool enable) { m_cVars.m_enableUpdates = enable; }
  86.  
  87.         TFlowGraphId                   RegisterGraph(CFlowGraphBase* pGraph, const char* debugName);
  88.         void                           UnregisterGraph(CFlowGraphBase* pGraph);
  89.  
  90.         CFlowGraphModuleManager*       GetModuleManager();
  91.         const CFlowGraphModuleManager* GetModuleManager() const;
  92.  
  93.         IFlowGraphModuleManager*       GetIModuleManager();
  94.  
  95.         // resembles IFlowGraphInspector currently
  96.         void NotifyFlow(CFlowGraphBase* pGraph, const SFlowAddress from, const SFlowAddress to);
  97.         void NotifyProcessEvent(CFlowGraphBase* pGraph, IFlowNode::EFlowEvent event, IFlowNode::SActivationInfo* pActInfo, IFlowNode* pImpl);
  98.  
  99.         struct STypeInfo
  100.         {
  101.                 STypeInfo() : name(""), factory(NULL) {}
  102.                 STypeInfo(const string& typeName, IFlowNodeFactoryPtr pFactory) : name(typeName), factory(pFactory) {}
  103.                 string              name;
  104.                 IFlowNodeFactoryPtr factory;
  105.  
  106.                 void                GetMemoryUsage(ICrySizer* pSizer) const
  107.                 {
  108.                         pSizer->AddObject(name);
  109.                 }
  110.         };
  111.  
  112. #ifndef _RELEASE
  113.         struct TSFGProfile
  114.         {
  115.                 int  graphsUpdated;
  116.                 int  nodeActivations;
  117.                 int  nodeUpdates;
  118.  
  119.                 void Reset()
  120.                 {
  121.                         memset(this, 0, sizeof(*this));
  122.                 }
  123.         };
  124.         static TSFGProfile FGProfile;
  125. #endif //_RELEASE
  126.  
  127.         const STypeInfo& GetTypeInfo(TFlowNodeTypeId typeId) const;
  128.  
  129. private:
  130.         typedef std::queue<XmlNodeRef> TPendingComposites;
  131.  
  132.         void            LoadExtensions(string path);
  133.         void            LoadExtensionFromXml(XmlNodeRef xml, TPendingComposites* pComposites);
  134.         void            LoadComposites(TPendingComposites* pComposites);
  135.  
  136.         void            RegisterAllNodeTypes();
  137.         void            RegisterAutoTypes();
  138.         void            RegisterEntityTypes();
  139.         TFlowNodeTypeId GenerateNodeTypeID();
  140.  
  141.         void            LoadBlacklistedFlownodeXML();
  142.         bool            BlacklistedFlownode(const char** editorName);
  143.  
  144.         void            UpdateGraphs();
  145.  
  146. private:
  147.         // Inspecting enabled/disabled
  148.         bool m_bInspectingEnabled;
  149.         bool m_needToUpdateForwardings;
  150.         bool m_criticalLoadingErrorHappened;
  151.         bool m_bRegisteredDefaultNodes;
  152.  
  153.         class CNodeTypeIterator;
  154.         typedef std::map<string, TFlowNodeTypeId> TTypeNameToIdMap;
  155.         TTypeNameToIdMap                    m_typeNameToIdMap;
  156.         std::vector<STypeInfo>              m_typeRegistryVec; // 0 is invalid
  157.         typedef CListenerSet<CFlowGraphBase*> TGraphs;
  158.         TGraphs                             m_graphs;
  159.         std::vector<IFlowGraphInspectorPtr> m_systemInspectors; // only inspectors which watch all graphs
  160.  
  161.         std::vector<TFlowNodeTypeId>        m_freeNodeTypeIDs;
  162.         TFlowNodeTypeId                     m_nextNodeTypeID;
  163.         IFlowGraphInspectorPtr              m_pDefaultInspector;
  164.  
  165.         CFlowSystemCVars                    m_cVars;
  166.  
  167.         TFlowGraphId                        m_nextFlowGraphId;
  168.  
  169.         CFlowGraphModuleManager*            m_pModuleManager;
  170.  
  171.         XmlNodeRef                          m_blacklistNode;
  172.  
  173.         typedef std::map<TFlowSystemContainerId, IFlowSystemContainerPtr> TFlowSystemContainerMap;
  174.         TFlowSystemContainerMap m_FlowSystemContainers;
  175. };
  176.  
  177. inline CFlowGraphModuleManager* CFlowSystem::GetModuleManager()
  178. {
  179.         return m_pModuleManager;
  180. }
  181.  
  182. ////////////////////////////////////////////////////
  183. inline const CFlowGraphModuleManager* CFlowSystem::GetModuleManager() const
  184. {
  185.         return m_pModuleManager;
  186. }
  187.  
  188. #endif
  189.  
downloadFlowSystem.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