BVB Source Codes

CRYENGINE Show terrain_damage.cpp Source code

Return Download CRYENGINE: download terrain_damage.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   terrain_damage.cpp
  5. //  Version:     v1.00
  6. //  Created:     28/5/2001 by Vladimir Kajalin
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: terrain deformations
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #include "StdAfx.h"
  15.  
  16. #include "terrain.h"
  17. #include "terrain_sector.h"
  18. #include "ObjMan.h"
  19. #include "Vegetation.h"
  20.  
  21. void CTerrain::MakeCrater(Vec3 vExploPos, float fExploRadius)
  22. {
  23.         m_StoredModifications.PushModification(vExploPos, fExploRadius);
  24. }
  25.  
  26. bool CTerrain::RemoveObjectsInArea(Vec3 vExploPos, float fExploRadius)
  27. {
  28.         bool bEverythingDeleted = true;
  29.  
  30.         // get near sectors
  31.         //  PodArray<CTerrainNode*> lstNearSecInfos;
  32.         Vec3 vRadius(fExploRadius, fExploRadius, fExploRadius);
  33.         //      IntersectWithBox(AABB(vExploPos-vRadius,vExploPos+vRadius),&lstNearSecInfos,false);
  34.  
  35.         PodArray<SRNInfo> lstEntities;
  36.         const AABB cExplosionBox(vExploPos - vRadius, vExploPos + vRadius);
  37.         Get3DEngine()->MoveObjectsIntoListGlobal(&lstEntities, &cExplosionBox, false, true, true, true);
  38.  
  39.         // remove small objects around
  40.         //int s;
  41.         //  for( s=0; s<lstNearSecInfos.Count(); s++)
  42.         {
  43.                 //  CTerrainNode * pSecInfo = lstNearSecInfos[s];
  44.                 //              for(int nListId=STATIC_OBJECTS; nListId<=PROC_OBJECTS; nListId++)
  45.                 for (int i = 0; i < lstEntities.Count(); i++)
  46.                 {
  47.                         IRenderNode* pRenderNode = lstEntities[i].pNode;
  48.                         AABB entBox = pRenderNode->GetBBox();
  49.                         float fEntRadius = entBox.GetRadius();
  50.                         Vec3 vEntCenter = pRenderNode->GetBBox().GetCenter();
  51.                         float fDist = vExploPos.GetDistance(vEntCenter);
  52.                         if (fDist < fExploRadius + fEntRadius &&
  53.                             Overlap::Sphere_AABB(Sphere(vExploPos, fExploRadius), entBox))
  54.                         {
  55.                                 if (fDist >= fExploRadius)
  56.                                 {
  57.                                         //
  58.                                         Matrix34A objMat;
  59.                                         CStatObj* pStatObj = (CStatObj*)pRenderNode->GetEntityStatObj(0, 0, &objMat);
  60.                                         if (!pStatObj)
  61.                                                 continue;
  62.                                         objMat.Invert();
  63.                                         //assert(0);
  64.                                         Vec3 vOSExploPos = objMat.TransformPoint(vExploPos);
  65.  
  66.                                         Vec3 vScaleTest(0, 0, 1.f);
  67.                                         vScaleTest = objMat.TransformVector(vScaleTest);
  68.                                         float fObjScaleInv = vScaleTest.len();
  69.  
  70.                                         if (!pStatObj->IsSphereOverlap(Sphere(vOSExploPos, fExploRadius * fObjScaleInv)))
  71.                                                 continue;
  72.                                 }
  73.  
  74.                                 if (pRenderNode->GetRenderNodeType() == eERType_Vegetation && (fEntRadius < (fExploRadius - fDist * .5f)) &&
  75.                                     !((CVegetation*)pRenderNode)->IsBreakable())
  76.                                 {
  77.                                         // remove this object
  78.                                         Get3DEngine()->UnRegisterEntityAsJob(pRenderNode);
  79.                                         pRenderNode->Dephysicalize();
  80.  
  81.                                         if (!(pRenderNode->m_dwRndFlags & ERF_PROCEDURAL))
  82.                                                 Get3DEngine()->m_lstKilledVegetations.Add(pRenderNode);
  83.                                 }
  84.                                 else
  85.                                 {
  86.                                         // if something was impossible to destroy - disable deformation
  87.                                         bEverythingDeleted = false;
  88.                                 }
  89.                         }
  90.                 }
  91.         }
  92.  
  93.         return bEverythingDeleted;
  94. }
  95.  
  96. void CTerrain::GetObjectsAround(Vec3 vExploPos, float fExploRadius, PodArray<SRNInfo>* pEntList, bool bSkip_ERF_NO_DECALNODE_DECALS, bool bSkipDynamicObjects)
  97. {
  98.         assert(pEntList);
  99.  
  100.         //      if(!GetParentNode(nSID))
  101.         //      return;
  102.  
  103.         // get intersected outdoor sectors
  104.         //      static PodArray<CTerrainNode*> lstSecotors; lstSecotors.Clear();
  105.         AABB aabbBox(vExploPos - Vec3(fExploRadius, fExploRadius, fExploRadius), vExploPos + Vec3(fExploRadius, fExploRadius, fExploRadius));
  106.  
  107.         Get3DEngine()->MoveObjectsIntoListGlobal(pEntList, &aabbBox, false, true, bSkip_ERF_NO_DECALNODE_DECALS, bSkipDynamicObjects);
  108.  
  109.         /*      GetParentNode(nSID)->IntersectTerrainAABB(aabbBox, lstSecotors);
  110.  
  111.            // find static objects around
  112.            for( int s=0; s<lstSecotors.Count(); s++)
  113.            {
  114.             CTerrainNode * pSecInfo = lstSecotors[s];
  115.             for(int i=0; i<pSecInfo->m_lstEntities[STATIC_OBJECTS].Count(); i++)
  116.             {
  117.               IRenderNode * pRenderNode =  pSecInfo->m_lstEntities[STATIC_OBJECTS][i].pNode;
  118.               if(bSkip_ERF_NO_DECALNODE_DECALS && pRenderNode->GetRndFlags()&ERF_NO_DECALNODE_DECALS)
  119.                 continue;
  120.  
  121.               if(pRenderNode->GetRenderNodeType() == eERType_Decal)
  122.                 continue;
  123.  
  124.               const AABB & box = pRenderNode->GetBBox();
  125.               if(Overlap::Sphere_AABB(Sphere(vExploPos,fExploRadius), box))
  126.                 if(pEntList->Find(pRenderNode)<0)
  127.                   pEntList->Add(pRenderNode);
  128.             }
  129.            }*/
  130. }
  131.  
  132. int CTerrain::ReloadModifiedHMData(FILE* f, int nSID)
  133. {
  134.         ResetHeightMapCache();
  135.         return GetParentNode(nSID) ? GetParentNode(nSID)->ReloadModifiedHMData(f) : 0;
  136. }
  137.  
downloadterrain_damage.cpp 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