BVB Source Codes

CRYENGINE Show Vegetation.h Source code

Return Download CRYENGINE: download Vegetation.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _CVegetation_H_
  4. #define _CVegetation_H_
  5.  
  6. class CDeformableNode;
  7.  
  8. #define VEGETATION_CONV_FACTOR 64.f
  9.  
  10. template<class T>
  11. class PodArrayAABB : public PodArray<T>
  12. {
  13. public:
  14.         AABB m_aabbBox;
  15. };
  16.  
  17. // Warning: Average outdoor level has about 200.000 objects of this class allocated - so keep it small
  18. class CVegetation
  19.         : public IVegetation
  20.           , public Cry3DEngineBase
  21. {
  22. public:
  23.         Vec3                                        m_vPos;
  24.         IPhysicalEntity*                            m_pPhysEnt;
  25.         SVegetationSpriteInfo*                      m_pSpriteInfo;
  26.         CDeformableNode*                            m_pDeformable;
  27.         PodArrayAABB<CRenderObject::SInstanceInfo>* m_pInstancingInfo;
  28.  
  29. #if defined(SEG_WORLD)
  30.         uint16 m_nStaticTypeSlot;
  31. #endif
  32.         int    m_nObjectTypeIndex;
  33.         byte   m_ucAngle;
  34.         byte   m_ucScale;
  35.         byte   m_boxExtends[6];
  36.         byte   m_ucRadius;
  37.         byte   m_ucAngleX;
  38.         byte   m_ucAngleY;
  39.         byte   m_bApplyPhys;
  40.  
  41.         static CRY_ALIGN(128) float g_scBoxDecomprTable[256];
  42.  
  43.         CVegetation();
  44.         virtual ~CVegetation();
  45.         void                 SetStatObjGroupIndex(int nVegetationGroupIndex) final;
  46.  
  47.         void                 CheckCreateDeformable();
  48.  
  49.         virtual bool         CanExecuteRenderAsJob()              { return false; } // Running in jobs breaks foliage skinning currently
  50.  
  51.         int                  GetStatObjGroupId() const final      { return m_nObjectTypeIndex; }
  52.         const char*          GetEntityClassName(void) const final { return "Vegetation"; }
  53.         Vec3                 GetPos(bool bWorldOnly = true) const final;
  54.         virtual float        GetScale(void) const final           { return (1.f / VEGETATION_CONV_FACTOR) * m_ucScale; }
  55.         void                 SetScale(float fScale)               { m_ucScale = (uint8)SATURATEB(fScale * VEGETATION_CONV_FACTOR); }
  56.         const char*          GetName(void) const final;
  57.         virtual CLodValue    ComputeLod(int wantedLod, const SRenderingPassInfo& passInfo) final;
  58.         virtual void         Render(const SRendParams& RendParams, const SRenderingPassInfo& passInfo) final { assert(0); }
  59.         void                 Render(const SRenderingPassInfo& passInfo, const CLodValue& lodValue, SSectorTextureSet* pTerrainTexInfo) const;
  60.         IPhysicalEntity*     GetPhysics(void) const final                                                    { return m_pPhysEnt; }
  61.         IRenderMesh*         GetRenderMesh(int nLod) final;
  62.         void                 SetPhysics(IPhysicalEntity* pPhysEnt) final                                     { m_pPhysEnt = pPhysEnt; }
  63.         void                 SetMaterial(IMaterial*) final                                                   {}
  64.         IMaterial*           GetMaterial(Vec3* pHitPos = NULL) const final;
  65.         IMaterial*           GetMaterialOverride() final;
  66.         void                 SetMatrix(const Matrix34& mat) final;
  67.         virtual void         Physicalize(bool bInstant = false) final;
  68.         bool                 PhysicalizeFoliage(bool bPhysicalize = true, int iSource = 0, int nSlot = 0) final;
  69.         virtual IRenderNode* Clone() const final;
  70.         IPhysicalEntity*     GetBranchPhys(int idx, int nSlot = 0) final;
  71.         IFoliage*            GetFoliage(int nSlot = 0) final;
  72.         float                GetSpriteSwitchDist() const;
  73.         bool                 IsBreakable() { pe_params_part pp; pp.ipart = 0; return m_pPhysEnt && m_pPhysEnt->GetParams(&pp) && pp.idmatBreakable >= 0; }
  74.         bool                 IsBending() const;
  75.         virtual float        GetMaxViewDist() final;
  76.         IStatObj*            GetEntityStatObj(unsigned int nPartId = 0, unsigned int nSubPartId = 0, Matrix34A* pMatrix = NULL, bool bReturnOnlyVisible = false) final;
  77.         virtual EERType      GetRenderNodeType() final;
  78.         virtual void         Dephysicalize(bool bKeepIfReferenced = false) final;
  79.         void                 Dematerialize() final;
  80.         virtual void         GetMemoryUsage(ICrySizer* pSizer) const final;
  81.         virtual const AABB   GetBBox() const final;
  82.         virtual void         FillBBox(AABB& aabb) final;
  83.         virtual void         SetBBox(const AABB& WSBBox) final;
  84.         virtual void         OffsetPosition(const Vec3& delta) final;
  85.         const float          GetRadius() const;
  86.         void                 UpdateRndFlags();
  87.         ILINE int            GetStatObjGroupSize() const
  88.         {
  89. #ifdef SEG_WORLD
  90.                 return GetObjManager()->m_lstStaticTypes[m_nStaticTypeSlot].Count();
  91. #else
  92.                 return GetObjManager()->m_lstStaticTypes[0].Count();
  93. #endif
  94.         }
  95.         ILINE StatInstGroup& GetStatObjGroup() const
  96.         {
  97. #ifdef SEG_WORLD
  98.                 return GetObjManager()->m_lstStaticTypes[m_nStaticTypeSlot][m_nObjectTypeIndex];
  99. #else
  100.                 return GetObjManager()->m_lstStaticTypes[0][m_nObjectTypeIndex];
  101. #endif
  102.         }
  103.         ILINE CStatObj* GetStatObj() const
  104.         {
  105. #ifdef SEG_WORLD
  106.                 return GetObjManager()->m_lstStaticTypes[m_nStaticTypeSlot][m_nObjectTypeIndex].GetStatObj();
  107. #else
  108.                 return GetObjManager()->m_lstStaticTypes[0][m_nObjectTypeIndex].GetStatObj();
  109. #endif
  110.         }
  111.         float         GetZAngle() const;
  112.         AABB          CalcBBox();
  113.         void          CalcMatrix(Matrix34A& tm, int* pTransFags = NULL);
  114.         virtual uint8 GetMaterialLayers() const final
  115.         {
  116. #ifdef SEG_WORLD
  117.                 return GetObjManager()->m_lstStaticTypes[m_nStaticTypeSlot][m_nObjectTypeIndex].nMaterialLayers;
  118. #else
  119.                 return GetObjManager()->m_lstStaticTypes[0][m_nObjectTypeIndex].nMaterialLayers;
  120. #endif
  121.         }
  122.         //      float GetLodForDistance(float fDistance);
  123.         void         Init();
  124.         void         ShutDown();
  125.         void         OnRenderNodeBecomeVisible(const SRenderingPassInfo& passInfo) final;
  126.         void         UpdateSpriteInfo(SVegetationSpriteInfo& properties, float fSpriteAmount, SSectorTextureSet* pTerrainTexInfo, const SRenderingPassInfo& passInfo) const;
  127.         void         UpdateBending();
  128.         static void  InitVegDecomprTable();
  129.         virtual bool GetLodDistances(const SFrameLodInfo& frameLodInfo, float* distances) const final;
  130.  
  131.         ILINE void   SetBoxExtends(byte* pBoxExtends, byte* pRadius, const AABB& RESTRICT_REFERENCE aabb, const Vec3& RESTRICT_REFERENCE vPos)
  132.         {
  133.                 const float fRatio = (255.f / VEGETATION_CONV_FACTOR);
  134.                 Vec3 v0 = aabb.max - vPos;
  135.                 pBoxExtends[0] = (byte)SATURATEB(v0.x * fRatio + 1.f);
  136.                 pBoxExtends[1] = (byte)SATURATEB(v0.y * fRatio + 1.f);
  137.                 pBoxExtends[2] = (byte)SATURATEB(v0.z * fRatio + 1.f);
  138.                 Vec3 v1 = vPos - aabb.min;
  139.                 pBoxExtends[3] = (byte)SATURATEB(v1.x * fRatio + 1.f);
  140.                 pBoxExtends[4] = (byte)SATURATEB(v1.y * fRatio + 1.f);
  141.                 pBoxExtends[5] = (byte)SATURATEB(v1.z * fRatio + 1.f);
  142.                 *pRadius = (byte)SATURATEB(max(v0.GetLength(), v1.GetLength()) * fRatio + 1.f);
  143.         }
  144.  
  145.         ILINE void FillBBoxFromExtends(AABB& aabb, const byte* const __restrict pBoxExtends, const Vec3& RESTRICT_REFERENCE vPos) const
  146.         {
  147.                 if (m_pInstancingInfo)
  148.                 {
  149.                         aabb = m_pInstancingInfo->m_aabbBox;
  150.                         return;
  151.                 }
  152.  
  153.                 const float* const __restrict cpDecompTable = g_scBoxDecomprTable;
  154.                 const float cData0 = cpDecompTable[pBoxExtends[0]];
  155.                 const float cData1 = cpDecompTable[pBoxExtends[1]];
  156.                 const float cData2 = cpDecompTable[pBoxExtends[2]];
  157.                 const float cData3 = cpDecompTable[pBoxExtends[3]];
  158.                 const float cData4 = cpDecompTable[pBoxExtends[4]];
  159.                 const float cData5 = cpDecompTable[pBoxExtends[5]];
  160.                 aabb.max.x = vPos.x + cData0;
  161.                 aabb.max.y = vPos.y + cData1;
  162.                 aabb.max.z = vPos.z + cData2;
  163.                 aabb.min.x = vPos.x - cData3;
  164.                 aabb.min.y = vPos.y - cData4;
  165.                 aabb.min.z = vPos.z - cData5;
  166.         }
  167.  
  168.         ILINE void FillBBox_NonVirtual(AABB& aabb) const
  169.         {
  170.                 FillBBoxFromExtends(aabb, m_boxExtends, m_vPos);
  171.         }
  172.  
  173.         // Apply bending parameters to the CRenderObject
  174.         void FillBendingData(CRenderObject* pObj) const;
  175. };
  176.  
  177. #endif // _CVegetation_H_
  178.  
downloadVegetation.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