7 #ifndef Navigation_AbstractGraphFloorBlob_H
8 #define Navigation_AbstractGraphFloorBlob_H
20 class AbstractGraphFloorBlob
22 KY_ROOT_BLOB_CLASS(NavData, AbstractGraphFloorBlob, 0)
24 AbstractGraphFloorBlob();
27 KyUInt32 GetLocalNodeIdx(AbstractGraphNodeIdx graphNodeIdx) const;
30 const AbstractGraphVertex& GetAbstractGraphVertex(AbstractGraphNodeIdx graphNodeIdx) const;
31 KyFloat32 GetAltitude(AbstractGraphNodeIdx graphNodeIdx) const;
32 CardinalDir GetCellBoundaryDir(AbstractGraphNodeIdx graphNodeIdx) const;
34 const AbstractGraphVertex& GetAbstractGraphVertexFromLocalIdx(
KyUInt32 localIdx) const;
42 AbstractGraphNodeIdx m_abstractGraphNodeFirstIdx;
43 KyUInt16 m_firstIdxForCellBoundaryDir[4];
44 KyUInt16 m_countForCellBoundaryDir[4];
46 BlobArray<AbstractGraphVertex> m_nodeVertices;
49 inline
void SwapEndianness(Endianness::Target e, AbstractGraphFloorBlob& self)
51 SwapEndianness(e,
self.m_originalNavFloorIdx);
52 SwapEndianness(e,
self.m_abstractGraphNodeFirstIdx);
53 SwapEndianness(e,
self.m_firstIdxForCellBoundaryDir[0]);
54 SwapEndianness(e,
self.m_firstIdxForCellBoundaryDir[1]);
55 SwapEndianness(e,
self.m_firstIdxForCellBoundaryDir[2]);
56 SwapEndianness(e,
self.m_firstIdxForCellBoundaryDir[3]);
57 SwapEndianness(e,
self.m_countForCellBoundaryDir[0]);
58 SwapEndianness(e,
self.m_countForCellBoundaryDir[1]);
59 SwapEndianness(e,
self.m_countForCellBoundaryDir[2]);
60 SwapEndianness(e,
self.m_countForCellBoundaryDir[3]);
61 SwapEndianness(e,
self.m_altitudes);
62 SwapEndianness(e,
self.m_nodeVertices);
66 KY_INLINE
KyUInt32 AbstractGraphFloorBlob::GetNodeIdx(
KyUInt32 localNodeIdx)
const
68 return localNodeIdx + m_abstractGraphNodeFirstIdx;
71 KY_INLINE
KyUInt32 AbstractGraphFloorBlob::GetLocalNodeIdx(AbstractGraphNodeIdx graphNodeIdx)
const
73 KY_ASSERT(graphNodeIdx >= m_abstractGraphNodeFirstIdx);
74 KY_ASSERT(graphNodeIdx < (m_abstractGraphNodeFirstIdx + m_countForCellBoundaryDir[0] + m_countForCellBoundaryDir[1] + m_countForCellBoundaryDir[2] + m_countForCellBoundaryDir[3]));
75 return graphNodeIdx - m_abstractGraphNodeFirstIdx;
78 KY_INLINE
const AbstractGraphVertex& AbstractGraphFloorBlob::GetAbstractGraphVertex(AbstractGraphNodeIdx graphNodeIdx)
const
80 return GetAbstractGraphVertexFromLocalIdx(GetLocalNodeIdx(graphNodeIdx));
83 KY_INLINE
KyFloat32 AbstractGraphFloorBlob::GetAltitude(AbstractGraphNodeIdx graphNodeIdx)
const
85 return GetAltitudeFromLocalIdx(GetLocalNodeIdx(graphNodeIdx));
88 KY_INLINE
const AbstractGraphVertex& AbstractGraphFloorBlob::GetAbstractGraphVertexFromLocalIdx(
KyUInt32 localIdx)
const
90 return m_nodeVertices.GetValues()[localIdx];
93 KY_INLINE
KyFloat32 AbstractGraphFloorBlob::GetAltitudeFromLocalIdx(
KyUInt32 localIdx)
const
95 return m_altitudes.GetValues()[localIdx];
98 KY_INLINE
CardinalDir AbstractGraphFloorBlob::GetCellBoundaryDir(AbstractGraphNodeIdx graphNodeIdx)
const
100 return GetCellBoundaryDirFromLocalIdx(GetLocalNodeIdx(graphNodeIdx));
KyUInt32 CardinalDir
Defines a type that refers to one of the cardinal points on the compass:
Definition: cardinaldir.h:23
KyUInt32 NavFloorIdx
An index that uniquely identifies a single NavFloor within the set of NavFloors owned by a NavCell...
Definition: navmeshtypes.h:115
Definition: gamekitcrowddispersion.h:20
unsigned short KyUInt16
Type used internally to represent an unsigned 16-bit integer.
Definition: types.h:40
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43