gwnavruntime/queries/findfirstvisiblepositiononpathquery.h Source File

findfirstvisiblepositiononpathquery.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 
14 
15 
16 namespace Kaim
17 {
18 
23 template<class TraverseLogic>
25 {
26 public:
27  // ------------------------------ Functions -----------------------------
28 
31 
32  // ---------------------------------- Functions to set up the query ----------------------------------
33 
37  void BindToDatabase(Database* database);
38 
45  void Initialize(const PositionOnPath& startPositionOnPath, const PositionOnPath& endPositionOnPath, const Vec3f& visibilityStartPoint);
46 
47  // ---------------------------------- write accessors for query inputs ----------------------------------
48 
52  void SetVisibilityStartTrianglePtr(const NavTrianglePtr& visibilityStartTrianglePtr);
53 
54  // ---------------------------------- write accessors for query parameters ----------------------------------
55 
56  void SetSamplingDistance(KyFloat32 samplingDistance);
57 
61  void SetRayCanGoMarginMode(RayCanGoMarginMode rayCanGoMarginMode);
62 
63 
64  // ---------------------------------- Query framework functions ----------------------------------
65 
66  virtual void Advance(WorkingMemory* workingMemory);
67 
69  void PerformQuery(WorkingMemory* workingMemory = nullptr);
70 
71  // ---------------------------------- Accessors ----------------------------------
72 
74  const PositionOnPath& GetStartPositionOnPath() const;
75  const PositionOnPath& GetEndPositionOnPath() const;
76  const Vec3f& GetVisibilityStartPoint() const;
77  const NavTrianglePtr& GetVisibilityStartTrianglePtr() const;
78  KyFloat32 GetSamplingDistance() const;
79  const PositionOnPath& GetFirstVisiblePositionOnPath() const;
80 
81 private:
82  CandidateValidationResult ValidateCandidate(
83  RayCanGoQuery<TraverseLogic>& rayCanGoQuery, const PositionOnPath& candidate, WorkingMemory* workingMemory);
84 
85 public:
86  DisplayList* m_displayList;
87 };
88 
89 // Small utility class that simply wrap a WorkingMemArray<PositionOnPath> to clean it correctly in destructor.
90 class PositionOnPathWorkingMemArray
91 {
92 public:
93  PositionOnPathWorkingMemArray() {}
94 
95  KyResult BindToDatabase(WorkingMemory* workingMemory, KyUInt32 capacity)
96  {
97  m_array.Init(workingMemory);
98 
99  if (m_array.IsInitialized() == false)
100  return KY_ERROR;
101 
102  return m_array.SetMinimumCapacity(capacity);
103  }
104 
105  KyResult PushBack(const PositionOnPath& positionOnPath)
106  {
107  return m_array.PushBack(InternalPositionOnPath(positionOnPath));
108  }
109 
110  void GetPositionOnPath(KyUInt32 index, PositionOnPath& positionOnPath) const
111  {
112  m_array[index].CopyToPositionOnPath(positionOnPath);
113  }
114 
115  KyUInt32 GetCount() const { return m_array.GetCount(); }
116 
117 private:
118  class InternalPositionOnPath
119  {
120  public:
121  InternalPositionOnPath(const PositionOnPath& positionOnPath)
122  {
123  positionOnPath.GetRawValues(m_path, m_position, m_onPathStatus, m_currentIndexOnPath, m_distanceToEndOfPath);
124  }
125 
126  void CopyToPositionOnPath(PositionOnPath& positionOnPath) const
127  {
128  positionOnPath.SetRawValues(m_path, m_position, m_onPathStatus, m_currentIndexOnPath, m_distanceToEndOfPath);
129  }
130 
131  Path* m_path;
132  Vec3f m_position;
133  PositionOnPathStatus m_onPathStatus;
134  KyUInt32 m_currentIndexOnPath;
135  KyFloat32 m_distanceToEndOfPath;
136  };
137 
138  WorkingMemArray<InternalPositionOnPath> m_array;
139 };
140 
141 //class PositionOnPathWorkingMemArray
142 //{
143 //public:
144 // PositionOnPathWorkingMemArray(WorkingMemory* /*workingMemory*/, KyUInt32 /*capacity*/) {}
145 //
146 // KyArray<PositionOnPath> m_array;
147 //};
148 
149 }
150 
152 
153 
154 
FindFirstVisiblePositionOnPathQueryResult
Enumerates the possible results of a FindFirstVisiblePositionOnPathQuery.
Definition: basefindfirstvisiblepositiononpathquery.h:19
Base class for FindFirstVisiblePositionOnPathQuery.
Definition: basefindfirstvisiblepositiononpathquery.h:34
virtual void Advance(WorkingMemory *workingMemory)
This function is called by the QueryQueue to process one step on the query.
Definition: findfirstvisiblepositiononpathquery.inl:76
This class aggregates all necessary information about a position on a Path.
Definition: positiononpath.h:29
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
void SetRayCanGoMarginMode(RayCanGoMarginMode rayCanGoMarginMode)
Sets the RayCanGoMarginMode value to be used in the ray can go queries.
Definition: findfirstvisiblepositiononpathquery.inl:39
PositionOnPathStatus
< enumerates="" the="" different="" status="" an="" objectpositiononpath="" can="" have="" on="" its="" path.="" />
Definition: positiononpath.h:17
void PerformQuery(WorkingMemory *workingMemory=nullptr)
If workingMemory param is nullptr, m_database.GetWorkingMemory() will be used.
Definition: findfirstvisiblepositiononpathquery.inl:83
void SetVisibilityStartTrianglePtr(const NavTrianglePtr &visibilityStartTrianglePtr)
Set The NavMesh triangle that corresponds to m_visibilityStartPos3f.
Definition: findfirstvisiblepositiononpathquery.inl:30
The RayCanGoQuery tests if a ray can go from start to dest on the navmesh.
Definition: raycangoquery.h:20
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:57
RayCanGoMarginMode
Defines the different mode for the NavMesh border margin to be used in RayCanGo queries.
Definition: database.h:37
DisplayList is used to push text, lines or shapes for rendering in the NavigationLab e...
Definition: displaylist.h:128
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KY_ERROR
use result == KY_ERROR to test for error
Definition: types.h:132
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
The FindFirstVisiblePositionOnPathQuery class searches for a PositionOnPath that can be reached from ...
Definition: findfirstvisiblepositiononpathquery.h:24
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
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16
void BindToDatabase(Database *database)
Binds the query with the specified Database, clears all the inputs and outputs and sets all other par...
Definition: findfirstvisiblepositiononpathquery.inl:17