gwnavruntime/navgraph/blobs/navgraphblob.h Source File

navgraphblob.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 // primary contact: JUBA - secondary contact: NOBODY
9 #ifndef Navigation_NavGraphBlob_H
10 #define Navigation_NavGraphBlob_H
11 
15 
16 
17 namespace Kaim
18 {
19 
22 {
23  KY_ROOT_BLOB_CLASS(NavData, NavGraphBlob, 0)
25 public:
26  NavGraphBlob();
27 
28  /* Returns true if the NavGraph contains no vertices at all. */
29  bool IsEmpty() const;
30 
31  KyUInt32 GetVertexCount() const;
32  KyUInt32 GetVertexToConnectCount() const;
33  KyUInt32 GetEdgeCount() const;
34  KyUInt32 GetNavTagCount() const;
35 
36  // vertex data
37  const NavGraphVertex& GetNavGraphVertex(NavGraphVertexIdx vertexIdx) const;
38  const Vec3f& GetNavGraphVertexPosition(NavGraphVertexIdx vertexIdx) const;
39  NavTagIdx GetNavGraphVertexNavTagIdx(NavGraphVertexIdx vertexIdx) const;
40  NavGraphVertexLinkType GetNavGraphVertexConnectionType(NavGraphVertexIdx vertexIdx) const;
41 
42  // edge data
43  const NavGraphEdgeInfo& GetNavGraphEdgeInfo(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const;
44  NavTagIdx GetNavGraphEdgeNavTagIdx(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const;
45 
46  // navTag
47  const NavTag& GetNavTag(NavTagIdx navTagIdx) const;
48 
49  // compute graph aabb
50  Box3f ComputeAABB() const;
51 public:
52  KyUInt32 m_visualDebugId; // unused since NavGraphBlobs were sent into NavGraphArray blob from a NavData
53  BlobArray<char> m_name; // optional, only for Visual Debug
54  BlobArray<NavGraphVertex> m_navGraphVertices;
55  BlobArray<NavTag> m_navTags;
56  KyUInt32 m_edgeCount;
57  KyUInt32 m_vertexToConnectCount;
58 };
59 inline void SwapEndianness(Endianness::Target e, NavGraphBlob& self)
60 {
61  SwapEndianness(e, self.m_visualDebugId);
62  SwapEndianness(e, self.m_name);
63  SwapEndianness(e, self.m_navGraphVertices);
64  SwapEndianness(e, self.m_navTags);
65  SwapEndianness(e, self.m_edgeCount);
66  SwapEndianness(e, self.m_vertexToConnectCount);
67 }
68 
69 KY_INLINE NavGraphBlob::NavGraphBlob() {}
70 KY_INLINE bool NavGraphBlob::IsEmpty() const { return GetVertexCount() == 0; }
71 
72 KY_INLINE KyUInt32 NavGraphBlob::GetEdgeCount() const { return m_edgeCount; }
73 KY_INLINE KyUInt32 NavGraphBlob::GetVertexCount() const { return m_navGraphVertices.GetCount(); }
74 KY_INLINE KyUInt32 NavGraphBlob::GetVertexToConnectCount() const { return m_vertexToConnectCount; }
75 KY_INLINE KyUInt32 NavGraphBlob::GetNavTagCount() const { return m_navTags.GetCount(); }
76 KY_INLINE const Vec3f& NavGraphBlob::GetNavGraphVertexPosition(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetPosition(); }
77 KY_INLINE NavTagIdx NavGraphBlob::GetNavGraphVertexNavTagIdx(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetNavTagIdx(); }
78 KY_INLINE NavGraphVertexLinkType NavGraphBlob::GetNavGraphVertexConnectionType(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetLinkType(); }
79 
80 KY_INLINE NavTagIdx NavGraphBlob::GetNavGraphEdgeNavTagIdx(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const { return GetNavGraphEdgeInfo(edgeIdxInGraph).m_navTagIdx; }
81 
82 KY_INLINE const NavGraphVertex& NavGraphBlob::GetNavGraphVertex(NavGraphVertexIdx vertexIdx) const
83 {
84  KY_ASSERT(vertexIdx < m_navGraphVertices.GetCount());
85  return m_navGraphVertices.GetValues()[vertexIdx];
86 }
87 
88 KY_INLINE const NavGraphEdgeInfo& NavGraphBlob::GetNavGraphEdgeInfo(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const
89 {
90  return GetNavGraphVertex(edgeIdxInGraph.GetStartVertexIdx()).GetNavGraphEdgeInfo(edgeIdxInGraph.GetNeighborVertexIdx());
91 }
92 
93 KY_INLINE const NavTag& NavGraphBlob::GetNavTag(NavTagIdx navTagIdx) const
94 {
95  KY_ASSERT(navTagIdx < m_navTags.GetCount());
96  return m_navTags.GetValues()[navTagIdx];
97 }
98 
99 KY_INLINE Kaim::Box3f NavGraphBlob::ComputeAABB() const
100 {
101  Box3f aabb;
102  const NavGraphVertex* vertices = m_navGraphVertices.GetValues();
103  for (KyUInt32 i = 0; i < m_navGraphVertices.GetCount(); ++i)
104  {
105  aabb.ExpandByVec3(vertices[i].m_position);
106  }
107  return aabb;
108 }
109 
110 } // namespace Kaim
111 
112 
113 #endif // Navigation_NavGraphBlob_H
114 
KyUInt16 NavGraphVertexLinkType
Defines a type for a tag that determines whether or not a vertex in a NavGraph should be connected to...
Definition: navgraphtypes.h:26
The NavGraphBlob contains the static data of a NavGraph.
Definition: navgraphblob.h:21
KyUInt32 NavGraphVertexIdx
An index that uniquely identifies a single vertex within the set of vertices owned by a NavGraph...
Definition: navgraphtypes.h:47
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:387
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
This class represents a three-dimensional axis-aligned bounding box whose dimensions are stored using...
Definition: box3f.h:25
The NavData class is the object containing navigation data that will be added to one Database...
Definition: navdata.h:44
Definition: gamekitcrowddispersion.h:20
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
const T * GetValues() const
Retrieves a const pointer to the data stored in this array.
Definition: blobarray.h:44
This class defines a three-dimensional vector whose coordinates are stored using floating-point numbe...
Definition: vec3f.h:23