gwnavruntime/database/navtagptr.h Source File

navtagptr.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 
9 // ---------- Primary contact: JUBA - secondary contact: NOBODY
10 #ifndef Navigation_NavTagPtr_H
11 #define Navigation_NavTagPtr_H
12 
19 
20 namespace Kaim
21 {
22 
25 class NavTagPtr
26 {
27  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
28 
29 public:
30  // ---------------------------------- Constructors ----------------------------------
31 
33  NavTagPtr();
34 
36  NavTagPtr(const NavTrianglePtr& navTrianglePtr);
37 
39  NavTagPtr(const NavGraphEdgePtr& navGraphEdgePtr);
40 
42  NavTagPtr(const NavGraphVertexPtr& navGraphVertexPtr);
43 
44 
45  // ---------------------------------- Main API Functions ----------------------------------
46 
48  bool IsValid() const;
49 
51  void Invalidate();
52 
54  bool operator==(const NavTagPtr& rhs) const;
55 
57  bool operator!=(const NavTagPtr& rhs) const;
58 
59  const NavTag* GetNavTag() const
60  {
61  if(IsValid() == false)
62  return KY_NULL;
63 
64  if(m_navFloorPtr != KY_NULL)
65  return &m_navFloorPtr->m_navTags[m_navTagIdx];
66  else
67  return &m_navGraphPtr->m_navTags[m_navTagIdx];
68  }
69 
70 public: //internal
71  mutable Ptr<NavFloor> m_navFloorPtr;
72  mutable Ptr<NavGraph> m_navGraphPtr;
73  NavTagIdx m_navTagIdx;
74 };
75 
76 KY_INLINE NavTagPtr::NavTagPtr() : m_navTagIdx(NavTagIdx_Invalid) {}
77 KY_INLINE NavTagPtr::NavTagPtr(const NavTrianglePtr& navTrianglePtr)
78 {
79  if (navTrianglePtr.IsValid())
80  {
81  m_navFloorPtr = navTrianglePtr.GetNavFloor();
82  m_navTagIdx = navTrianglePtr.GetNavFloorBlob_Unsafe()->NavTriangleIdxToNavConnexIdx(navTrianglePtr.GetTriangleIdx());
83  }
84 }
85 KY_INLINE NavTagPtr::NavTagPtr(const NavGraphEdgePtr& navGraphEdgePtr)
86 {
87  if (navGraphEdgePtr.IsValid())
88  {
89  m_navGraphPtr = navGraphEdgePtr.GetNavGraph();
90  m_navTagIdx = navGraphEdgePtr.GetNavGraphBlob_UnSafe()->GetNavGraphEdgeNavTagIdx(navGraphEdgePtr.m_edgeSmartIdx);
91  }
92 }
93 KY_INLINE NavTagPtr::NavTagPtr(const NavGraphVertexPtr& navGraphVertexPtr)
94 {
95  if (navGraphVertexPtr.IsValid())
96  {
97  m_navGraphPtr = navGraphVertexPtr.GetNavGraph();
98  m_navTagIdx = navGraphVertexPtr.GetNavGraphBlob_UnSafe()->GetNavGraphVertexNavTagIdx(navGraphVertexPtr.GetNavGraphVertexIdx());
99  }
100 }
101 
102 KY_INLINE void NavTagPtr::Invalidate() { m_navFloorPtr = KY_NULL; m_navGraphPtr = KY_NULL; m_navTagIdx = NavTagIdx_Invalid; }
103 KY_INLINE bool NavTagPtr::IsValid() const { return (m_navFloorPtr != KY_NULL || m_navGraphPtr != KY_NULL) && m_navTagIdx != NavTagIdx_Invalid; }
104 
105 KY_INLINE bool NavTagPtr::operator==(const NavTagPtr& rhs) const { return m_navFloorPtr == rhs.m_navFloorPtr && m_navGraphPtr == rhs.m_navGraphPtr && m_navTagIdx == rhs.m_navTagIdx; }
106 KY_INLINE bool NavTagPtr::operator!=(const NavTagPtr& rhs) const { return m_navFloorPtr != rhs.m_navFloorPtr || m_navGraphPtr != rhs.m_navGraphPtr || m_navTagIdx != rhs.m_navTagIdx; }
107 
108 }
109 
110 #endif //Navigation_NavTagPtr_H
111 
#define KY_NULL
Null value.
Definition: types.h:247
Each instance of this class uniquely identifies a single NavFloor.
Definition: navtagptr.h:26
bool operator!=(const NavTagPtr &rhs) const
Definition: navtagptr.h:119
Definition: gamekitcrowddispersion.h:20
Each instance of this class uniquely identifies a single NavGraphVertex in a NavGraph.
Definition: navgraphvertexptr.h:22
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
bool IsValid() const
Definition: navtagptr.h:116
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:22
NavTagPtr()
Creates an invalid NavTagPtr.
Definition: navtagptr.h:89
Each instance of this class uniquely identifies a single and mono-directionnal NavGraphEdge in a NavG...
Definition: navgraphedgeptr.h:25
void Invalidate()
Invalidates this object.
Definition: navtagptr.h:115
bool operator==(const NavTagPtr &rhs) const
Definition: navtagptr.h:118