BVB Source Codes

CRYENGINE Show PathHolder.h Source code

Return Download CRYENGINE: download PathHolder.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    -------------------------------------------------------------------------
  5.    File name:   PatHolder.h
  6.    $Id$
  7.    Description: Interface to hold an manipulate a path
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 30/11/2011 : Created by Francesco Roccucci
  12.  
  13.  *********************************************************************/
  14.  
  15. #ifndef __PathHolder_h__
  16. #define __PathHolder_h__
  17.  
  18. #pragma once
  19.  
  20. #include "NavPath.h"
  21. #include <CryAISystem/INavigationSystem.h>
  22.  
  23. template<class T>
  24. class CPathHolder
  25. {
  26. public:
  27.         typedef std::vector<T> PathHolderPath;
  28.  
  29.         CPathHolder()
  30.         {
  31.                 Reset();
  32.         }
  33.  
  34.         void PushBack(const T& element)
  35.         {
  36.                 m_path.push_back(element);
  37.         }
  38.  
  39.         void PushFront(const T& element)
  40.         {
  41.                 m_path.insert(m_path.begin(), element);
  42.         }
  43.  
  44.         void Reset()
  45.         {
  46.                 m_path.clear();
  47.         }
  48.  
  49.         const PathHolderPath&                     GetPath() const { return m_path; }
  50.         inline typename PathHolderPath::size_type Size() const    { return m_path.size(); }
  51.  
  52.         void                                      PullPathOnNavigationMesh(const MNM::CNavMesh& navMesh, uint16 iteration)
  53.         {
  54.                 FUNCTION_PROFILER(GetISystem(), PROFILE_AI);
  55.  
  56.                 if (m_path.size() < 3)
  57.                         return;
  58.  
  59.                 const Vec3 gridOrigin = navMesh.GetGridParams().origin;
  60.  
  61.                 for (uint16 i = 0; i < iteration; ++i)
  62.                 {
  63.                         typename PathHolderPath::reverse_iterator it = m_path.rbegin();
  64.                         typename PathHolderPath::reverse_iterator end = m_path.rend();
  65.  
  66.                         // Each triplets is associated with two triangles so the way length
  67.                         // should match the iteration through the path points
  68.                         for (; it + 2 != end; ++it)
  69.                         {
  70.                                 const T& startPoint = *it;
  71.                                 T& middlePoint = *(it + 1);
  72.                                 const T& endPoint = *(it + 2);
  73.                                 // Let's pull only the triplets that are fully not interacting with off-mesh links
  74.                                 if ((middlePoint.offMeshLinkData.offMeshLinkID == MNM::Constants::eOffMeshLinks_InvalidOffMeshLinkID) &&
  75.                                     (endPoint.offMeshLinkData.offMeshLinkID == MNM::Constants::eOffMeshLinks_InvalidOffMeshLinkID))
  76.                                 {
  77.  
  78.                                         const Vec3& from = startPoint.vPos;
  79.                                         const Vec3& to = endPoint.vPos;
  80.                                         Vec3& middle = middlePoint.vPos;
  81.  
  82.                                         MNM::vector3_t startLocation(from - gridOrigin);
  83.                                         MNM::vector3_t middleLocation(middle - gridOrigin);
  84.                                         MNM::vector3_t endLocation(to - gridOrigin);
  85.  
  86.                                         navMesh.PullString(startLocation, startPoint.iTriId, endLocation, middlePoint.iTriId, middleLocation);
  87.                                         middle = middleLocation.GetVec3() + gridOrigin;
  88.                                 }
  89.                         }
  90.                 }
  91.         }
  92.  
  93.         void FillNavPath(INavPath& navPath)
  94.         {
  95.                 IF_UNLIKELY (m_path.empty())
  96.                         return;
  97.  
  98.                 typename PathHolderPath::const_iterator it = m_path.begin();
  99.                 typename PathHolderPath::const_iterator end = m_path.end();
  100.                 for (; it != end; ++it)
  101.                 {
  102.                         navPath.PushBack(*it);
  103.                 }
  104.  
  105.                 // Make sure the end point is inserted.
  106.                 if (navPath.Empty())
  107.                         navPath.PushBack(m_path.back(), true);
  108.         }
  109.  
  110.         Vec3 At(typename PathHolderPath::size_type pathPosition) const
  111.         {
  112.                 Vec3 pos(ZERO);
  113.                 if (pathPosition < m_path.size())
  114.                 {
  115.                         pos = m_path[pathPosition].vPos;
  116.                 }
  117.                 else
  118.                 {
  119.                         assert(0);
  120.                 }
  121.                 return pos;
  122.         }
  123.  
  124. private:
  125.         PathHolderPath m_path;
  126. };
  127.  
  128. #endif // __PathHolder_h__
  129.  
downloadPathHolder.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