10 #ifndef Navigation_NavFloorToNavGraphLinks_H
11 #define Navigation_NavFloorToNavGraphLinks_H
20 class NavGraphVertexRawPtr;
22 typedef TrackedCollection<NavGraphLink*, MemStat_NavData> NavGraphLinkCollection;
24 class NavFloorToNavGraphLinks
29 static KY_INLINE
KyUInt32 GetNumberOfWordsForTriangleLinkStatus(
KyUInt32 numberOfTriangle) {
return BitFieldUtils::GetWordsCount(numberOfTriangle); }
32 NavFloorToNavGraphLinks();
33 ~NavFloorToNavGraphLinks();
37 NavGraphLink* GetNavGraphLink(
KyUInt32 index);
38 const NavGraphLink* GetNavGraphLink(
KyUInt32 index)
const;
40 void AddNavGraphLink(NavGraphLink* navGraphlinkToAdd);
41 void RemoveNavGraphLink(NavGraphLink* navGraphlinkToRemove);
46 void SetAllTriangleAsNotLinked(
KyUInt32 triangleCount);
48 void SetOffsetForTriangleLinkStatus(
char* memoryStartForStatus,
KyUInt32 triangleCount);
50 void OnNavFloorDeActivate(
KyUInt32 navFloorTriangleCount);
53 const KyUInt32* GetBitFieldWords()
const;
56 NavGraphLinkCollection m_navGraphLinks;
59 KY_INLINE NavFloorToNavGraphLinks::NavFloorToNavGraphLinks() : m_offsetToBitField(
KyInt32MAXVAL) {}
60 KY_INLINE NavFloorToNavGraphLinks::~NavFloorToNavGraphLinks() { Clear(); }
62 KY_INLINE
void NavFloorToNavGraphLinks::Clear() { m_navGraphLinks.Clear(); }
63 KY_INLINE
KyUInt32 NavFloorToNavGraphLinks::GetCount()
const {
return m_navGraphLinks.GetCount(); }
64 KY_INLINE NavGraphLink* NavFloorToNavGraphLinks::GetNavGraphLink(
KyUInt32 index) {
return m_navGraphLinks[index]; }
65 KY_INLINE
const NavGraphLink* NavFloorToNavGraphLinks::GetNavGraphLink(
KyUInt32 index)
const {
return m_navGraphLinks[index]; }
67 KY_INLINE
void NavFloorToNavGraphLinks::AddNavGraphLink(NavGraphLink* navGraphlinkToAdd)
69 KY_DEBUG_ERRORN_IF(m_navGraphLinks.DoesContain(navGraphlinkToAdd), (
"this link already exists"));
70 KY_LOG_ERROR_IF(navGraphlinkToAdd->m_navTriangleRawPtr.IsValid() ==
false, (
"this link is not valid"));
71 KY_LOG_ERROR_IF(navGraphlinkToAdd->m_navGraphVertexRawPtr.IsValid() ==
false, (
"this link is not valid"));
72 m_navGraphLinks.PushBack(navGraphlinkToAdd);
73 SetTriangleAsLinked(navGraphlinkToAdd->m_navTriangleRawPtr.GetTriangleIdx());
76 KY_INLINE
bool NavFloorToNavGraphLinks::IsTriangleLinkedToGraph(
NavTriangleIdx navTriangleIdx)
const {
return BitFieldUtils::IsBitSet(GetBitFieldWords(), navTriangleIdx); }
77 KY_INLINE
void NavFloorToNavGraphLinks::SetTriangleAsLinked(
NavTriangleIdx navTriangleIdx) { BitFieldUtils::SetBit(GetBitFieldWords(), navTriangleIdx); }
78 KY_INLINE
void NavFloorToNavGraphLinks::SetTriangleAsNotLinked(
NavTriangleIdx navTriangleIdx) { BitFieldUtils::UnsetBit(GetBitFieldWords(), navTriangleIdx); }
79 KY_INLINE
void NavFloorToNavGraphLinks::SetAllTriangleAsNotLinked(
KyUInt32 triangleCount)
81 memset(GetBitFieldWords(), 0,
sizeof(
KyUInt32) * GetNumberOfWordsForTriangleLinkStatus(triangleCount));
84 KY_INLINE
void NavFloorToNavGraphLinks::SetOffsetForTriangleLinkStatus(
char* memoryStartForStatus,
KyUInt32 triangleCount)
86 m_offsetToBitField = (
KyInt32)(memoryStartForStatus - (
char*)
this);
87 SetAllTriangleAsNotLinked(triangleCount);
90 KY_INLINE
KyUInt32* NavFloorToNavGraphLinks::GetBitFieldWords() {
return (
KyUInt32*)((
char*)
this + m_offsetToBitField); }
91 KY_INLINE
const KyUInt32* NavFloorToNavGraphLinks::GetBitFieldWords()
const {
return (
const KyUInt32*)((
const char*)
this + m_offsetToBitField); }
95 #endif // Navigation_NavFloorToNavGraphLinks_H
KyUInt32 NavTriangleIdx
An index that uniquely identifies a single triangle within the set of triangles owned by a NavFloor...
Definition: navmeshtypes.h:100
int KyInt32
Type used internally to represent a 32-bit integer.
Definition: types.h:35
#define KyInt32MAXVAL
The maximum value that can be stored in the KyInt32 variable type.
Definition: types.h:224
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36