gwnavruntime/queries/diskcastquery.h Source File

diskcastquery.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 // Primary contact: JUBA - secondary contact: NOBODY
8 #ifndef Navigation_DiskCastQuery_H
9 #define Navigation_DiskCastQuery_H
10 
17 
18 namespace Kaim
19 {
20 
21 class NavTriangleRawPtr;
22 
30 template<class TraverseLogic>
31 class DiskCastQuery : public BaseDiskCastQuery
32 {
33 public:
34  // ---------------------------------- Public Member Functions ----------------------------------
35 
36  DiskCastQuery();
37  virtual ~DiskCastQuery() {}
38 
39 
40  // ---------------------------------- Functions to set up the query ----------------------------------
41 
45  void BindToDatabase(Database* database);
46 
54  void Initialize(const Vec3f& startPos, KyFloat32 radius, const Vec2f& normalizedDir2d, KyFloat32 maxDist);
55 
56  // ---------------------------------- write accessors for query inputs ----------------------------------
57 
61  void SetStartTrianglePtr(const NavTrianglePtr& startTrianglePtr);
62 
65  void SetQueryDynamicOutput(QueryDynamicOutput* queryDynamicOutput);
66 
67  // ---------------------------------- write accessors for query parameters ----------------------------------
68 
71  void SetPositionSpatializationRange(const PositionSpatializationRange& positionSpatializationRange);
72 
75  void SetSafetyDist(KyFloat32 safetyDist);
76 
79  void SetQueryType(DiskCastQueryType queryType);
80 
83  void SetDynamicOutputMode(DynamicOutputMode savingMode);
84 
85  // ---------------------------------- Query framework functions ----------------------------------
86 
87  virtual void Advance(WorkingMemory* workingMemory);
88 
92  void PerformQuery(WorkingMemory* workingMemory = KY_NULL);
93 
94  // ---------------------------------- Accessors ----------------------------------
95 
96  DiskCastQueryResult GetResult() const;
97  const Vec3f& GetStartPos() const;
98  const Vec3f& GetCollisionPos() const;
99  const Vec3f& GetArrivalPos() const;
100  const Vec2f& GetNormalizedDir2d() const;
101  const NavTrianglePtr& GetStartTrianglePtr() const;
102  const NavTrianglePtr& GetArrivalTrianglePtr() const;
103  const NavHalfEdgePtr& GetCollisionNavHalfEdgePtr() const;
104  KyFloat32 GetRadius() const;
105  KyFloat32 GetMaxDist() const;
106  KyFloat32 GetSafetyDist() const;
107  DiskCastQueryType GetQueryType() const;
108  DynamicOutputMode GetDynamicOutputMode() const;
109  QueryDynamicOutput* GetQueryDynamicOutput() const;
110  const PositionSpatializationRange& GetPositionSpatializationRange() const;
111 
112 public : // internal
113  void PerformQueryWithInputCoordPos(WorkingMemory* workingMemory);
114  void SetStartIntegerPos(const WorldIntegerPos& startIntegerPos);
115  const WorldIntegerPos& GetStartIntegerPos() const;
116  const WorldIntegerPos& GetArrivalIntegerPos() const;
117 
118 private:
119  void ForceDiskCast(WorkingMemory* workingMemory, const CellBox& cellBox, const NavTriangleRawPtr& startTriangleRawPtr, WorkingMemArray<NavTriangleRawPtr>& visitedTriangles);
120  KyResult RayCastQueryFromStartOnTheRigth(WorkingMemory* workingMemory, RayCastQuery<TraverseLogic>& rayCastQuery,
121  RayCastQueryResult& queryOnRightResult, KyFloat32& borderDistOnRight);
122  KyResult RayCastQueryFromStartOnTheLeft(WorkingMemory* workingMemory, RayCastQuery<TraverseLogic>& rayCastQuery,
123  RayCastQueryResult& queryOnLeftResult, KyFloat32& borderDistOnLeft);
124  KyResult FindDistReachedFromCollisionPos(const NavHalfEdgeRawPtr& intersectedHalfEdgeRaw, const Vec3f& collisionPos, KyFloat32& distReached);
125 };
126 
127 }
128 
130 
131 
132 
133 #endif //Navigation_DiskCastQuery_H
134 
This class gather the data encountered along some query process.
Definition: querydynamicoutput.h:61
This class represents a two-dimensional axis-aligned bounding box whose dimensions are stored using 3...
Definition: box2i.h:119
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
void SetStartTrianglePtr(const NavTrianglePtr &startTrianglePtr)
Set The NavMesh triangle that corresponds to m_startPos3f.
Definition: diskcastquery.inl:28
void SetQueryType(DiskCastQueryType queryType)
Write accessor for m_queryType.
Definition: diskcastquery.inl:34
#define KY_NULL
Null value.
Definition: types.h:247
void PerformQuery(WorkingMemory *workingMemory=0)
Performs the query.
Definition: diskcastquery.inl:88
DynamicOutputMode
Enumerates possible ways of storing crossed data from a query in a QueryDynamicOutput object...
Definition: querydynamicoutput.h:26
RayCastQueryResult
Enumerates the possible results of a RayCastQuery.
Definition: baseraycastquery.h:29
void SetDynamicOutputMode(DynamicOutputMode savingMode)
Write accessor for m_dynamicOutputMode.
Definition: diskcastquery.inl:36
void SetSafetyDist(KyFloat32 safetyDist)
Write accessor for m_safetyDist.
Definition: diskcastquery.inl:32
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:64
void SetQueryDynamicOutput(QueryDynamicOutput *queryDynamicOutput)
Write accessor for m_queryDynamicOutput.
Definition: diskcastquery.inl:38
This class defines a two-dimensional vector whose coordinates are stored using floating-point numbers...
Definition: vec2f.h:24
Definition: gamekitcrowddispersion.h:20
DiskCastQueryType
Enumerates the possible behavior of a BaseDiskCastQuery when the the starting point lies inside the N...
Definition: basediskcastquery.h:44
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:16
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
void SetPositionSpatializationRange(const PositionSpatializationRange &positionSpatializationRange)
Write accessor for m_positionSpatializationRange.
Definition: diskcastquery.inl:40
The RayCastQuery class tests whether a ray (with a width of 0) can be cast from a starting point (m_s...
Definition: raycastquery.h:37
Each instance of this class uniquely identifies a single NavHalfEdge in a NavFloor.
Definition: navhalfedgeptr.h:19
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:22
virtual void Advance(WorkingMemory *workingMemory)
This function is called by the QueryQueue to process one step on the query.
Definition: diskcastquery.inl:80
The DiskCastQuery class tests whether a disk with a specified radius (m_radius) can be cast in a spec...
Definition: diskcastquery.h:33
void Initialize()
Should be called by the derived class before trying to perform the query or to push it in a QueryQueu...
Definition: iquery.h:372
Each instance of this class uniquely identifies a singleNavHalfEdge in a NavFloor.
Definition: navhalfedgerawptr.h:34
DiskCastQueryResult
Enumerates the possible results of a DiskCastQuery.
Definition: basediskcastquery.h:25
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