BVB Source Codes

CRYENGINE Show ParticleContainer.h Source code

Return Download CRYENGINE: download ParticleContainer.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  Created:     24/09/2014 by Filipe amim
  5. //  Description:
  6. // -------------------------------------------------------------------------
  7. //
  8. ////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef PARTICLECONTAINER_H
  11. #define PARTICLECONTAINER_H
  12.  
  13. #pragma once
  14.  
  15. #include <CrySerialization/IArchive.h>
  16. #include "ParticleCommon.h"
  17. #include "ParticleDataTypes.h"
  18. #include "ParticleMath.h"
  19. #include "ParticleDataStreams.h"
  20. #include "ParticleUpdate.h"
  21.  
  22. namespace pfx2
  23. {
  24.  
  25. class CParticleContainer;
  26.  
  27. typedef TIStream<UCol, UColv>               IColorStream;
  28. typedef TIStream<uint32, uint32v>           IUintStream;
  29. typedef TIOStream<uint32>                   IOUintStream;
  30. typedef TIStream<TParticleId, TParticleIdv> IPidStream;
  31. typedef TIOStream<TParticleId>              IOPidStream;
  32.  
  33. class CParticleContainer
  34. {
  35. public:
  36.         struct SParticleRangeIterator;
  37.  
  38.         struct SSpawnEntry
  39.         {
  40.                 uint32 m_count;
  41.                 uint32 m_parentId;
  42.                 float  m_ageBegin;
  43.                 float  m_ageIncrement;
  44.                 float  m_fractionBegin;
  45.                 float  m_fractionCounter;
  46.         };
  47.  
  48. public:
  49.         CParticleContainer();
  50.         CParticleContainer(const CParticleContainer& copy);
  51.         ~CParticleContainer();
  52.  
  53.         void                              Resize(size_t newSize);
  54.         void                              ResetUsedData();
  55.         void                              AddParticleData(EParticleDataType type);
  56.         bool                              HasData(EParticleDataType type) const { return m_useData[type]; }
  57.         void                              AddParticle();
  58.         void                              AddRemoveParticles(const SSpawnEntry* pSpawnEntries, size_t numSpawnEntries, const TParticleIdArray* pToRemove, TParticleIdArray* pSwapIds);
  59.         void                              Trim();
  60.         void                              Clear();
  61.  
  62.         template<typename T> T*           GetData(EParticleDataType type)       { CRY_PFX2_ASSERT(type.info().isType<T>()); return reinterpret_cast<T*>(m_pData[type]); }
  63.         template<typename T> const T*     GetData(EParticleDataType type) const { CRY_PFX2_ASSERT(type.info().isType<T>()); return reinterpret_cast<const T*>(m_pData[type]); }
  64.         template<typename T> void         FillData(EParticleDataType type, const T& data, SUpdateRange range);
  65.         void                              CopyData(EParticleDataType dstType, EParticleDataType srcType, SUpdateRange range);
  66.  
  67.         IFStream                          GetIFStream(EParticleDataType type, float defaultVal = 0.0f) const;
  68.         IOFStream                         GetIOFStream(EParticleDataType type);
  69.         IVec3Stream                       GetIVec3Stream(EParticleDataType type, Vec3 defaultVal = Vec3(ZERO)) const;
  70.         IOVec3Stream                      GetIOVec3Stream(EParticleDataType type);
  71.         IQuatStream                       GetIQuatStream(EParticleDataType type, Quat defaultVal = Quat(IDENTITY)) const;
  72.         IOQuatStream                      GetIOQuatStream(EParticleDataType type);
  73.         IColorStream                      GetIColorStream(EParticleDataType type) const;
  74.         IOColorStream                     GetIOColorStream(EParticleDataType type);
  75.         IUintStream                       GetIUintStream(EParticleDataType type, uint32 defaultVal = 0) const;
  76.         IOUintStream                      GetIOUintStream(EParticleDataType type);
  77.         IPidStream                        GetIPidStream(EParticleDataType type, TParticleId defaultVal = gInvalidId) const;
  78.         IOPidStream                       GetIOPidStream(EParticleDataType type);
  79.         template<typename T> TIStream<T>  GetTIStream(EParticleDataType type, const T& defaultVal = T()) const;
  80.         template<typename T> TIOStream<T> GetTIOStream(EParticleDataType type);
  81.  
  82.         bool                              Empty() const                   { return GetNumParticles() == 0; }
  83.         uint32                            GetNumParticles() const         { return m_lastId + GetNumSpawnedParticles(); }
  84.         bool                              HasSpawnedParticles() const     { return GetNumSpawnedParticles() != 0; }
  85.         TParticleId                       GetFirstSpawnParticleId() const { return TParticleId(m_firstSpawnId); }
  86.         TParticleId                       GetLastParticleId() const       { return TParticleId(m_lastSpawnId); }
  87.         size_t                            GetMaxParticles() const         { return m_maxParticles; }
  88.         uint32                            GetNumSpawnedParticles() const  { return m_lastSpawnId - m_firstSpawnId; }
  89.         void                              ResetSpawnedParticles();
  90.         void                              RemoveNewBornFlags();
  91.         TParticleId                       GetRealId(TParticleId pId) const;
  92.         uint32                            GetNextSpawnId() const          { return m_nextSpawnId; }
  93.  
  94.         SUpdateRange                      GetFullRange() const;
  95.         SUpdateRange                      GetSpawnedRange() const;
  96.  
  97. private:
  98.         void AddParticles(const SSpawnEntry* pSpawnEntries, size_t numSpawnEntries);
  99.         void RemoveParticles(const TParticleIdArray& toRemove);
  100.         void MakeSwapIds(const TParticleIdArray& toRemove, TParticleIdArray* pSwapIds);
  101.  
  102.         StaticEnumArray<void*, EParticleDataType> m_pData;
  103.         StaticEnumArray<bool, EParticleDataType>  m_useData;
  104.         uint32 m_nextSpawnId;
  105.         uint32 m_maxParticles;
  106.  
  107.         uint32 m_lastId;
  108.         uint32 m_firstSpawnId;
  109.         uint32 m_lastSpawnId;
  110. };
  111.  
  112. }
  113.  
  114. #include "ParticleContainerImpl.h"
  115.  
  116. #endif // PARTICLECONTAINER_H
  117.  
downloadParticleContainer.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