gwnavruntime/queries/blobs/diskcangoqueryblob.h Source File

diskcangoqueryblob.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 
13 
14 namespace Kaim
15 {
16 
17 class DiskCanGoQueryOutputBlob
18 {
19  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
20 public:
21  DiskCanGoQueryOutputBlob() : m_result(0) {}
22 
23  DiskCanGoQueryResult GetResult() const { return (DiskCanGoQueryResult)m_result; }
24 public:
25  KyUInt32 m_result;
26  NavTriangleBlob m_startTriangle;
27  NavTriangleBlob m_destTriangle;
28  BlobRef<QueryDynamicOutputBlob> m_queryDynamicOutputBlobRef;
29 };
30 inline void SwapEndianness(Endianness::Target e, DiskCanGoQueryOutputBlob& self)
31 {
32  SwapEndianness(e, self.m_result);
33  SwapEndianness(e, self.m_startTriangle);
34  SwapEndianness(e, self.m_destTriangle);
35  SwapEndianness(e, self.m_queryDynamicOutputBlobRef);
36 }
37 
38 
39 class DiskCanGoQueryOutputBlobBuilder : public BaseBlobBuilder<DiskCanGoQueryOutputBlob>
40 {
41 public:
42  DiskCanGoQueryOutputBlobBuilder(BaseDiskCanGoQuery* query) { m_query = query; }
43  virtual void DoBuild()
44  {
45  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
46  BLOB_BUILD(m_blob->m_startTriangle, NavTriangleBlobBuilder(m_query->GetStartTrianglePtr()));
47  BLOB_BUILD(m_blob->m_destTriangle, NavTriangleBlobBuilder(m_query->GetDestTrianglePtr()));
48  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
49  if (queryDynamicOutput != nullptr && queryDynamicOutput->IsEmpty() == false)
50  {
51  BUILD_REFERENCED_BLOB(m_blob->m_queryDynamicOutputBlobRef, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
52  }
53  }
54 
55 private:
56  BaseDiskCanGoQuery* m_query;
57 };
58 
59 
60 
61 class DiskCanGoQueryBlob
62 {
63  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
64  KY_ROOT_BLOB_CLASS(Query, DiskCanGoQueryBlob, 0)
65 public:
66  DiskCanGoQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
67 
68  DynamicOutputMode GetDynamicOutputMode() const { return (DynamicOutputMode)m_dynamicOutputMode; }
69 
70 public:
71  KyUInt32 m_queryInfoId;
72 
73  KyUInt32 m_databaseIdx;
74  Vec3f m_startPos3f;
75  Vec3f m_destPos3f;
76  KyFloat32 m_radius;
77  PositionSpatializationRange m_positionSpatializationRange;
78  KyUInt32 m_dynamicOutputMode;
79 
80  BlobRef<DiskCanGoQueryOutputBlob> m_queryOutput;
81 };
82 inline void SwapEndianness(Endianness::Target e, DiskCanGoQueryBlob& self)
83 {
84  SwapEndianness(e, self.m_queryInfoId);
85  SwapEndianness(e, self.m_databaseIdx);
86  SwapEndianness(e, self.m_startPos3f);
87  SwapEndianness(e, self.m_destPos3f);
88  SwapEndianness(e, self.m_radius);
89  SwapEndianness(e, self.m_positionSpatializationRange);
90  SwapEndianness(e, self.m_dynamicOutputMode);
91 
92  SwapEndianness(e, self.m_queryOutput);
93 }
94 
95 class DiskCanGoQueryBlobBuilder : public BaseBlobBuilder<DiskCanGoQueryBlob>
96 {
97 public:
98  DiskCanGoQueryBlobBuilder(BaseDiskCanGoQuery* query) { m_query = query; }
99  virtual void DoBuild()
100  {
101  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
102 
103  if (m_query->m_database != nullptr)
104  {
105  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
106  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
107  BLOB_SET(m_blob->m_destPos3f , m_query->GetDestPos());
108  BLOB_SET(m_blob->m_radius , m_query->GetRadius());
109  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
110  BLOB_SET(m_blob->m_dynamicOutputMode , (KyUInt32)m_query->GetDynamicOutputMode());
111 
112  switch (m_query->GetResult())
113  {
116  break;
117  default:
118  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, DiskCanGoQueryOutputBlobBuilder(m_query));
119  break;
120  }
121  }
122  }
123 
124 private:
125  BaseDiskCanGoQuery* m_query;
126 };
127 }
128 
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:130
Indicates the query has not yet been launched.
Definition: basediskcangoquery.h:20
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
Indicates the query has not yet been initialized.
Definition: basediskcangoquery.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
DiskCanGoQueryResult
Enumerates the possible results of a DiskCanGoQuery.
Definition: basediskcangoquery.h:17
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
DiskCanGoQueryOutputBlob * 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