37 class QueryOutputBuffer_Impl
40 QueryOutputBuffer_Impl() : m_buffer(nullptr), m_count(0) {}
43 void InitBuffer(
KyUInt32 count,
char*& memory);
45 KyUInt32 GetCount()
const {
return m_count; }
47 const T& Get(
KyUInt32 index)
const { KY_ASSERT(index < m_count);
return m_buffer[index]; }
48 T& Get(
KyUInt32 index) { KY_ASSERT(index < m_count);
return m_buffer[index]; }
50 void Set(
KyUInt32 index,
const T&
object) { KY_ASSERT(index < m_count); m_buffer[index] = object; }
70 KyUInt32 m_costMultiplierSubSegmentCount;
71 KyUInt32 m_halfEdgeIntersectionCount;
80 KyUInt32 GetNavFloorPtrCount()
const {
return m_navFloorPtrs.GetCount(); }
81 KyUInt32 GetNavTrianglePtrCount()
const {
return m_navTrianglePtrs.GetCount(); }
82 KyUInt32 GetNavTagSubSegmentCount()
const {
return m_navTagSubSegments.GetCount(); }
83 KyUInt32 GetCostMultiplierSubSegmentCount()
const {
return m_costMultSubSegments.GetCount(); }
84 KyUInt32 GetHalfEdgeIntersectionCount()
const {
return m_halfEgdeIntersections.GetCount(); }
85 KyUInt32 GetSpatializedPointCount()
const {
return m_spatializedPoints.GetCount(); }
86 KyUInt32 GetTagVolumeCount()
const {
return m_tagVolumes.GetCount(); }
103 const Ptr<SpatializedPoint>& GetSpatializedPoint(
KyUInt32 idx)
const {
return m_spatializedPoints.Get(idx); }
104 Ptr<SpatializedPoint>& GetSpatializedPoint(
KyUInt32 idx) {
return m_spatializedPoints.Get(idx); }
106 const Ptr<TagVolume>& GetTagVolume(
KyUInt32 idx)
const {
return m_tagVolumes.Get(idx); }
107 Ptr<TagVolume>& GetTagVolume(
KyUInt32 idx) {
return m_tagVolumes.Get(idx); }
110 void SetNavFloorPtr(
KyUInt32 idx,
const NavFloorPtr& navFloorPtr) { m_navFloorPtrs.Set(idx, navFloorPtr); }
111 void SetNavTrianglePtr(
KyUInt32 idx,
const NavTrianglePtr& navTrianglePtr) { m_navTrianglePtrs.Set(idx, navTrianglePtr); }
112 void SetNavTagSubSegment(
KyUInt32 idx,
const NavTagSubSegment& navTagSubSegment) { m_navTagSubSegments.Set(idx, navTagSubSegment); }
114 void SetHalfEdgeIntersection(
KyUInt32 idx,
const HalfEdgeIntersection& halfEdgeIntersection) { m_halfEgdeIntersections.Set(idx, halfEdgeIntersection); }
115 void SetSpatializedPoint(
KyUInt32 idx,
const Ptr<SpatializedPoint>& spatializedPoint) { m_spatializedPoints.Set(idx, spatializedPoint); }
116 void SetTagVolume(
KyUInt32 idx,
const Ptr<TagVolume>& tagVolume) { m_tagVolumes.Set(idx, tagVolume); }
118 static KyUInt32 ComputeByteSize(
const Config& config);
119 static Ptr<QueryDynamicOutput> Create(
const Config& config);
122 bool IsEnoughMemoryForStoringDynamicOutput(
const Config& config) {
return ComputeByteSize(config) <= m_byteSize; }
123 void InitBuffers(
const Config& config);
125 bool IsEmpty()
const;
128 QueryOutputBuffer_Impl<NavFloorPtr > m_navFloorPtrs;
129 QueryOutputBuffer_Impl<NavTrianglePtr > m_navTrianglePtrs;
130 QueryOutputBuffer_Impl<NavTagSubSegment > m_navTagSubSegments;
131 QueryOutputBuffer_Impl<HalfEdgeIntersection > m_halfEgdeIntersections;
132 QueryOutputBuffer_Impl<CostMultiplierSubSegment> m_costMultSubSegments;
133 QueryOutputBuffer_Impl<Ptr<SpatializedPoint> > m_spatializedPoints;
134 QueryOutputBuffer_Impl<Ptr<TagVolume> > m_tagVolumes;
141 KY_INLINE
void AddRef() { RefCount ++; }
143 KY_INLINE
void Release()
153 int GetRefCount()
const {
return RefCount; }
156 class ScopedDynamicOutput
159 ScopedDynamicOutput(Ptr<QueryDynamicOutput>& dynamicOutput) : m_queryDynamicOutput(&dynamicOutput) {}
161 ~ScopedDynamicOutput() { CopyCrossedDataIntoDynamicOutput(); }
166 void CopyCrossedDataIntoDynamicOutput();
167 Ptr<QueryDynamicOutput>* m_queryDynamicOutput;
170 WorkingMemArray<NavFloorRawPtr> m_navFloorRawPtrs;
171 WorkingMemArray<NavTriangleRawPtr> m_navTriangleRawPtrs;
172 WorkingMemArray<RawNavTagSubSegment> m_rawNavTagSubSegments;
173 WorkingMemArray<CostMultiplierSubSegment> m_costMultiplierSubSegments;
174 WorkingMemArray<RawHalfEdgeIntersection> m_rawHalfEdgeIntersections;
175 WorkingMemArray<SpatializedPoint*> m_spatializedPoints;
176 WorkingMemArray<TagVolume*> m_tagVolumes;
This class gather the data encountered along some query process.
Definition: querydynamicoutput.h:57
Each instance of this class uniquely identifies a single NavFloor.
Definition: navfloorptr.h:16
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
This class represents a NavTag sub-segment of a ray (within a RayCastQuery or a RayCanGoQuery, carried out against the NavMesh).
Definition: navtagsubsegment.h:39
DynamicOutputMode
Enumerates possible ways of storing collected data by a query in a QueryDynamicOutput object...
Definition: querydynamicoutput.h:21
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
store NavFloorTrianglePtr and NavTagSubSegment arrays
Definition: querydynamicoutput.h:31
store SpatializedPoint array
Definition: querydynamicoutput.h:29
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
do not store anything
Definition: querydynamicoutput.h:23
This class represents a CostMultiplier sub-segment of a ray (within a RayCastQuery or a RayCanGoQuery...
Definition: costmultipliersubsegment.h:21
store triangle edges intersections as Vec3f array
Definition: querydynamicoutput.h:27
store NavFloorTrianglePtr array
Definition: querydynamicoutput.h:25
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
store NavTagSubSegment array
Definition: querydynamicoutput.h:26
store TagVolume array
Definition: querydynamicoutput.h:30
store CostMultiplierSubSegment array
Definition: querydynamicoutput.h:28
This class represents an intersection between an NavHalfEdge and a ray (within a RayCastQuery or a Ra...
Definition: halfedgeintersection.h:38
store NavFloorPtr array
Definition: querydynamicoutput.h:24