gwnavruntime/queries/blobs/spatializedpointsinaabbfromposqueryblob.h Source File

spatializedpointsinaabbfromposqueryblob.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 SpatializedPointCollectorInAABBQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  SpatializedPointCollectorInAABBQueryOutputBlob() : m_result(0) {}
23 
25 public:
26  KyUInt32 m_result;
27  NavTriangleBlob m_startTriangle;
28  QueryDynamicOutputBlob m_queryDynamicOutputBlob;
29 };
30 inline void SwapEndianness(Endianness::Target e, SpatializedPointCollectorInAABBQueryOutputBlob& self)
31 {
32  SwapEndianness(e, self.m_result);
33  SwapEndianness(e, self.m_startTriangle);
34  SwapEndianness(e, self.m_queryDynamicOutputBlob);
35 }
36 
37 
38 class SpatializedPointCollectorInAABBQueryOutputBlobBuilder : public BaseBlobBuilder<SpatializedPointCollectorInAABBQueryOutputBlob>
39 {
40 public:
41  SpatializedPointCollectorInAABBQueryOutputBlobBuilder(BaseSpatializedPointCollectorInAABBQuery* query) { m_query = query; }
42  virtual void DoBuild()
43  {
44  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
45  BLOB_BUILD(m_blob->m_startTriangle, NavTriangleBlobBuilder(m_query->GetStartTrianglePtr()));
46  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
47  if (queryDynamicOutput != nullptr && queryDynamicOutput->IsEmpty() == false)
48  {
49  BUILD_BLOB(m_blob->m_queryDynamicOutputBlob, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
50  }
51  }
52 
53 private:
54  BaseSpatializedPointCollectorInAABBQuery* m_query;
55 };
56 
57 
58 class SpatializedPointCollectorInAABBQueryBlob
59 {
60  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
61  KY_ROOT_BLOB_CLASS(Query, SpatializedPointCollectorInAABBQueryBlob, 0)
62 public:
63  SpatializedPointCollectorInAABBQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
64 
65 public:
66  KyUInt32 m_queryInfoId;
67 
68  KyUInt32 m_databaseIdx;
69  Vec3f m_startPos3f;
70  Box3f m_extentBox;
71  PositionSpatializationRange m_positionSpatializationRange;
72 
73  BlobRef<SpatializedPointCollectorInAABBQueryOutputBlob> m_queryOutput;
74 };
75 inline void SwapEndianness(Endianness::Target e, SpatializedPointCollectorInAABBQueryBlob& self)
76 {
77  SwapEndianness(e, self.m_queryInfoId);
78  SwapEndianness(e, self.m_databaseIdx);
79  SwapEndianness(e, self.m_startPos3f);
80  SwapEndianness(e, self.m_extentBox);
81  SwapEndianness(e, self.m_positionSpatializationRange);
82 
83  SwapEndianness(e, self.m_queryOutput);
84 }
85 
86 class SpatializedPointCollectorInAABBQueryBlobBuilder : public BaseBlobBuilder<SpatializedPointCollectorInAABBQueryBlob>
87 {
88 public:
89  SpatializedPointCollectorInAABBQueryBlobBuilder(BaseSpatializedPointCollectorInAABBQuery* query) { m_query = query; }
90  virtual void DoBuild()
91  {
92  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
93 
94  if (m_query->m_database != nullptr)
95  {
96  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
97  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
98  BLOB_SET(m_blob->m_extentBox , m_query->GetExtentBox());
99  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
100 
101  switch (m_query->GetResult())
102  {
105  break;
106  default:
107  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, SpatializedPointCollectorInAABBQueryOutputBlobBuilder(m_query));
108  break;
109  }
110  }
111  }
112 
113 private:
114  BaseSpatializedPointCollectorInAABBQuery* m_query;
115 };
116 }
117 
#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
SpatializedPointCollectorInAABBQueryResult
Enumerates the possible results of a SpatializedPointCollectorInAABBQuery.
Definition: basespatializedpointcollectorinaabbquery.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
SpatializedPointCollectorInAABBQueryOutputBlob * 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
Indicates that the query has not yet been launched.
Definition: basespatializedpointcollectorinaabbquery.h:24
Indicates that the query has not yet been initialized.
Definition: basespatializedpointcollectorinaabbquery.h:23
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68
#define BUILD_REFERENCED_BLOB(blobRef, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:182