gwnavruntime/navgraph/blobs/navgraphblob.h Source File

navgraphblob.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 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 #pragma once
9 
13 
14 
15 namespace Kaim
16 {
17 
20 {
21  KY_ROOT_BLOB_CLASS(NavData, NavGraphBlob, 0)
23 public:
24  NavGraphBlob();
25 
26  /* Returns true if the NavGraph contains no vertices at all. */
27  bool IsEmpty() const;
28 
29  KyUInt32 GetVertexCount() const;
30  KyUInt32 GetVertexToConnectCount() const;
31  KyUInt32 GetEdgeCount() const;
32  KyUInt32 GetNavTagCount() const;
33 
34  // vertex data
35  const NavGraphVertex& GetNavGraphVertex(NavGraphVertexIdx vertexIdx) const;
36  const Vec3f& GetNavGraphVertexPosition(NavGraphVertexIdx vertexIdx) const;
37  NavTagIdx GetNavGraphVertexNavTagIdx(NavGraphVertexIdx vertexIdx) const;
38  NavGraphVertexLinkType GetNavGraphVertexConnectionType(NavGraphVertexIdx vertexIdx) const;
39 
40  // edge data
41  const NavGraphEdgeInfo& GetNavGraphEdgeInfo(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const;
42  NavTagIdx GetNavGraphEdgeNavTagIdx(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const;
43 
44  // navTag
45  const NavTag& GetNavTag(NavTagIdx navTagIdx) const;
46 
47  // compute graph aabb
48  Box3f ComputeAABB() const;
49 public:
50  KyUInt32 m_visualDebugId; // unused since NavGraphBlobs were sent into NavGraphArray blob from a NavData
51  BlobArray<char> m_name; // optional, only for Visual Debug
52  BlobArray<NavGraphVertex> m_navGraphVertices;
53  BlobArray<NavTag> m_navTags;
54  KyUInt32 m_edgeCount;
55  KyUInt32 m_vertexToConnectCount;
56 };
57 inline void SwapEndianness(Endianness::Target e, NavGraphBlob& self)
58 {
59  SwapEndianness(e, self.m_visualDebugId);
60  SwapEndianness(e, self.m_name);
61  SwapEndianness(e, self.m_navGraphVertices);
62  SwapEndianness(e, self.m_navTags);
63  SwapEndianness(e, self.m_edgeCount);
64  SwapEndianness(e, self.m_vertexToConnectCount);
65 }
66 
67 KY_INLINE NavGraphBlob::NavGraphBlob() {}
68 KY_INLINE bool NavGraphBlob::IsEmpty() const { return GetVertexCount() == 0; }
69 
70 KY_INLINE KyUInt32 NavGraphBlob::GetEdgeCount() const { return m_edgeCount; }
71 KY_INLINE KyUInt32 NavGraphBlob::GetVertexCount() const { return m_navGraphVertices.GetCount(); }
72 KY_INLINE KyUInt32 NavGraphBlob::GetVertexToConnectCount() const { return m_vertexToConnectCount; }
73 KY_INLINE KyUInt32 NavGraphBlob::GetNavTagCount() const { return m_navTags.GetCount(); }
74 KY_INLINE const Vec3f& NavGraphBlob::GetNavGraphVertexPosition(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetPosition(); }
75 KY_INLINE NavTagIdx NavGraphBlob::GetNavGraphVertexNavTagIdx(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetNavTagIdx(); }
76 KY_INLINE NavGraphVertexLinkType NavGraphBlob::GetNavGraphVertexConnectionType(NavGraphVertexIdx vertexIdx) const { return GetNavGraphVertex(vertexIdx).GetLinkType(); }
77 
78 KY_INLINE NavTagIdx NavGraphBlob::GetNavGraphEdgeNavTagIdx(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const { return GetNavGraphEdgeInfo(edgeIdxInGraph).m_navTagIdx; }
79 
80 KY_INLINE const NavGraphVertex& NavGraphBlob::GetNavGraphVertex(NavGraphVertexIdx vertexIdx) const
81 {
82  KY_ASSERT(vertexIdx < m_navGraphVertices.GetCount());
83  return m_navGraphVertices.GetValues()[vertexIdx];
84 }
85 
86 KY_INLINE const NavGraphEdgeInfo& NavGraphBlob::GetNavGraphEdgeInfo(const NavGraphEdgeSmartIdx& edgeIdxInGraph) const
87 {
88  return GetNavGraphVertex(edgeIdxInGraph.GetStartVertexIdx()).GetNavGraphEdgeInfo(edgeIdxInGraph.GetNeighborVertexIdx());
89 }
90 
91 KY_INLINE const NavTag& NavGraphBlob::GetNavTag(NavTagIdx navTagIdx) const
92 {
93  KY_ASSERT(navTagIdx < m_navTags.GetCount());
94  return m_navTags.GetValues()[navTagIdx];
95 }
96 
97 KY_INLINE Kaim::Box3f NavGraphBlob::ComputeAABB() const
98 {
99  Box3f aabb;
100  const NavGraphVertex* vertices = m_navGraphVertices.GetValues();
101  for (KyUInt32 i = 0; i < m_navGraphVertices.GetCount(); ++i)
102  {
103  aabb.ExpandByPos(vertices[i].m_position);
104  }
105  return aabb;
106 }
107 
108 } // namespace Kaim
109 
110 
111 
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:24
The NavGraphBlob contains the static data of a NavGraph.
Definition: navgraphblob.h:19
KyUInt32 NavGraphVertexIdx
An index that uniquely identifies a single vertex within the set of vertices owned by a NavGraph...
Definition: navgraphtypes.h:45
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
3d axis aligned box of 32bits floating points
Definition: box3f.h:16
The NavData class is the object containing navigation data that will be added to one Database...
Definition: navdata.h:39
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
3d vector using 32bits floating points.
Definition: vec3f.h:16