17 class NavGraphVertexRawPtr;
19 typedef TrackedCollection<NavGraphLink*, MemStat_NavData> NavGraphLinkCollection;
21 class NavFloorToNavGraphLinks
26 static KY_INLINE
KyUInt32 GetNumberOfWordsForTriangleLinkStatus(
KyUInt32 numberOfTriangle) {
return BitFieldUtils::GetWordsCount(numberOfTriangle); }
29 NavFloorToNavGraphLinks();
30 ~NavFloorToNavGraphLinks();
34 NavGraphLink* GetNavGraphLink(
KyUInt32 index);
35 const NavGraphLink* GetNavGraphLink(
KyUInt32 index)
const;
37 void AddNavGraphLink(NavGraphLink* navGraphlinkToAdd);
38 void RemoveNavGraphLink(NavGraphLink* navGraphlinkToRemove);
43 void SetAllTriangleAsNotLinked(
KyUInt32 triangleCount);
45 void SetOffsetForTriangleLinkStatus(
char* memoryStartForStatus,
KyUInt32 triangleCount);
47 void OnNavFloorDeActivate(
KyUInt32 navFloorTriangleCount);
50 const KyUInt32* GetBitFieldWords()
const;
53 NavGraphLinkCollection m_navGraphLinks;
56 KY_INLINE NavFloorToNavGraphLinks::NavFloorToNavGraphLinks() : m_offsetToBitField(
KyInt32MAXVAL) {}
57 KY_INLINE NavFloorToNavGraphLinks::~NavFloorToNavGraphLinks() { Clear(); }
59 KY_INLINE
void NavFloorToNavGraphLinks::Clear() { m_navGraphLinks.Clear(); }
60 KY_INLINE
KyUInt32 NavFloorToNavGraphLinks::GetCount()
const {
return m_navGraphLinks.GetCount(); }
61 KY_INLINE NavGraphLink* NavFloorToNavGraphLinks::GetNavGraphLink(
KyUInt32 index) {
return m_navGraphLinks[index]; }
62 KY_INLINE
const NavGraphLink* NavFloorToNavGraphLinks::GetNavGraphLink(
KyUInt32 index)
const {
return m_navGraphLinks[index]; }
64 KY_INLINE
void NavFloorToNavGraphLinks::AddNavGraphLink(NavGraphLink* navGraphlinkToAdd)
66 KY_DEBUG_ERRORN_IF(m_navGraphLinks.DoesContain(navGraphlinkToAdd), (
"this link already exists"));
67 KY_LOG_ERROR_IF(navGraphlinkToAdd->m_navTriangleRawPtr.IsValid() ==
false, (
"this link is not valid"));
68 KY_LOG_ERROR_IF(navGraphlinkToAdd->m_navGraphVertexRawPtr.IsValid() ==
false, (
"this link is not valid"));
69 m_navGraphLinks.PushBack(navGraphlinkToAdd);
70 SetTriangleAsLinked(navGraphlinkToAdd->m_navTriangleRawPtr.GetTriangleIdx());
73 KY_INLINE
bool NavFloorToNavGraphLinks::IsTriangleLinkedToGraph(
NavTriangleIdx navTriangleIdx)
const {
return BitFieldUtils::IsBitSet(GetBitFieldWords(), navTriangleIdx); }
74 KY_INLINE
void NavFloorToNavGraphLinks::SetTriangleAsLinked(
NavTriangleIdx navTriangleIdx) { BitFieldUtils::SetBit(GetBitFieldWords(), navTriangleIdx); }
75 KY_INLINE
void NavFloorToNavGraphLinks::SetTriangleAsNotLinked(
NavTriangleIdx navTriangleIdx) { BitFieldUtils::UnsetBit(GetBitFieldWords(), navTriangleIdx); }
76 KY_INLINE
void NavFloorToNavGraphLinks::SetAllTriangleAsNotLinked(
KyUInt32 triangleCount)
78 memset(GetBitFieldWords(), 0,
sizeof(
KyUInt32) * GetNumberOfWordsForTriangleLinkStatus(triangleCount));
81 KY_INLINE
void NavFloorToNavGraphLinks::SetOffsetForTriangleLinkStatus(
char* memoryStartForStatus,
KyUInt32 triangleCount)
83 m_offsetToBitField = (
KyInt32)(memoryStartForStatus - (
char*)
this);
84 SetAllTriangleAsNotLinked(triangleCount);
87 KY_INLINE
KyUInt32* NavFloorToNavGraphLinks::GetBitFieldWords() {
return (
KyUInt32*)((
char*)
this + m_offsetToBitField); }
88 KY_INLINE
const KyUInt32* NavFloorToNavGraphLinks::GetBitFieldWords()
const {
return (
const KyUInt32*)((
const char*)
this + m_offsetToBitField); }
KyUInt32 NavTriangleIdx
An index that uniquely identifies a single triangle within the set of triangles owned by a NavFloor...
Definition: navmeshtypes.h:97
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
#define KyInt32MAXVAL
KyInt32 max value
Definition: types.h:60
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
std::int32_t KyInt32
int32_t
Definition: types.h:24