BVB Source Codes

CRYENGINE Show FlightNavRegion2.h Source code

Return Download CRYENGINE: download FlightNavRegion2.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    CryGame Source File.
  5.    -------------------------------------------------------------------------
  6.    File name:   FlightNacRegion.h
  7.    Version:     v1.00
  8.    Description:
  9.  
  10.    -------------------------------------------------------------------------
  11.    History:
  12.    - 15:4:2005   : Created by Mikko Mononen
  13.  
  14.  *********************************************************************/
  15.  
  16. #if !defined(__FLIGHTNAV2_H__)
  17. #define __FLIGHTNAV2_H__
  18.  
  19. #if _MSC_VER > 1000
  20.         #pragma once
  21. #endif
  22.  
  23. #include <CryAISystem/IAISystem.h>
  24. #include "NavRegion.h"
  25. #include "AutoTypeStructs.h"
  26. #include <vector>
  27. #include <list>
  28. #include <map>
  29.  
  30. #include <CryCore/TypeInfo_impl.h>
  31.  
  32. // Enable this to visualise the path radius calculations.
  33. // This will add some extra data to the structures, so it is required to recreate the navigation.
  34. // The extra information will not be saved to the file.
  35. //#define               FLIGHTNAV_DEBUG_SPHERES 1
  36.  
  37. struct IRenderer;
  38. struct I3DEngine;
  39. struct IPhysicalWorld;
  40. struct IGeometry;
  41. struct SpecialArea;
  42. class CGraph;
  43.  
  44. //FlightNav2 uses layered nav mesh containers for convenience reasons
  45. namespace LayeredNavMesh
  46. {
  47. class SpanBuffer;
  48. };
  49.  
  50. struct SpanDesc
  51. {
  52.         int x, y, smin, smax;
  53.  
  54.         //LayeredNavMesh::SpanBuffer::Span span;
  55.  
  56.         // cppcheck-suppress uninitMemberVar
  57.         SpanDesc() : x(-1), y(-1)
  58.         {}
  59.  
  60.         AUTO_STRUCT_INFO;
  61. };
  62.  
  63. class CFlightNavRegion2 : public CNavRegion
  64. {
  65.  
  66. public:
  67.  
  68.         struct NavData
  69.         {
  70.                 uint32 width;
  71.                 uint32 height;
  72.  
  73.                 struct Span
  74.                 {
  75.                         enum Neighbour
  76.                         {
  77.                                 LEFT         = 0,
  78.                                 LEFT_TOP     = 1,
  79.                                 TOP          = 2,
  80.                                 RIGHT_TOP    = 3,
  81.                                 RIGHT        = 4,
  82.                                 RIGHT_BOTTOM = 5,
  83.                                 BOTTOM       = 6,
  84.                                 LEFT_BOTTOM  = 7,
  85.                         };
  86.  
  87.                         float  heightMin;
  88.                         float  heightMax;
  89.                         Span*  next;
  90.                         uint32 flags;
  91.  
  92.                         uint16 neighbours[8][2];
  93.  
  94.                         Span() : heightMin(0.0f), heightMax(0.0f), next(0), flags(0)
  95.                         {
  96.                                 memset(neighbours, 0, 16 * sizeof(neighbours[0][0]));
  97.                         }
  98.  
  99.                         bool Overlaps(const Vec3& pos) const;
  100.                         bool Overlaps(const Span* other, float amount) const;
  101.                         bool GetPortal(const Span* other, float& top, float& bottom, float amount) const;
  102.                 };
  103.  
  104.                 Span*   spans;
  105.                 uint32* grid;
  106.                 uint32  maxSpans;
  107.                 uint32  spanCount;
  108.                 float   horVoxelSize;
  109.                 float   agentHeight;
  110.                 Vec3    basePos;
  111.  
  112.                 NavData() : width(0), height(0), spans(0), grid(0), maxSpans(0), spanCount(0), horVoxelSize(0.0f), agentHeight(0.0f), basePos(ZERO)
  113.                 {}
  114.  
  115.                 NavData(uint32 _width, uint32 _height, uint32 _spanCount);
  116.  
  117.                 ~NavData();
  118.  
  119.                 Span& GetColumn(uint32 x, uint32 y)
  120.                 {
  121.                         Span& ret = (x < width && y < height) ? spans[GetGridCell(x, y)] : spans[0];
  122.  
  123.                         return ret;
  124.                 }
  125.  
  126.                 const Span& GetColumn(uint32 x, uint32 y) const
  127.                 {
  128.                         Span& ret = (x < width && y < height) ? spans[GetGridCell(x, y)] : spans[0];
  129.  
  130.                         return ret;
  131.                 }
  132.  
  133.                 const Span& GetNeighbourColumn(uint x, uint y, Span::Neighbour neihg) const;
  134.  
  135.                 bool        IsSpanValid(const Span& span) const
  136.                 {
  137.                         return (spanCount > 0) && (&span != spans);
  138.                 }
  139.  
  140.                 bool IsSpanValid(const Span* span) const
  141.                 {
  142.                         return ((spanCount > 0) && span && (span != spans));
  143.                 }
  144.  
  145.                 bool IsColumnSet(uint32 x, uint32 y) const
  146.                 {
  147.                         return GetGridCell(x, y) != 0;
  148.                 }
  149.  
  150.                 uint32& GetGridCell(uint32 x, uint32 y)
  151.                 {
  152.                         return grid[x + y * width];
  153.                 }
  154.  
  155.                 const uint32& GetGridCell(uint32 x, uint32 y) const
  156.                 {
  157.                         return grid[x + y * width];
  158.                 }
  159.  
  160.                 const Span* GetSpan(uint32 x, uint32 y, uint32 z) const
  161.                 {
  162.                         return &spans[grid[x + y * width] + z];
  163.                 }
  164.  
  165.                 void GetHorCenter(uint32 x, uint32 y, Vec3& center) const
  166.                 {
  167.                         center = basePos;
  168.                         center.x += x * horVoxelSize + horVoxelSize * 0.5f;
  169.                         center.y += y * horVoxelSize + horVoxelSize * 0.5f;
  170.                 }
  171.  
  172.                 void GetGridOffset(const Vec3& pos, Vec3i& spanPos) const
  173.                 {
  174.                         spanPos.x = static_cast<int>((pos.x - basePos.x) / horVoxelSize);
  175.                         spanPos.y = static_cast<int>((pos.y - basePos.y) / horVoxelSize);
  176.                         spanPos.z = -1;
  177.                 }
  178.  
  179.                 void AddSpan(int x, int y, float minHeight, float maxHeight, uint32 flags = 0);
  180.                 bool GetEnclosing(const Vec3& pos, Vec3i& spanPos, Vec3* outPos = 0) const;
  181.  
  182.                 bool CreateEightConnected();
  183.                 void ConnectDirection(NavData::Span* span, uint32 x, uint32 y, Span::Neighbour dir);
  184.  
  185.                 //Graph traits
  186.                 typedef Vec3  ReferencePointType;
  187.                 typedef Vec3i IndexType;
  188.  
  189.                 Vec3i GetNumNodes() const;
  190.  
  191.                 Vec3i GetBestNodeIndex(Vec3& referencePoint) const;
  192.                 Vec3  GetNodeReferencePoint(Vec3i nodeIndex) const;
  193.  
  194.                 int   GetNumLinks(Vec3i nodeIndex) const;
  195.                 Vec3i GetNextNodeIndex(Vec3i graphNodeIndex, int linkIndex) const;
  196.  
  197.                 //heuristics and cost function
  198.                 float H(const NavData* graph, Vec3i currentNodeIndex, Vec3i endNodeIndex) const;
  199.                 //link traversalcost
  200.                 float GetCost(const NavData* graph, Vec3i currentNodeIndex, Vec3i nextNodeIndex) const;
  201.  
  202.                 void  BeautifyPath(const Vec3& startPos, const Vec3& endPos, const std::vector<Vec3i>& pathRaw, std::vector<Vec3>& pathOut) const;
  203.                 void  AddPathPoint(std::vector<Vec3>& pathOut, const Vec3& newPoint) const;
  204.  
  205.                 //Only for debugging purposes
  206.                 void GetRandomSpan(Vec3i& spanCoord, Vec3& center) const;
  207.                 void GetClosestSpan(const Vec3& pos, Vec3i& spanCoord, Vec3& center) const;
  208.                 void GetSpansAlongLine(const Vec3& startPos, const Vec3& endPos, std::vector<Vec3i>& spanCoords) const;
  209.         };
  210.  
  211. private:
  212.  
  213.         bool CreateEightConnected();
  214.  
  215. public:
  216.         static void InitCVars();
  217.  
  218. public:
  219.  
  220.         CFlightNavRegion2(IPhysicalWorld* pPhysWorld, CGraph* pGraph);
  221.         ~CFlightNavRegion2(void);
  222.  
  223.         virtual void Clear();
  224.  
  225.         // Beautifies path returned by the graph.
  226.         virtual void BeautifyPath(
  227.           const VectorConstNodeIndices& inPath, TPathPoints& outPath,
  228.           const Vec3& startPos, const Vec3& startDir,
  229.           const Vec3& endPos, const Vec3& endDir,
  230.           float radius,
  231.           const AgentMovementAbility& movementAbility,
  232.           const NavigationBlockers& navigationBlockers)
  233.         {}
  234.  
  235.         virtual void UglifyPath(const VectorConstNodeIndices& inPath, TPathPoints& outPath,
  236.                                 const Vec3& startPos, const Vec3& startDir,
  237.                                 const Vec3& endPos, const Vec3& endDir)
  238.         {}
  239.  
  240.         static void DrawPath(const std::vector<Vec3>& path);
  241.  
  242.         // Returns graph node based on the specified location.
  243.         virtual unsigned GetEnclosing(const Vec3& pos, float passRadius = 0.0f, unsigned startIndex = 0,
  244.                                       float range = -1.0f, Vec3* closestValid = 0, bool returnSuspect = false, const char* requesterName = "", bool omitWalkabilityTest = false) { return 0; }
  245.  
  246.         // Returns graph node based on the specified location.
  247.         unsigned       GetEnclosing(int x, int y, const Vec3& pos, Vec3* closestValid = 0, Vec3* spanPos = 0);
  248.  
  249.         const NavData* GetEnclosing(const Vec3& pos, Vec3i& span, Vec3* spanPos = 0) const;
  250.  
  251.         //// Builds the flight navigation from: terrain and static obstacles, limited by the specified special areas.
  252.         //void  Process(I3DEngine* p3DEngine, const std::list<SpecialArea*>& flightAreas);
  253.  
  254.         // Reads the flight navigation from binary file, returns true on success.
  255.         bool ReadFromFile(const char* pName);
  256.  
  257.         /// inherited
  258.         virtual void Serialize(TSerialize ser);
  259.  
  260.         void         DebugDraw() const;
  261.  
  262.         /// inherited
  263.         virtual size_t MemStats() { return 0; }
  264.  
  265. private:
  266.  
  267.         IPhysicalWorld*       m_pPhysWorld;
  268.         CGraph*               m_pGraph;
  269.  
  270.         static int            m_DebugDraw;
  271.  
  272.         std::vector<NavData*> m_FlightNavData;
  273. };
  274.  
  275. #endif //#if !defined(__FLIGHTNAV2_H__)
  276.  
downloadFlightNavRegion2.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