gwnavruntime/queries/utils/pathfinderqueryutils.h Source File

pathfinderqueryutils.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 // Primary contact: JUBA - secondary contact: NOBODY
9 #ifndef Navigation_PathFinderQueryUtils_H
10 #define Navigation_PathFinderQueryUtils_H
11 
20 
26 #include "gwnavruntime/path/path.h"
27 
28 
29 namespace Kaim
30 {
31 class LogicWithoutCostMultipler;
32 class LogicWithCostMultiplerPerNavTag;
33 class LogicWithCostMultiplerPerTriangle;
34 class QueryDynamicOutput;
35 
38 {
39  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
40 
41 public:
43  PathFinderQueryUtils(Database* database, WorkingMemory* workingMemory, void* traverseLogicUserData)
44  {
45  Init(database, workingMemory, traverseLogicUserData);
46  }
47 
48  void Init(Database* database, WorkingMemory* workingMemory, void* traverseLogicUserData)
49  {
50  QueryUtils::Init(database, workingMemory, traverseLogicUserData);
51  }
52 private:
53  enum NearestCornerType
54  {
55  NearestCornerType_Undefined,
56  NearestCornerType_PrevNode,
57  NearestCornerType_InnerCorner,
58  NearestCornerType_NextNode
59  };
60 
61 public:
62  template<class TraverseLogic>
63  KyResult TryToHookOnNavMesh(const Vec3f& inputOutsidePos, const PositionSpatializationRange& positionSpatializationRange,
64  KyFloat32 horizontalHookingMaxDist, KyFloat32 distFromObstacle, Vec3f& outputInsidePos, NavTrianglePtr& outputNavTrianglePtr);
65 
66  KyResult RecomputeCostOnNavMesh(KyUInt32 processedNodeCount);
67 
68  template <class TraverseLogic>
69  KyResult RefineOneNode(const PositionSpatializationRange& positionSpatializationRange, const PathRefinerConfig& pathRefinerConfig, KyUInt32& cangoTestDone);
70 
71  template <class TraverseLogic>
72  Ptr<Path> ComputePathFromPathClamperContext(const Vec3f& realStartPos, const Vec3f& realEndPos, const PositionSpatializationRange& positionSpatializationRange);
73 
74  void BindAndSetRayCastQueryParameters(BaseRayCastQuery& rayCast, const PositionSpatializationRange& positionSpatializationRange, void* traverseLogicUserData);
75  void InitRayCanGoWithCost(BaseRayCanGoQuery& rayCanGo, const Vec3f& startPos, const NavTrianglePtr& startTrianglePtr, const Vec3f& destPos,
76  const WorldIntegerPos& stratIntegerPos, const WorldIntegerPos& destIntegerPos);
77 
78  void BindAndSetRayCanGoQueryParameters(const LogicWithoutCostMultipler&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
79  void BindAndSetRayCanGoQueryParameters(const LogicWithCostMultiplerPerNavTag&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
80  void BindAndSetRayCanGoQueryParameters(const LogicWithCostMultiplerPerTriangle&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
81  void BindAndSetRayCanGoQueryParameters_Impl(BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
82 
83  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithoutCostMultipler&, QueryDynamicOutput* /*queryDynamicOutput*/) { return 1.f; }
84  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithCostMultiplerPerNavTag&, QueryDynamicOutput* queryDynamicOutput) { return GetMaxCostMultiplierFromCanGo_Impl(queryDynamicOutput); }
85  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithCostMultiplerPerTriangle&, QueryDynamicOutput* queryDynamicOutput) { return GetMaxCostMultiplierFromCanGo_Impl(queryDynamicOutput); }
86  static KyFloat32 GetMaxCostMultiplierFromCanGo_Impl(QueryDynamicOutput* queryDynamicOutput);
87 
88  void ComputeRefinerNodeCost(RefinerNode* currentNode);
89  KyResult UpdateNodeInBinaryHeap(RefinerNodeIndex nodeIdx, RefinerNode* currentNode);
90  KyResult BuildRefinerBinaryHeap();
91 
92  KyUInt32 ClampOneEdge(KyUInt32& intersectionTestCount);
93 
94  void DisplayListRefining(const char* queryName);
95  void DisplayListPropagation(const char* queryName);
96  void DisplayListShortestpath(const char* queryName, AStarNodeIndex destNodeIndex = AStarNodeIndex_DestNode);
97 
98  void DisplayConeCastInput(const NavTriangleRawPtr& propagationStartTriangleRawPtr, const Vec3f& currentNodePos, const Vec3f& coneCornerPos,
99  const Vec2f& bissectorAxis, const Vec2f& coneCornerRelativePos, KyFloat32 coneLength);
100  void DisplayConeCastOutput(const Vec3f& currentNodePos, const Vec3f& nearestCorner, NearestCornerType nearestCornerType,
101  KyFloat32 minDist, WorkingMemArray<NavTriangleRawPtr>* visitedNodes);
102  void DisplayRefineOutput(const Vec3f& start, const Vec3f& end, KyFloat32 zOffset, VisualColor color);
103 };
104 
105 
106 
107 
108 
109 }
110 
112 
113 #endif //Navigation_PathFinderQueryUtils_H
114 
This class gather the data encountered along some query process.
Definition: querydynamicoutput.h:61
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
This class is an helper used internaly by the PathFinder Queries to factorize Code.
Definition: pathfinderqueryutils.h:37
Represents a single RGBA color.
Definition: visualcolor.h:19
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:64
This class defines a two-dimensional vector whose coordinates are stored using floating-point numbers...
Definition: vec2f.h:24
Base class for RayCastQuery.
Definition: baseraycastquery.h:47
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtrianglerawptr.h:30
Utilities for dealing with NavData coordinates, which are expressed in a world space based on integer...
Definition: worldintegerpos.h:21
Base class for RayCanGoQuery.
Definition: baseraycangoquery.h:44
This class is an helper used internally by the Queries to factorize Code that is used in many Queries...
Definition: queryutils.h:30
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:22
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43
This class defines a three-dimensional vector whose coordinates are stored using floating-point numbe...
Definition: vec3f.h:23