gwnavruntime/queries/diskcastquery.h Source File

diskcastquery.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 
15 
16 namespace Kaim
17 {
18 
19 class NavTriangleRawPtr;
20 
28 template<class TraverseLogic>
30 {
31 public:
32  // ------------------------------ Functions -----------------------------
33 
34  DiskCastQuery();
35  virtual ~DiskCastQuery() {}
36 
37 
38  // ---------------------------------- Functions to set up the query ----------------------------------
39 
43  void BindToDatabase(Database* database);
44 
52  void Initialize(const Vec3f& startPos, KyFloat32 radius, const Vec2f& normalizedDir2d, KyFloat32 maxDist);
53 
54  // ---------------------------------- write accessors for query inputs ----------------------------------
55 
59  void SetStartTrianglePtr(const NavTrianglePtr& startTrianglePtr);
60 
63  void SetQueryDynamicOutput(QueryDynamicOutput* queryDynamicOutput);
64 
65  // ---------------------------------- write accessors for query parameters ----------------------------------
66 
69  void SetPositionSpatializationRange(const PositionSpatializationRange& positionSpatializationRange);
70 
73  void SetSafetyDist(KyFloat32 safetyDist);
74 
77  void SetQueryType(DiskCastQueryType queryType);
78 
81  void SetDynamicOutputMode(DynamicOutputMode savingMode);
82 
83  // ---------------------------------- Query framework functions ----------------------------------
84 
85  virtual void Advance(WorkingMemory* workingMemory);
86 
88  void PerformQuery(WorkingMemory* workingMemory = nullptr);
89 
90  // ---------------------------------- Accessors ----------------------------------
91 
92  DiskCastQueryResult GetResult() const;
93  const Vec3f& GetStartPos() const;
94  const Vec3f& GetCollisionPos() const;
95  const Vec3f& GetArrivalPos() const;
96  const Vec2f& GetNormalizedDir2d() const;
97  const NavTrianglePtr& GetStartTrianglePtr() const;
98  const NavTrianglePtr& GetArrivalTrianglePtr() const;
99  const NavHalfEdgePtr& GetCollisionNavHalfEdgePtr() const;
100  KyFloat32 GetRadius() const;
101  KyFloat32 GetMaxDist() const;
102  KyFloat32 GetSafetyDist() const;
103  DiskCastQueryType GetQueryType() const;
104  DynamicOutputMode GetDynamicOutputMode() const;
105  QueryDynamicOutput* GetQueryDynamicOutput() const;
106  const PositionSpatializationRange& GetPositionSpatializationRange() const;
107 
108 public: // internal
109  void PerformQueryWithInputCoordPos(WorkingMemory* workingMemory);
110  void SetStartIntegerPos(const WorldIntegerPos& startIntegerPos);
111  const WorldIntegerPos& GetStartIntegerPos() const;
112  const WorldIntegerPos& GetArrivalIntegerPos() const;
113 
114 private:
115  void ForceDiskCast(WorkingMemory* workingMemory, const CellBox& cellBox, const NavTriangleRawPtr& startTriangleRawPtr, WorkingMemArray<NavTriangleRawPtr>& visitedTriangles);
116  KyResult RayCastQueryFromStartOnTheRigth(WorkingMemory* workingMemory, RayCastQuery<TraverseLogic>& rayCastQuery,
117  RayCastQueryResult& queryOnRightResult, KyFloat32& borderDistOnRight);
118  KyResult RayCastQueryFromStartOnTheLeft(WorkingMemory* workingMemory, RayCastQuery<TraverseLogic>& rayCastQuery,
119  RayCastQueryResult& queryOnLeftResult, KyFloat32& borderDistOnLeft);
120  KyResult FindDistReachedFromCollisionPos(const NavHalfEdgeRawPtr& intersectedHalfEdgeRaw, const Vec3f& collisionPos, KyFloat32& distReached);
121 };
122 
123 }
124 
126 
127 
128 
129 
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
void SetStartTrianglePtr(const NavTrianglePtr &startTrianglePtr)
Set The NavMesh triangle that corresponds to m_startPos3f.
Definition: diskcastquery.inl:25
Vertical range (above, below) that represents the altitude tolerance for a position to be inside the ...
Definition: positionspatializationrange.h:17
void SetQueryType(DiskCastQueryType queryType)
Write accessor for m_queryType.
Definition: diskcastquery.inl:31
Base class for DiskCastQuery.
Definition: basediskcastquery.h:63
DynamicOutputMode
Enumerates possible ways of storing collected data by a query in a QueryDynamicOutput object...
Definition: querydynamicoutput.h:21
RayCastQueryResult
Enumerates the possible results of a RayCastQuery.
Definition: baseraycastquery.h:24
void SetDynamicOutputMode(DynamicOutputMode savingMode)
Write accessor for m_dynamicOutputMode.
Definition: diskcastquery.inl:33
void SetSafetyDist(KyFloat32 safetyDist)
Write accessor for m_safetyDist.
Definition: diskcastquery.inl:29
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:57
void SetQueryDynamicOutput(QueryDynamicOutput *queryDynamicOutput)
Write accessor for m_queryDynamicOutput.
Definition: diskcastquery.inl:35
2d vector using KyFloat32.
Definition: vec2f.h:18
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
DiskCastQueryType
Enumerates the possible behavior of a BaseDiskCastQuery when the the starting point lies inside the N...
Definition: basediskcastquery.h:43
void BindToDatabase(Database *database)
Binds the query with the specified Database, clears all the inputs and outputs and sets all other par...
Definition: diskcastquery.inl:13
void PerformQuery(WorkingMemory *workingMemory=nullptr)
If workingMemory param is nullptr, m_database.GetWorkingMemory() will be used.
Definition: diskcastquery.inl:85
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
void SetPositionSpatializationRange(const PositionSpatializationRange &positionSpatializationRange)
Write accessor for m_positionSpatializationRange.
Definition: diskcastquery.inl:37
The RayCastQuery class tests whether a ray (with a width of 0) can be cast from a starting point (m_s...
Definition: raycastquery.h:31
Each instance of this class uniquely identifies a single NavHalfEdge in a NavFloor.
Definition: navhalfedgeptr.h:16
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
virtual void Advance(WorkingMemory *workingMemory)
This function is called by the QueryQueue to process one step on the query.
Definition: diskcastquery.inl:77
The DiskCastQuery class tests whether a disk with a specified radius (m_radius) can be cast in a spec...
Definition: diskcastquery.h:29
void Initialize()
Should be called by the derived class prior to perform the query or to push it in a QueryQueue...
Definition: iquery.h:220
Each instance of this class uniquely identifies a single NavHalfEdge in a NavFloor.
Definition: navhalfedgerawptr.h:23
DiskCastQueryResult
Enumerates the possible results of a DiskCastQuery.
Definition: basediskcastquery.h:23
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16