gwnavruntime/navmesh/identifiers/navhalfedgerawptr.h Source File

navhalfedgerawptr.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 #pragma once
8 
12 
13 namespace Kaim
14 {
15 
24 {
25  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
26 
27 public:
29  NavHalfEdgeRawPtr(const NavFloorRawPtr& navFloorRawPtr, NavHalfEdgeIdx halfEdgeIdx);
30  NavHalfEdgeRawPtr(NavFloor* navFloor, NavHalfEdgeIdx halfEdgeIdx);
31 
32  void Set(const NavFloorRawPtr& navFloorRawPtr, NavHalfEdgeIdx halfEdgeIdx);
33  void Set(NavFloor* navFloor, NavHalfEdgeIdx halfEdgeIdx);
34 
36  bool IsValid() const;
37 
38  void Invalidate();
39 
40  bool operator==(const NavHalfEdgeRawPtr& rhs) const;
41  bool operator!=(const NavHalfEdgeRawPtr& rhs) const;
42 
43  NavHalfEdgeIdx GetHalfEdgeIdx() const;
44 
45  // ---------------------------------- Member Functions for valid instance ----------------------------------
47 
48  NavHalfEdge GetHalfEdge() const;
49  NavHalfEdgeType GetHalfEdgeType() const;
50 
51  NavFloor* GetNavFloor() const;
52  const NavFloorBlob* GetNavFloorBlob() const;
53 
54  const CellPos& GetCellPos() const;
55  const NavTag& GetNavTag() const;
56 
57  Vec3f GetStartVertexPos3f() const;
58  Vec3f GetEndVertexPos3f() const;
59 
61  void GetTriangleVerticesPos3f(Vec3f& start, Vec3f& end, Vec3f& next) const;
62 
63  void GetVerticesPos3f(Vec3f& start, Vec3f& end) const;
64 
65  Vec3f GetMiddlePos3f() const;
66 
67  CoordPos64 GetStartVertexCoordPos64() const;
68  CoordPos64 GetEndVertexCoordPos64() const;
69 
70  KyFloat32 GetStartVertexAltitude() const;
71  KyFloat32 GetEndVertexAltitude() const;
72 
75 
77  template<class TLogic>
78  bool IsHalfEdgeCrossable(void* traverseLogicUserData) const;
79 
81  bool IsHalfEdgeCrossable() const;
82 
84  template<class TLogic>
85  bool IsHalfEdgeCrossable(void* traverseLogicUserData, NavHalfEdgeRawPtr& pair) const;
86 
88  bool IsHalfEdgeCrossable(NavHalfEdgeRawPtr& resultRawPtr) const;
89 
91  template<class TLogic>
92  bool IsStartVertexOnBorder(void* traverseLogicUserData) const;
93 
95  bool IsStartVertexOnBorder() const;
96 
97  void GetPairHalfEdgeRawPtr(NavHalfEdgeRawPtr& pair) const;
98  void GetNextHalfEdgeRawPtr(NavHalfEdgeRawPtr& next) const;
99  void GetPrevHalfEdgeRawPtr(NavHalfEdgeRawPtr& prev) const;
100 
103  template<class TLogic>
104  NavHalfEdgeRawPtr GetNextNavHalfEdgeRawPtrAlongBorder(void* traverseLogicUserData) const;
105 
108  template<class TLogic>
109  NavHalfEdgeRawPtr GetPrevNavHalfEdgeRawPtrAlongBorder(void* traverseLogicUserData) const;
110 
113  bool IsMinimumAmongPairs() const;
114 
115 public: // internal
116  NavHalfEdgeRawPtr& GetCorrespondingLink();
117 
118  template<class TLogic> bool IsHalfEdgeCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr) const;
119  template<class TLogic> bool IsHalfEdgeCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr) const;
120  template<class TLogic> bool IsHalfEdgeCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, KyFloat32* costMultiplier) const;
121 
122  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, const Vec3f* position) const;
123  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, NavHalfEdgeRawPtr& resultRawPtr, const Vec3f* position) const;
124  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, const Vec3f* position) const;
125  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, const Vec3f* position, KyFloat32* costMultiplier) const;
126  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, KyFloat32* costMultiplier) const;
127 
128  template<class TLogic> bool IsPairedEdgeCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* /*costMultiplier*/, const LogicWithNoCustomCost&) const;
129  template<class TLogic> bool IsPairedEdgeCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* costMultiplier, const LogicWithCostPerNavTag&) const;
130  template<class TLogic> bool IsPairedEdgeCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* costMultiplier, const LogicWithCostPerTriangle&) const;
131 
132  template<class TLogic> bool IsConnexBoundaryCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* /*costMultiplier*/, const LogicWithNoCustomCost&) const;
133  template<class TLogic> bool IsConnexBoundaryCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* costMultiplier, const LogicWithCostPerNavTag&) const;
134  template<class TLogic> bool IsConnexBoundaryCrossable(void* traverseLogicUserData, const NavFloorBlob* navFloorBlob, NavTriangleIdx pairTriangleIdx, KyFloat32* costMultiplier, const LogicWithCostPerTriangle&) const;
135 
136  template<class TLogic> bool IsFloorOrCellLinkCrossable(void* traverseLogicUserData, const NavHalfEdgeRawPtr& link, KyFloat32* costMultiplier, const LogicWithNoCustomCost&) const;
137  template<class TLogic> bool IsFloorOrCellLinkCrossable(void* traverseLogicUserData, const NavHalfEdgeRawPtr& link, KyFloat32* costMultiplier, const LogicWithCostPerNavTag&) const;
138  template<class TLogic> bool IsFloorOrCellLinkCrossable(void* traverseLogicUserData, const NavHalfEdgeRawPtr& link, KyFloat32* costMultiplier, const LogicWithCostPerTriangle&) const;
139 
140  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, const Vec3f* position, KyFloat32* costMultiplier, const LogicDoNotUseCanEnterNavTag&) const;
141  template<class TLogic> bool IsHalfEdgeOneWayCrossable(void* traverseLogicUserData, NavHalfEdge navHalfEdge, const NavFloorBlob* navFloorBlob, NavHalfEdgeRawPtr& resultRawPtr, const Vec3f* position, KyFloat32* costMultiplier, const LogicDoUseCanEnterNavTag&) const;
142 
143  void GetVerticesPos3f(KyFloat32 integerPrecision, const CoordPos64& cellOrigin, const NavFloorBlob* navFloorBlob, Vec3f& v0Pos3f, Vec3f& v1Pos3f) const;
144 
145 public:
147  CompactNavHalfEdgeIdx m_halfEdgeIdx;
149 };
150 
151 }
152 
154 
155 
bool IsValid() const
Returns m_navFloorRawPtr.IsValid(). NavHalfEdgeRawPtr validity can be changed when the NavMesh in the...
Definition: navhalfedgerawptr.inl:34
Vec3f GetStartVertexPos3f() const
Does set the z coordinate.
Definition: navhalfedgerawptr.cpp:104
bool IsStartVertexOnBorder() const
Returns true if one of the edges starting from start cannot be traversed using DefaultTraverseLogic.
Definition: navhalfedgerawptr.inl:327
KyUInt32 NavTriangleIdx
An index that uniquely identifies a single triangle within the set of triangles owned by a NavFloor...
Definition: navmeshtypes.h:97
NavHalfEdgeRawPtr GetNextNavHalfEdgeRawPtrAlongBorder(void *traverseLogicUserData) const
Returns the next edge along the border of the NavMesh using {TLogic, traverseLogicUserData}.
Definition: navhalfedgerawptr.inl:333
This class is a runtime wrapper of a NavFloorBlob, it gathers all the runtime information associated ...
Definition: navfloor.h:32
The NavFloorBlob contains a connected and not overlapping part of triangle mesh static data within a ...
Definition: navfloorblob.h:38
void GetPrevHalfEdgeRawPtr(NavHalfEdgeRawPtr &prev) const
Updates prev to identify the previous edge in the triangle.
Definition: navhalfedgerawptr.inl:54
void GetTriangleVerticesPos3f(Vec3f &start, Vec3f &end, Vec3f &next) const
next is the vertex in the (start->end->next) triangle
Definition: navhalfedgerawptr.cpp:14
CompactNavHalfEdgeIdx m_halfEdgeIdx
The index of this edge within its NavFloor.
Definition: navhalfedgerawptr.h:147
NavHalfEdgeRawPtr GetPrevNavHalfEdgeRawPtrAlongBorder(void *traverseLogicUserData) const
Returns the previous edge along the border of the NavMesh using {TLogic, traverseLogicUserData}.
Definition: navhalfedgerawptr.inl:360
KyUInt32 NavHalfEdgeIdx
An index that uniquely identifies a single edge of a triangle within the set of edges owned by a NavF...
Definition: navmeshtypes.h:84
CoordPos GetStartVertexCoordPosInCell() const
Returns the start 2D integer coordinates (in pixels) relative to its NavCell origin.
Definition: navhalfedgerawptr.inl:50
2d vector using KyInt64
Definition: vec2ll.h:18
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
std::uint16_t KyUInt16
uint16_t
Definition: types.h:28
void GetNextHalfEdgeRawPtr(NavHalfEdgeRawPtr &next) const
Updates next to identify the next edge in the triangle.
Definition: navhalfedgerawptr.inl:53
Tag type used for function overloading in templates.
Definition: traverselogic.h:69
void GetPairHalfEdgeRawPtr(NavHalfEdgeRawPtr &pair) const
Updates pair to identify the edge in the adjacent triangle that borders this edge.
Definition: navhalfedgerawptr.cpp:154
Vec3f GetEndVertexPos3f() const
Does set the z coordinate.
Definition: navhalfedgerawptr.cpp:125
2d vector using KyInt32
Definition: vec2i.h:18
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Tag type used for function overloading in templates.
Definition: traverselogic.h:59
NavHalfEdge GetHalfEdge() const
All these function should be called only if IsValid() returns true.
Definition: navhalfedgerawptr.inl:56
CoordPos GetEndVertexCoordPosInCell() const
Returns the end 2D integer coordinates (in pixels) relative to its NavCell origin.
Definition: navhalfedgerawptr.inl:51
Each instance of NavHalfEdge represents a single edge of a single triangle within the NavMesh...
Definition: navhalfedge.h:17
NavHalfEdgeType
Enumerates the possible types of boundary that can be represented by a NavHalfEdge.
Definition: navmeshtypes.h:49
bool IsHalfEdgeCrossable() const
Returns true if this edge is not on an external boundary of the NavMesh and not a internal edge that ...
Definition: navhalfedgerawptr.inl:83
void Invalidate()
Invalidates this object.
Definition: navhalfedgerawptr.inl:35
Tag type used for function overloading in templates.
Definition: traverselogic.h:64
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:54
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:51
KyUInt16 m_boundaryEdgeIdx
Use internally to speed up stitching. Do not modify.
Definition: navhalfedgerawptr.h:148
Each instance of this class uniquely identifies a single NavHalfEdge in a NavFloor.
Definition: navhalfedgerawptr.h:23
NavFloorRawPtr m_navFloorRawPtr
The NavFloor that contains this edge.
Definition: navhalfedgerawptr.h:146
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16
Each instance of this class uniquely identifies a single NavFloor.
Definition: navfloorrawptr.h:23
bool IsMinimumAmongPairs() const
returns !IsHalfEdgeCrossable() || GetStartVertexCoordPosInCell() < getendvertexcoordposincell()="" this="" />
Definition: navhalfedgerawptr.inl:377