gwnavruntime/queries/spatializedpointcollectorinaabbquery.h Source File

spatializedpointcollectorinaabbquery.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 
9 
17 
18 
19 
20 namespace Kaim
21 {
22 
23 class SpatializedPointCollectorFilter_CollectAll
24 {
25 public:
26  bool ShouldCollectSpatializedPoint(SpatializedPoint* /*spatializedPoint*/) { return true; }
27 };
28 
29 class SpatializedPointCollectorFilter_SelectiveCollect
30 {
31 public:
32  SpatializedPointCollectorFilter_SelectiveCollect()
33  {
34  for (KyUInt32 i = 0; i < SpatializedPointObjectType_Count; ++i)
35  m_selection[i] = false;
36  }
37 
38  void Select(SpatializedPointObjectType type) { m_selection[type] = true; }
39 
40  bool ShouldCollectSpatializedPoint(SpatializedPoint* spatializedPoint)
41  {
42  return m_selection[spatializedPoint->GetObjectType()];
43  }
44 
45 public:
46  bool m_selection[SpatializedPointObjectType_Count];
47 };
48 
52 template <class SpatializedPointCollectorFilter = SpatializedPointCollectorFilter_CollectAll>
54 {
55 public:
56  // ------------------------------ Functions -----------------------------
57 
59  SpatializedPointCollectorInAABBQuery(const SpatializedPointCollectorFilter& collectorFilter);
61 
62  // ---------------------------------- Functions to set up the query ----------------------------------
63 
67  void BindToDatabase(Database* database);
68 
74  void Initialize(const Vec3f& startPos, const Box3f& extentBox);
75 
76  // ---------------------------------- write accessors for query inputs ----------------------------------
77 
81  void SetStartTrianglePtr(const NavTrianglePtr& startTrianglePtr);
82 
85  void SetQueryDynamicOutput(QueryDynamicOutput* queryDynamicOutput);
86 
87  // ---------------------------------- write accessors for query parameters ----------------------------------
88 
92  void SetPositionSpatializationRange(const PositionSpatializationRange& positionSpatializationRange);
93 
94  // ---------------------------------- Query framework functions ----------------------------------
95 
96  virtual void Advance(WorkingMemory* workingMemory);
97 
99  void PerformQuery(WorkingMemory* workingMemory = nullptr);
100 
101  // ------------------------------- Accessors ----------------------------------
102 
104  const Vec3f& GetStartPos() const;
105  const Box3f& GetExtentBox() const;
106  const NavTrianglePtr& GetStartTrianglePtr() const;
107  QueryDynamicOutput* GetQueryDynamicOutput() const;
108 
109  const PositionSpatializationRange& GetPositionSpatializationRange() const;
110 
111 public:
112  void PerformQueryWithInputCoordPos(WorkingMemory* workingMemory);
113  void SetStartIntegerPos(const WorldIntegerPos& startIntegerPos);
114  const WorldIntegerPos& GetStartIntegerPos() const;
115 
116 private:
117  void SetResult(SpatializedPointCollectorInAABBQueryResult result);
118 
119  void RunCollectorTraversal(SpatializedPointCollectorContext* collectorContext, ScopedDynamicOutput& scopedDynamicOutput);
120  KyResult CollectInNavFloor(ScopedDynamicOutput& scopedDynamicOutput, const NavFloorRawPtr& navFloorRawPtr);
121  KyResult CollectInNavGraphEdge(ScopedDynamicOutput& scopedDynamicOutput, const NavGraphEdgeRawPtr& navGraphEdgeRawPtr);
122  KyResult ProcessNavFloorNode(SpatializedPointCollectorContext* collectorContext, ScopedDynamicOutput& scopedDynamicOutput, const NavFloorRawPtr& navFloorRawPtr);
123  KyResult ProcessNavGraphEdgeNode(SpatializedPointCollectorContext* collectorContext, ScopedDynamicOutput& scopedDynamicOutput, const NavGraphEdgeRawPtr& navGraphEdgeRawPtr);
124 public:
125  SpatializedPointCollectorFilter m_spatializedPointCollectorFilter;
126 };
127 
128 }
129 
131 
132 
133 
This class gather the data encountered along some query process.
Definition: querydynamicoutput.h:57
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
SpatializedPointCollectorInAABBQueryResult
Enumerates the possible results of a SpatializedPointCollectorInAABBQuery.
Definition: basespatializedpointcollectorinaabbquery.h:21
void SetQueryDynamicOutput(QueryDynamicOutput *queryDynamicOutput)
Write accessor for m_queryDynamicOutput.
Definition: spatializedpointcollectorinaabbquery.inl:53
Each instance of this class uniquely identifies a single NavGraphEdge in a NavGraph.
Definition: navgraphedgerawptr.h:26
The SpatializedPointCollectorInAABBQuery class retrieves all SpatializedPoints within an Axis-Aligned...
Definition: spatializedpointcollectorinaabbquery.h:53
void PerformQuery(WorkingMemory *workingMemory=nullptr)
If workingMemory param is nullptr, m_database.GetWorkingMemory() will be used.
Definition: spatializedpointcollectorinaabbquery.inl:103
3d axis aligned box of 32bits floating points
Definition: box3f.h:16
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:57
virtual void Advance(WorkingMemory *workingMemory)
This function is called by the QueryQueue to process one step on the query.
Definition: spatializedpointcollectorinaabbquery.inl:31
Navigation return code class.
Definition: types.h:108
SpatializedPointObjectType
Enumerates the possible object types the SpatializedPoint refers to.
Definition: spatializedpoint.h:32
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Base class for SpatializedPointCollectorInAABBQuery.
Definition: basespatializedpointcollectorinaabbquery.h:33
void SetPositionSpatializationRange(const PositionSpatializationRange &positionSpatializationRange)
Defines a range of altitudes around the starting position that will be used to retrieve a NavMesh tri...
Definition: spatializedpointcollectorinaabbquery.inl:43
Utilities for dealing with NavData coordinates, which are expressed in a world space based on integer...
Definition: worldintegerpos.h:19
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
void SetStartTrianglePtr(const NavTrianglePtr &startTrianglePtr)
The NavMesh triangle that corresponds to the starting position.
Definition: spatializedpointcollectorinaabbquery.inl:38
void BindToDatabase(Database *database)
Binds the query with the specified Database, clears all the inputs and outputs and sets all other par...
Definition: spatializedpointcollectorinaabbquery.inl:19
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
3d vector using 32bits floating points.
Definition: vec3f.h:16
Each instance of this class uniquely identifies a single NavFloor.
Definition: navfloorrawptr.h:23