BVB Source Codes

CRYENGINE Show ParticleEmitter.h Source code

Return Download CRYENGINE: download ParticleEmitter.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  Created:     23/09/2014 by Filipe amim
  5. //  Description:
  6. // -------------------------------------------------------------------------
  7. //
  8. ////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef PARTICLEEMITTER_H
  11. #define PARTICLEEMITTER_H
  12.  
  13. #pragma once
  14.  
  15. #include "ParticleEffect.h"
  16. #include "ParticleEnviron.h"
  17. #include <CryRenderer/IGpuParticles.h>
  18.  
  19. namespace pfx2
  20. {
  21.  
  22. class CParticleEmitter : public IParticleEmitter, public Cry3DEngineBase
  23. {
  24. private:
  25.         struct SRuntimeRef
  26.         {
  27.                 SRuntimeRef(CParticleEffect* effect, CParticleEmitter* emitter, CParticleComponent* component, const SRuntimeInitializationParameters& params);
  28.                 SRuntimeRef() : pRuntime(nullptr), pComponent(nullptr) {}
  29.                 _smart_ptr<ICommonParticleComponentRuntime> pRuntime;
  30.                 CParticleComponent*                         pComponent;
  31.         };
  32.  
  33.         typedef std::vector<SRuntimeRef> TComponentRuntimes;
  34.  
  35. public:
  36.         CParticleEmitter(uint emitterId);
  37.         ~CParticleEmitter();
  38.  
  39.         // IRenderNode
  40.         virtual EERType          GetRenderNodeType() override;
  41.         virtual const char*      GetEntityClassName() const override;
  42.         virtual const char*      GetName() const override;
  43.         virtual void             SetMatrix(const Matrix34& mat) override;
  44.         virtual Vec3             GetPos(bool bWorldOnly = true) const override;
  45.         virtual void             Render(const struct SRendParams& rParam, const SRenderingPassInfo& passInfo) override;
  46.         virtual IPhysicalEntity* GetPhysics() const override;
  47.         virtual void             SetPhysics(IPhysicalEntity*) override;
  48.         virtual void             SetMaterial(IMaterial* pMat) override;
  49.         virtual IMaterial*       GetMaterial(Vec3* pHitPos = 0) const override;
  50.         virtual IMaterial*       GetMaterialOverride() override;
  51.         virtual float            GetMaxViewDist() override;
  52.         virtual void             Precache() override;
  53.         virtual void             GetMemoryUsage(ICrySizer* pSizer) const override;
  54.         virtual const AABB       GetBBox() const override;
  55.         virtual void             FillBBox(AABB& aabb) override;
  56.         virtual void             SetBBox(const AABB& WSBBox) override;
  57.         virtual void             OffsetPosition(const Vec3& delta) override;
  58.         virtual bool             IsAllocatedOutsideOf3DEngineDLL() override;
  59.         virtual void             SetViewDistRatio(int nViewDistRatio) override;
  60.         virtual void             ReleaseNode(bool bImmediate) override;
  61.         // ~IRenderNode
  62.  
  63.         // pfx2 IParticleEmitter
  64.         virtual const IParticleEffect* GetEffect() const override;
  65.         virtual void                   Activate(bool activate) override;
  66.         virtual void                   Kill() override;
  67.         virtual bool                   IsActive() const;
  68.         virtual void                   Prime();
  69.         virtual void                   SetLocation(const QuatTS& loc) override;
  70.         virtual QuatTS                 GetLocation() const override { return m_location; }
  71.         virtual void                   EmitParticle(const EmitParticleData* pData = NULL)  override;
  72.         virtual IParticleAttributes& GetAttributes()  override    { return m_attributeInstance; }
  73.         virtual void                 SetEntity(IEntity* pEntity, int nSlot) override;
  74.         virtual void                 InvalidateCachedEntityData() override;
  75.         virtual void                 SetTarget(const ParticleTarget& target) override;
  76.         virtual bool                 UpdateStreamableComponents(float fImportance, const Matrix34A& objMatrix, IRenderNode* pRenderNode, float fEntDistance, bool bFullUpdate, int nLod) override;
  77.         // ~pfx2 IParticleEmitter
  78.  
  79.         // pfx1 IParticleEmitter
  80.         virtual int          GetVersion() const override                        { return 2; }
  81.         virtual bool         IsAlive() const override                           { return m_registered; }
  82.         virtual bool         IsInstant() const override                         { return false; }
  83.         virtual void         Restart() override                                 {}
  84.         virtual void         SetEffect(const IParticleEffect* pEffect) override {}
  85.         virtual void         SetEmitGeom(const GeomRef& geom) override          { m_emitterGeometry = geom; }
  86.         virtual void         SetSpawnParams(const SpawnParams& spawnParams) override;
  87.         virtual void         GetSpawnParams(SpawnParams& sp) const override;
  88.         using IParticleEmitter::GetSpawnParams;
  89.         virtual void         Update() override;
  90.         virtual unsigned int GetAttachedEntityId() override   { return 0; }
  91.         virtual int          GetAttachedEntitySlot() override { return 0; }
  92.         // ~pfx1 CPArticleEmitter
  93.  
  94.         void                      PostUpdate();
  95.         CParticleContainer&       GetParentContainer()       { return m_parentContainer; }
  96.         const CParticleContainer& GetParentContainer() const { return m_parentContainer; }
  97.         virtual void              GetParentData(const int parentComponentId, const uint* parentParticleIds, const int numParentParticleIds, SInitialData* data) const override;
  98.         const TComponentRuntimes& GetRuntimes() const        { return m_componentRuntimes; }
  99.         void                      SetCEffect(CParticleEffect* pEffect);
  100.         const CParticleEffect*    GetCEffect() const         { return m_pEffect; }
  101.         CParticleEffect*          GetCEffect()               { return m_pEffect; }
  102.         void                      Register();
  103.         void                      Unregister();
  104.         bool                      IsIndependent() const { return Unique(); }
  105.         bool                      HasParticles() const;
  106.         void                      UpdateEmitGeomFromEntity();
  107.         const SVisEnviron&        GetVisEnv() const            { return m_visEnviron; }
  108.         const SPhysEnviron&       GetPhysicsEnv() const        { return m_physEnviron; }
  109.         const GeomRef&            GetEmitterGeometry() const   { return m_emitterGeometry; }
  110.         QuatTS                    GetEmitterGeometryLocation() const;
  111.         const CAttributeInstance& GetAttributeInstance() const { return m_attributeInstance; }
  112.         const ParticleTarget&     GetTarget() const            { return m_target; }
  113.         float                     GetViewDistRatio() const     { return m_viewDistRatio; }
  114.         float                     GetTimeScale() const         { return Cry3DEngineBase::GetCVars()->e_ParticlesDebug & AlphaBit('z') ? 0.0f : m_timeScale; }
  115.         CRenderObject*            GetRenderObject(uint threadId, uint renderObjectIdx);
  116.         void                      SetRenderObject(CRenderObject* pRenderObject, uint threadId, uint renderObjectIdx);
  117.         float                     GetTime() const        { return m_time; }
  118.         uint32                    GetInitialSeed() const { return m_initialSeed; }
  119.         uint32                    GetCurrentSeed() const { return m_currentSeed; }
  120.         EntityId                  GetEntityId() const { return m_entityId; }
  121.   uint                      GetEmitterId() const { return m_emitterId; }
  122.   ColorF                    GetProfilerColor() const { return m_profilerColor; }
  123.  
  124.         void                      AccumCounts(SParticleCounts& counts);
  125.         void                      AddDrawCallCounts(int numRendererdParticles, int numClippedParticles);
  126.  
  127. private:
  128.         void     UpdateRuntimeRefs();
  129.         void     AddInstance();
  130.         void     StopInstances();
  131.         void     UpdateFromEntity();
  132.         void     UpdateTargetFromEntity(IEntity* pEntity);
  133.         IEntity* GetEmitGeometryEntity() const;
  134.         void     ResetRenderObjects();
  135.  
  136.         std::vector<CRenderObject*> m_pRenderObjects[RT_COMMAND_BUF_COUNT];
  137.         SVisEnviron                 m_visEnviron;
  138.         SPhysEnviron                m_physEnviron;
  139.         CAttributeInstance          m_attributeInstance;
  140.         AABB                        m_bounds;
  141.         CParticleContainer          m_parentContainer;
  142.         TComponentRuntimes          m_componentRuntimes;
  143.         CParticleEffect*            m_pEffect;
  144.         SContainerCounts            m_emitterCounts;
  145.         CryMutex                    m_countsMutex;
  146.         QuatTS                      m_location;
  147.         ParticleTarget              m_target;
  148.         EntityId                    m_entityId;
  149.         GeomRef                     m_emitterGeometry;
  150.   ColorF                      m_profilerColor;
  151.   int                         m_entitySlot;
  152.         int                         m_emitterGeometrySlot;
  153.         float                       m_viewDistRatio;
  154.         float                       m_time;
  155.         float                       m_timeScale;
  156.         int                         m_editVersion;
  157.         uint                        m_initialSeed;
  158.         uint                        m_currentSeed;
  159.   uint                        m_emitterId;
  160.         bool                        m_registered;
  161.         bool                        m_active;
  162. };
  163.  
  164. }
  165.  
  166. #endif // PARTICLEEMITTER_H
  167.  
downloadParticleEmitter.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