gwnavruntime/queries/utils/pathfinderqueryutils.h Source File

pathfinderqueryutils.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 
8 #pragma once
9 
18 
24 #include "gwnavruntime/path/path.h"
25 
26 
27 namespace Kaim
28 {
29 class LogicWithNoCustomCost;
30 class LogicWithCostPerNavTag;
31 class LogicWithCostPerTriangle;
32 class QueryDynamicOutput;
33 
36 {
37  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
38 
39 public:
41  PathFinderQueryUtils(Database* database, WorkingMemory* workingMemory, void* traverseLogicUserData)
42  {
43  Init(database, workingMemory, traverseLogicUserData);
44  }
45 
46  void Init(Database* database, WorkingMemory* workingMemory, void* traverseLogicUserData)
47  {
48  QueryUtils::Init(database, workingMemory, traverseLogicUserData);
49  }
50 private:
51  enum NearestCornerType
52  {
53  NearestCornerType_Undefined,
54  NearestCornerType_PrevNode,
55  NearestCornerType_InnerCorner,
56  NearestCornerType_NextNode
57  };
58 
59 public:
60  template<class TraverseLogic>
61  KyResult InsideFromOutside(const Vec3f& inputOutsidePos, const PositionSpatializationRange& positionSpatializationRange,
62  KyFloat32 horizontalHookingMaxDist, KyFloat32 distFromObstacle, Vec3f& outputInsidePos, NavTrianglePtr& outputNavTrianglePtr);
63 
64  KyResult RecomputeCostOnNavMesh(KyUInt32 processedNodeCount);
65 
66  template <class TraverseLogic>
67  KyResult RefineOneNode(const CellBox& cellBox, const PositionSpatializationRange& positionSpatializationRange, const PathRefinerConfig& pathRefinerConfig, KyUInt32& cangoTestDone);
68 
69  template <class TraverseLogic>
70  Ptr<Path> ComputePathFromPathClamperContext(const Vec3f& realStartPos, const Vec3f& realEndPos, const PositionSpatializationRange& positionSpatializationRange);
71 
72  void BindAndSetRayCastQueryParameters(BaseRayCastQuery& rayCast, const PositionSpatializationRange& positionSpatializationRange, void* traverseLogicUserData);
73  void InitRayCanGoWithCost(BaseRayCanGoQuery& rayCanGo, const Vec3f& startPos, const NavTrianglePtr& startTrianglePtr, const Vec3f& destPos,
74  const WorldIntegerPos& stratIntegerPos, const WorldIntegerPos& destIntegerPos);
75 
76  void BindAndSetRayCanGoQueryParameters(const LogicWithNoCustomCost&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
77  void BindAndSetRayCanGoQueryParameters(const LogicWithCostPerNavTag&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
78  void BindAndSetRayCanGoQueryParameters(const LogicWithCostPerTriangle&, BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
79  void BindAndSetRayCanGoQueryParameters_Impl(BaseRayCanGoQuery& canGo, const PositionSpatializationRange& spatializationRange, void* traverseLogicUserData);
80 
81  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithNoCustomCost&, QueryDynamicOutput* /*queryDynamicOutput*/) { return 1.f; }
82  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithCostPerNavTag&, QueryDynamicOutput* queryDynamicOutput) { return GetMaxCostMultiplierFromCanGo_Impl(queryDynamicOutput); }
83  static KyFloat32 GetMaxCostMultiplierFromCanGo(const LogicWithCostPerTriangle&, QueryDynamicOutput* queryDynamicOutput) { return GetMaxCostMultiplierFromCanGo_Impl(queryDynamicOutput); }
84  static KyFloat32 GetMaxCostMultiplierFromCanGo_Impl(QueryDynamicOutput* queryDynamicOutput);
85 
86  void ComputeRefinerNodeCost(RefinerNode* currentNode);
87  KyResult UpdateNodeInBinaryHeap(RefinerNodeIndex nodeIdx, RefinerNode* currentNode);
88  KyResult BuildRefinerBinaryHeap();
89 
90  KyUInt32 ClampOneEdge(KyUInt32& intersectionTestCount);
91 
92  void DisplayListRefining(const char* queryName);
93  void DisplayListPropagation(const char* queryName);
94  void DisplayListShortestpath(const char* queryName, AStarNodeIndex destNodeIndex = AStarNodeIndex_DestNode);
95 
96  void DisplayConeCastInput(const NavTriangleRawPtr& propagationStartTriangleRawPtr, const Vec3f& currentNodePos, const Vec3f& coneCornerPos,
97  const Vec2f& bissectorAxis, const Vec2f& coneCornerRelativePos, KyFloat32 coneLength);
98 
99  void DisplayConeCastOutput(const Vec3f& currentNodePos, const Vec3f& nearestCorner, NearestCornerType nearestCornerType,
100  KyFloat32 minDist, WorkingMemArray<NavTriangleRawPtr>* visitedNodes);
101 
102  void DisplayRefineOutput(const Vec3f& start, const Vec3f& end, KyFloat32 zOffset, Color color);
103 };
104 
105 
106 
107 
108 
109 }
110 
112 
113 
This class gather the data encountered along some query process.
Definition: querydynamicoutput.h:57
2d axis aligned box of 32bits integers. Very Important: CountX() returns m_max.x - m_min...
Definition: box2i.h:17
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Vertical range (above, below) that represents the altitude tolerance for a position to be inside the ...
Definition: positionspatializationrange.h:17
This class is an helper used internally by the PathFinder Queries to factorize Code.
Definition: pathfinderqueryutils.h:35
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Tag type used for function overloading in templates.
Definition: traverselogic.h:69
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:57
2d vector using KyFloat32.
Definition: vec2f.h:18
Navigation return code class.
Definition: types.h:108
Base class for RayCastQuery.
Definition: baseraycastquery.h:43
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Tag type used for function overloading in templates.
Definition: traverselogic.h:59
RGBA color.
Definition: color.h:16
Identifies a single NavTriangle in a NavFloor.
Definition: navtrianglerawptr.h:21
Utilities for dealing with NavData coordinates, which are expressed in a world space based on integer...
Definition: worldintegerpos.h:19
Base class for RayCanGoQuery.
Definition: baseraycangoquery.h:42
This class is an helper used internally by the Queries to factorize Code that is used in many Queries...
Definition: queryutils.h:28
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
Tag type used for function overloading in templates.
Definition: traverselogic.h:64
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16