BVB Source Codes

CRYENGINE Show ActorSystem.h Source code

Return Download CRYENGINE: download ActorSystem.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description: Manages and controls player spawns.
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 23:8:2004   15:52 : Created by M谩rcio Martins
  12.  
  13. *************************************************************************/
  14. #ifndef __ACTORSYSTEM_H__
  15. #define __ACTORSYSTEM_H__
  16.  
  17. #if _MSC_VER > 1000
  18.         #pragma once
  19. #endif
  20.  
  21. #include "IActorSystem.h"
  22. #include <CryGame/IGameFramework.h>
  23. #include "ItemParams.h"
  24.  
  25. typedef std::map<EntityId, IActor*> TActorMap;
  26.  
  27. struct IScriptTable;
  28. class CPlayerEntityProxy;
  29.  
  30. class CActorSystem :
  31.         public IActorSystem,
  32.         public IEntitySystemSink
  33. {
  34.         struct DemoSpectatorSystem
  35.         {
  36.                 EntityId m_originalActor;
  37.                 EntityId m_currentActor;
  38.  
  39.                 void     SwitchSpectator(TActorMap* pActors, EntityId id = 0);
  40.  
  41.         }        m_demoSpectatorSystem;
  42.  
  43.         EntityId m_demoPlaybackMappedOriginalServerPlayer;
  44.  
  45. public:
  46.         CActorSystem(ISystem* pSystem, IEntitySystem* pEntitySystem);
  47.         virtual ~CActorSystem();
  48.  
  49.         void         Release() { delete this; };
  50.  
  51.         virtual void Reset();
  52.         virtual void Reload();
  53.  
  54.         // IActorSystem
  55.         virtual IActor*                GetActor(EntityId entityId);
  56.         virtual IActor*                GetActorByChannelId(uint16 channelId);
  57.         virtual IActor*                CreateActor(uint16 channelId, const char* name, const char* actorClass, const Vec3& pos, const Quat& rot, const Vec3& scale, EntityId id);
  58.  
  59.         virtual int                    GetActorCount() const { return (int)m_actors.size(); };
  60.         virtual IActorIteratorPtr      CreateActorIterator();
  61.  
  62.         virtual void                   SetDemoPlaybackMappedOriginalServerPlayer(EntityId id);
  63.         virtual EntityId               GetDemoPlaybackMappedOriginalServerPlayer() const;
  64.         virtual void                   SwitchDemoSpectator(EntityId id = 0);
  65.         virtual IActor*                GetCurrentDemoSpectator();
  66.         virtual IActor*                GetOriginalDemoSpectator();
  67.  
  68.         virtual void                   Scan(const char* folderName);
  69.         virtual const IItemParamsNode* GetActorParams(const char* actorClass) const;
  70.  
  71.         virtual bool                   IsActorClass(IEntityClass* pClass) const;
  72.  
  73.         // ~IActorSystem
  74.  
  75.         // IEntitySystemSink
  76.         virtual bool OnBeforeSpawn(SEntitySpawnParams& params);
  77.         virtual void OnSpawn(IEntity* pEntity, SEntitySpawnParams& params);
  78.         virtual bool OnRemove(IEntity* pEntity);
  79.         virtual void OnReused(IEntity* pEntity, SEntitySpawnParams& params);
  80.         virtual void OnEvent(IEntity* pEntity, SEntityEvent& event);
  81.         virtual void GetMemoryUsage(class ICrySizer* pSizer) const;
  82.         // ~IEntitySystemSink
  83.  
  84.         void         RegisterActorClass(const char* name, IGameFramework::IActorCreator*, bool isAI);
  85.         void         AddActor(EntityId entityId, IActor* pProxy);
  86.         void         RemoveActor(EntityId entityId);
  87.  
  88.         void         GetMemoryStatistics(ICrySizer* s);
  89.  
  90.         virtual bool ScanXML(const XmlNodeRef& root, const char* xmlFile);
  91.  
  92. private:
  93.  
  94.         //      static IEntityComponent *CreateActor(IEntity *pEntity, SEntitySpawnParams &params, void *pUserData);
  95.         static bool HookCreateActor(IEntity*, IGameObject*, void*);
  96.  
  97.         static void ActorSystemErrorMessage(const char* fileName, const char* errorInfo, bool displayErrorDialog);
  98.  
  99.         struct SSpawnUserData
  100.         {
  101.                 SSpawnUserData(const char* cls, uint16 channel) : className(cls), channelId(channel) {}
  102.                 const char* className;
  103.                 uint16      channelId;
  104.         };
  105.  
  106.         struct SActorUserData
  107.         {
  108.                 SActorUserData(const char* cls, CActorSystem* pNewActorSystem) : className(cls), pActorSystem(pNewActorSystem) {};
  109.                 CActorSystem* pActorSystem;
  110.                 string        className;
  111.         };
  112.  
  113.         struct SActorClassDesc
  114.         {
  115.                 IEntityClass*                  pEntityClass;
  116.                 IGameFramework::IActorCreator* pCreator;
  117.  
  118.                 SActorClassDesc() : pEntityClass(), pCreator() {}
  119.         };
  120.  
  121.         class CActorIterator : public IActorIterator
  122.         {
  123.         public:
  124.                 CActorIterator(CActorSystem* pAS)
  125.                 {
  126.                         m_pAS = pAS;
  127.                         m_cur = m_pAS->m_actors.begin();
  128.                         m_nRefs = 0;
  129.                 }
  130.                 void AddRef()
  131.                 {
  132.                         ++m_nRefs;
  133.                 }
  134.                 void Release()
  135.                 {
  136.                         if (--m_nRefs <= 0)
  137.                         {
  138.                                 assert(std::find(m_pAS->m_iteratorPool.begin(),
  139.                                                  m_pAS->m_iteratorPool.end(), this) == m_pAS->m_iteratorPool.end());
  140.                                 // Call my own destructor before I push to the pool - avoids tripping up the STLP debugging {2008/12/09})
  141.                                 this->~CActorIterator();
  142.                                 m_pAS->m_iteratorPool.push_back(this);
  143.                         }
  144.                 }
  145.                 IActor* Next()
  146.                 {
  147.                         if (m_cur == m_pAS->m_actors.end())
  148.                                 return 0;
  149.                         IActor* pActor = m_cur->second;
  150.                         ++m_cur;
  151.                         return pActor;
  152.                 }
  153.                 size_t Count()
  154.                 {
  155.                         return m_pAS->m_actors.size();
  156.                 }
  157.                 CActorSystem*       m_pAS;
  158.                 TActorMap::iterator m_cur;
  159.                 int                 m_nRefs;
  160.         };
  161.  
  162.         typedef struct SActorParamsDesc
  163.         {
  164.                 SActorParamsDesc() : params(0) {};
  165.                 ~SActorParamsDesc()
  166.                 {
  167.                         if (params)
  168.                                 params->Release();
  169.                 };
  170.  
  171.                 CItemParamsNode* params;
  172.  
  173.         } SItemParamsDesc;
  174.  
  175.         typedef std::map<string, SActorClassDesc> TActorClassMap;
  176.         typedef std::map<string, SItemParamsDesc> TActorParamsMap;
  177.  
  178.         ISystem*                     m_pSystem;
  179.         IEntitySystem*               m_pEntitySystem;
  180.  
  181.         TActorMap                    m_actors;
  182.         TActorClassMap               m_classes;
  183.  
  184.         std::vector<CActorIterator*> m_iteratorPool;
  185.  
  186.         TActorParamsMap              m_actorParams;
  187.         string                       m_actorParamsFolder;
  188. };
  189.  
  190. #endif //__ACTORSYSTEM_H__
  191.  
downloadActorSystem.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