gwnavruntime/queries/blobs/diskexpansionqueryblob.h Source File

diskexpansionqueryblob.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 namespace Kaim
16 {
17 
18 class DiskExpansionQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  DiskExpansionQueryOutputBlob() : m_result(0) {}
23 
24  DiskExpansionQueryResult GetResult() const { return (DiskExpansionQueryResult)m_result; }
25 public:
26  KyUInt32 m_result;
27  NavTriangleBlob m_centerTriangle;
28  KyFloat32 m_resultRadius;
29  Vec3f m_collisionPos3f;
30  NavHalfEdgeBlob m_collisionHalfEdge;
31  BlobRef<QueryDynamicOutputBlob> m_queryDynamicOutputBlobRef;
32 };
33 inline void SwapEndianness(Endianness::Target e, DiskExpansionQueryOutputBlob& self)
34 {
35  SwapEndianness(e, self.m_result );
36  SwapEndianness(e, self.m_centerTriangle );
37  SwapEndianness(e, self.m_resultRadius );
38  SwapEndianness(e, self.m_collisionPos3f );
39  SwapEndianness(e, self.m_collisionHalfEdge );
40  SwapEndianness(e, self.m_queryDynamicOutputBlobRef);
41 }
42 
43 
44 class DiskExpansionQueryOutputBlobBuilder : public BaseBlobBuilder<DiskExpansionQueryOutputBlob>
45 {
46  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
47 public:
48  DiskExpansionQueryOutputBlobBuilder(BaseDiskExpansionQuery* query) { m_query = query; }
49  virtual void DoBuild()
50  {
51  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
52 
53  BLOB_BUILD(m_blob->m_centerTriangle , NavTriangleBlobBuilder(m_query->GetCenterTrianglePtr()));
54  BLOB_SET(m_blob->m_resultRadius , m_query->GetResultRadius());
55  BLOB_SET(m_blob->m_collisionPos3f , m_query->GetCollisionPos());
56  BLOB_BUILD(m_blob->m_collisionHalfEdge, NavHalfEdgeBlobBuilder(m_query->GetCollisionNavHalfEdgePtr()));
57 
58  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
59  if (queryDynamicOutput != nullptr && queryDynamicOutput->IsEmpty() == false)
60  {
61  BUILD_REFERENCED_BLOB(m_blob->m_queryDynamicOutputBlobRef, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
62  }
63  }
64 
65 private:
66  BaseDiskExpansionQuery* m_query;
67 };
68 
69 class DiskExpansionQueryBlob
70 {
71  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
72  KY_ROOT_BLOB_CLASS(Query, DiskExpansionQueryBlob, 0)
73 public:
74  DiskExpansionQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
75 
76  DynamicOutputMode GetDynamicOutputMode() const { return (DynamicOutputMode)m_dynamicOutputMode; }
77 
78 public:
79  KyUInt32 m_queryInfoId;
80 
81  KyUInt32 m_databaseIdx;
82  Vec3f m_centerPos3f;
83  KyFloat32 m_radiusMax;
84  KyFloat32 m_safetyDist;
85  PositionSpatializationRange m_positionSpatializationRange;
86  KyUInt32 m_dynamicOutputMode;
87 
88  BlobRef<DiskExpansionQueryOutputBlob> m_queryOutput;
89 };
90 inline void SwapEndianness(Endianness::Target e, DiskExpansionQueryBlob& self)
91 {
92  SwapEndianness(e, self.m_queryInfoId);
93  SwapEndianness(e, self.m_databaseIdx);
94  SwapEndianness(e, self.m_centerPos3f);
95  SwapEndianness(e, self.m_radiusMax);
96  SwapEndianness(e, self.m_safetyDist);
97  SwapEndianness(e, self.m_positionSpatializationRange);
98  SwapEndianness(e, self.m_dynamicOutputMode);
99 
100  SwapEndianness(e, self.m_queryOutput);
101 }
102 
103 
104 
105 class DiskExpansionQueryBlobBuilder : public BaseBlobBuilder<DiskExpansionQueryBlob>
106 {
107  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
108 public:
109  DiskExpansionQueryBlobBuilder(BaseDiskExpansionQuery* query) { m_query = query; }
110  virtual void DoBuild()
111  {
112  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
113 
114  if (m_query->m_database != nullptr)
115  {
116  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
117  BLOB_SET(m_blob->m_centerPos3f , m_query->GetCenterPos());
118  BLOB_SET(m_blob->m_radiusMax , m_query->GetRadiusMax());
119  BLOB_SET(m_blob->m_safetyDist , m_query->GetSafetyDist());
120  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
121  BLOB_SET(m_blob->m_dynamicOutputMode , (KyUInt32)m_query->GetDynamicOutputMode());
122 
123  switch (m_query->GetResult())
124  {
127  break;
128  default:
129  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, DiskExpansionQueryOutputBlobBuilder(m_query));
130  break;
131  }
132  }
133  }
134 
135 private:
136  BaseDiskExpansionQuery* m_query;
137 };
138 }
139 
Indicates the query has not yet been initialized.
Definition: basediskexpansionquery.h:21
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:130
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:175
DiskExpansionQueryResult
Enumerates the possible results of a DiskExpansionQuery.
Definition: basediskexpansionquery.h:19
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
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
Indicates the query has not yet been launched.
Definition: basediskexpansionquery.h:22
DiskExpansionQueryOutputBlob * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:113
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68
float KyFloat32
float
Definition: types.h:32
#define BUILD_REFERENCED_BLOB(blobRef, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:182