9 #ifndef Navigation_PolylineCastHelper_H
10 #define Navigation_PolylineCastHelper_H
25 class PolylineCastHelper
31 static
KyResult RetrieveTriangleFromStartToEnd(WorkingMemory* workingMemory, Database* database, const Vec3f& start, const Vec3f& end,
32 NavTrianglePtr& inAndOutStartTrianglePtr, NavTrianglePtr& outStartTrianglePtr, Ptr<QueryDynamicOutput>& dynamicOutput);
34 template<class TLogic>
35 static
KyResult RunPolylineCastInTrapeze(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
36 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector, const Vec3f& pathEdgeStart, const Vec3f& pathEdgeEnd,
37 const Vec3f& pointOnStartSideLeft, const Vec3f& pointOnEndSideLeft, const Vec3f& pointOnStartSideRight, const Vec3f& pointOnEndSideRight);
39 template<class TLogic>
40 static
KyResult RunPolylineCastInTriangle(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
41 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector, const Vec3f& pathEdgeStart, const Vec3f& pathEdgeEnd,
42 const Vec3f& pointOnStartSideLeft, const Vec3f& pointOnStartSideRight, const Vec3f& pointOnEndSideLeft, const Vec3f& pointOnEndSideRight);
44 template<class TLogic>
45 static
KyResult RunPolylineCastInTriangleOnLeft(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
46 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector, const Vec3f& pathEdgeStart, const Vec3f& pathEdgeEnd,
47 const Vec3f& pointOnStartSideLeft, const Vec3f& pointOnStartSideRight, const Vec3f& pointOnEndSideRight);
49 template<class TLogic>
50 static
KyResult RunPolylineCastInTriangleOnRight(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
51 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector, const Vec3f& pathEdgeStart, const Vec3f& pathEdgeEnd,
52 const Vec3f& pointOnStartSideLeft, const Vec3f& pointOnEndSideLeft, const Vec3f& pointOnEndSideRight);
54 template<class TLogic>
55 static
KyResult RunPolylineCast(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector);
59 template<class TLogic>
60 inline
KyResult PolylineCastHelper::RunPolylineCastInTrapeze(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
61 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector, const Vec3f& pathEdgeStart, const Vec3f& pathEdgeEnd,
62 const Vec3f& pointOnStartSideLeft, const Vec3f& pointOnEndSideLeft, const Vec3f& pointOnStartSideRight, const Vec3f& pointOnEndSideRight)
64 intersector.InitTrapezoid(pathEdgeStart, pathEdgeEnd, pointOnStartSideLeft, pointOnEndSideLeft, pointOnStartSideRight, pointOnEndSideRight, database->GetDatabaseGenMetrics());
65 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, queryDynamicOutput, intersector);
68 template<
class TLogic>
69 inline KyResult PolylineCastHelper::RunPolylineCastInTriangle(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
70 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector,
const Vec3f& pathEdgeStart,
const Vec3f& pathEdgeEnd,
71 const Vec3f& pointOnStartSideLeft,
const Vec3f& pointOnStartSideRight,
const Vec3f& pointOnEndSideLeft,
const Vec3f& pointOnEndSideRight)
73 KY_ASSERT(pointOnStartSideLeft == pointOnEndSideLeft || pointOnStartSideRight == pointOnEndSideRight);
74 if (pointOnStartSideLeft == pointOnEndSideLeft)
75 return RunPolylineCastInTriangleOnLeft<TLogic>(workingMemory, database, traverseLogicUserData, queryDynamicOutput, intersector, pathEdgeStart,
76 pathEdgeEnd, pointOnStartSideLeft, pointOnStartSideRight, pointOnEndSideRight);
78 return RunPolylineCastInTriangleOnRight<TLogic>(workingMemory, database, traverseLogicUserData, queryDynamicOutput, intersector, pathEdgeStart,
79 pathEdgeEnd, pointOnStartSideLeft, pointOnStartSideRight, pointOnEndSideLeft);
82 template<
class TLogic>
83 inline KyResult PolylineCastHelper::RunPolylineCastInTriangleOnLeft(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
84 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector,
const Vec3f& pathEdgeStart,
const Vec3f& pathEdgeEnd,
85 const Vec3f& pointOnStartSideLeft,
const Vec3f& pointOnStartSideRight,
const Vec3f& pointOnEndSideRight)
87 intersector.InitTriangleAroundLeft(pathEdgeStart, pathEdgeEnd, pointOnStartSideLeft, pointOnStartSideRight, pointOnEndSideRight,database->GetDatabaseGenMetrics());
88 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, queryDynamicOutput, intersector);
91 template<
class TLogic>
92 inline KyResult PolylineCastHelper::RunPolylineCastInTriangleOnRight(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
93 QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector,
const Vec3f& pathEdgeStart,
const Vec3f& pathEdgeEnd,
94 const Vec3f& pointOnStartSideLeft,
const Vec3f& pointOnStartSideRight,
const Vec3f& pointOnEndSideLeft)
96 intersector.InitTriangleAroundRight(pathEdgeStart, pathEdgeEnd, pointOnStartSideLeft, pointOnEndSideLeft, pointOnStartSideRight, database->GetDatabaseGenMetrics());
97 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, queryDynamicOutput, intersector);
100 template<
class TLogic>
101 inline KyResult PolylineCastHelper::RunPolylineCast(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* queryDynamicOutput, PolylineCastIntersector& intersector)
103 if (queryDynamicOutput ==
KY_NULL || queryDynamicOutput->GetNavTrianglePtrCount() == 0)
106 QueryUtils queryUtils(database, workingMemory,traverseLogicUserData);
107 BestFirstSearch2dBorderCollector<TLogic, PolylineCastIntersector> edgeIntersectionVisitor(traverseLogicUserData, intersector);
108 BestFirstSearchTraversal<BestFirstSearch2dBorderCollector<TLogic, PolylineCastIntersector> > traversalForPolylineCast(queryUtils, database->GetActiveData()->GetCellBox(),
109 edgeIntersectionVisitor);
111 if (traversalForPolylineCast.IsInitialized() ==
false)
114 for(
KyUInt32 i = 0; i < queryDynamicOutput->GetNavTrianglePtrCount(); ++i)
116 const NavTrianglePtr& triangle = queryDynamicOutput->GetNavTrianglePtr(i);
117 if (traversalForPolylineCast.SetStartTriangle(triangle.GetRawPtr()) != TraversalResult_DONE)
121 if (traversalForPolylineCast.Search() != TraversalResult_DONE)
128 #endif //Navigation_PolylineCastHelper_H
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
#define KY_NULL
Null value.
Definition: types.h:247
Definition: gamekitcrowddispersion.h:20
#define KY_SUCCESS
Shorthand for Kaim::Result::Success.
Definition: types.h:273
#define KY_ERROR
Shorthand for Kaim::Result::Failure.
Definition: types.h:272
#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