gwnavruntime/queries/blobs/raycangoqueryblob.h Source File

raycangoqueryblob.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 RayCanGoQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  RayCanGoQueryOutputBlob() : m_result(0), m_cost(KyFloat32MAXVAL) {}
23 
24  RayCanGoQueryResult GetResult() const { return (RayCanGoQueryResult)m_result; }
25 public:
26  KyUInt32 m_result;
27  KyFloat32 m_cost;
28  NavTriangleBlob m_startTriangle;
29  NavTriangleBlob m_destTriangle;
30  BlobRef<QueryDynamicOutputBlob> m_queryDynamicOutputBlobRef;
31 };
32 inline void SwapEndianness(Endianness::Target e, RayCanGoQueryOutputBlob& self)
33 {
34  SwapEndianness(e, self.m_result);
35  SwapEndianness(e, self.m_cost);
36  SwapEndianness(e, self.m_startTriangle);
37  SwapEndianness(e, self.m_destTriangle);
38  SwapEndianness(e, self.m_queryDynamicOutputBlobRef);
39 }
40 
41 
42 class RayCanGoQueryOutputBlobBuilder : public BaseBlobBuilder<RayCanGoQueryOutputBlob>
43 {
44 public:
45  RayCanGoQueryOutputBlobBuilder(BaseRayCanGoQuery* query) { m_query = query; }
46  virtual void DoBuild()
47  {
48  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
49  BLOB_SET(m_blob->m_cost, m_query->GetComputedCost());
50  BLOB_BUILD(m_blob->m_startTriangle, NavTriangleBlobBuilder(m_query->GetStartTrianglePtr()));
51  BLOB_BUILD(m_blob->m_destTriangle, NavTriangleBlobBuilder(m_query->GetDestTrianglePtr()));
52  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
53  if (queryDynamicOutput != nullptr && queryDynamicOutput->IsEmpty() == false)
54  {
55  BUILD_REFERENCED_BLOB(m_blob->m_queryDynamicOutputBlobRef, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
56  }
57  }
58 
59 private:
60  BaseRayCanGoQuery* m_query;
61 };
62 
63 
64 class RayCanGoQueryBlob
65 {
66  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
67  KY_ROOT_BLOB_CLASS(Query, RayCanGoQueryBlob, 1)
68 public:
69  RayCanGoQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
70 
71  DynamicOutputMode GetDynamicOutputMode() const { return (DynamicOutputMode)m_dynamicOutputMode; }
72  ComputeCostMode GetComputeCostMode() const { return (ComputeCostMode)m_computeCostMode; }
73 
74 public:
75  KyUInt32 m_queryInfoId;
76 
77  KyUInt32 m_databaseIdx;
78  Vec3f m_startPos3f;
79  Vec3f m_destPos3f;
80  PositionSpatializationRange m_positionSpatializationRange;
81  KyUInt32 m_marginMode;
82  KyUInt32 m_dynamicOutputMode;
83  KyUInt32 m_computeCostMode;
84 
85  KyFloat32 m_margin; // The float value corresponding to m_marginMode.
86  BlobRef<RayCanGoQueryOutputBlob> m_queryOutput;
87 };
88 inline void SwapEndianness(Endianness::Target e, RayCanGoQueryBlob& self)
89 {
90  SwapEndianness(e, self.m_queryInfoId);
91  SwapEndianness(e, self.m_databaseIdx);
92  SwapEndianness(e, self.m_startPos3f);
93  SwapEndianness(e, self.m_destPos3f);
94  SwapEndianness(e, self.m_positionSpatializationRange);
95  SwapEndianness(e, self.m_marginMode);
96  SwapEndianness(e, self.m_dynamicOutputMode);
97  SwapEndianness(e, self.m_computeCostMode);
98 
99  SwapEndianness(e, self.m_margin);
100  SwapEndianness(e, self.m_queryOutput);
101 }
102 
103 class RayCanGoQueryBlobBuilder : public BaseBlobBuilder<RayCanGoQueryBlob>
104 {
105 public:
106  RayCanGoQueryBlobBuilder(BaseRayCanGoQuery* query) { m_query = query; }
107  virtual void DoBuild()
108  {
109  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
110 
111  if (m_query->m_database != nullptr)
112  {
113  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
114  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
115  BLOB_SET(m_blob->m_destPos3f , m_query->GetDestPos());
116  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
117  BLOB_SET(m_blob->m_marginMode , (KyUInt32)m_query->GetMarginMode());
118  BLOB_SET(m_blob->m_dynamicOutputMode , (KyUInt32)m_query->GetDynamicOutputMode());
119  BLOB_SET(m_blob->m_computeCostMode , (KyUInt32)m_query->GetComputeCostMode());
120 
121  BLOB_SET(m_blob->m_margin, m_query->m_database->GetRayCanGoMarginFloat(m_query->GetMarginMode()));
122 
123  switch (m_query->GetResult())
124  {
127  break;
128  default:
129  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, RayCanGoQueryOutputBlobBuilder(m_query));
130  break;
131  }
132  }
133  }
134 
135 private:
136  BaseRayCanGoQuery* m_query;
137 };
138 }
139 
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:130
#define KyFloat32MAXVAL
KyFloat32 max value
Definition: types.h:71
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Indicates that the query has not yet been launched.
Definition: baseraycangoquery.h:27
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:175
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
ComputeCostMode
Enumerates the possible ways a RayCanGoQuery can compute the cost of following the ray...
Definition: rayqueryutils.h:33
RayCanGoQueryOutputBlob * 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 initialized.
Definition: baseraycangoquery.h:26
RayCanGoQueryResult
Enumerates the possible results of a RayCanGoQuery.
Definition: baseraycangoquery.h:24
#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