gwnavruntime/queries/blobs/insideposfromoutsideposqueryblob.h Source File

insideposfromoutsideposqueryblob.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 InsidePosFromOutsidePosQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  InsidePosFromOutsidePosQueryOutputBlob() : m_result(0) {}
23 
24  InsidePosFromOutsidePosQueryResult GetResult() const { return (InsidePosFromOutsidePosQueryResult)m_result; }
25 public:
26  KyUInt32 m_result;
27  Vec3f m_insidePos3f;
28  NavTriangleBlob m_insidePosTriangle;
29 };
30 inline void SwapEndianness(Endianness::Target e, InsidePosFromOutsidePosQueryOutputBlob& self)
31 {
32  SwapEndianness(e, self.m_result);
33  SwapEndianness(e, self.m_insidePos3f);
34  SwapEndianness(e, self.m_insidePosTriangle);
35 }
36 
37 
38 class InsidePosFromOutsidePosQueryOutputBlobBuilder : public BaseBlobBuilder<InsidePosFromOutsidePosQueryOutputBlob>
39 {
40 public:
41  InsidePosFromOutsidePosQueryOutputBlobBuilder(BaseInsidePosFromOutsidePosQuery* query) { m_query = query; }
42  virtual void DoBuild()
43  {
44  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
45  BLOB_SET(m_blob->m_insidePos3f, m_query->GetInsidePos());
46  BLOB_BUILD(m_blob->m_insidePosTriangle, NavTriangleBlobBuilder(m_query->GetInsidePosTrianglePtr()));
47  }
48 
49 private:
50  BaseInsidePosFromOutsidePosQuery* m_query;
51 };
52 
53 
54 class InsidePosFromOutsidePosQueryBlob
55 {
56  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
57  KY_ROOT_BLOB_CLASS(Query, InsidePosFromOutsidePosQueryBlob, 0)
58 public:
59  InsidePosFromOutsidePosQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
60 
61 public:
62  KyUInt32 m_queryInfoId;
63 
64  KyUInt32 m_databaseIdx;
65  Vec3f m_inputPos3f;
66  Vec2f m_castDirection; // set to Vec2f(KyFloat32MAXVAL, KyFloat32MAXVAL) is queryMode is INSIDEPOSFROMOUTSIDE_FROM_NEAREST_HALFEDGE
67  KyFloat32 m_distFromObstacle;
68  KyFloat32 m_horizontalTolerance;
69  PositionSpatializationRange m_positionSpatializationRange;
70 
71  BlobRef<InsidePosFromOutsidePosQueryOutputBlob> m_queryOutput;
72 };
73 inline void SwapEndianness(Endianness::Target e, InsidePosFromOutsidePosQueryBlob& self)
74 {
75  SwapEndianness(e, self.m_queryInfoId );
76  SwapEndianness(e, self.m_databaseIdx );
77  SwapEndianness(e, self.m_inputPos3f );
78  SwapEndianness(e, self.m_castDirection );
79  SwapEndianness(e, self.m_distFromObstacle );
80  SwapEndianness(e, self.m_horizontalTolerance);
81  SwapEndianness(e, self.m_positionSpatializationRange);
82 
83  SwapEndianness(e, self.m_queryOutput);
84 }
85 
86 class InsidePosFromOutsidePosQueryBlobBuilder : public BaseBlobBuilder<InsidePosFromOutsidePosQueryBlob>
87 {
88 public:
89  InsidePosFromOutsidePosQueryBlobBuilder(BaseInsidePosFromOutsidePosQuery* 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_inputPos3f , m_query->GetInputPos());
98  BLOB_SET(m_blob->m_castDirection , m_query->GetCastDirection());
99  BLOB_SET(m_blob->m_distFromObstacle , m_query->GetDistFromObstacle());
100  BLOB_SET(m_blob->m_horizontalTolerance , m_query->GetHorizontalTolerance());
101  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
102 
103  switch (m_query->GetResult())
104  {
107  break;
108  default:
109  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, InsidePosFromOutsidePosQueryOutputBlobBuilder(m_query));
110  break;
111  }
112  }
113  }
114 
115 private:
116  BaseInsidePosFromOutsidePosQuery* m_query;
117 };
118 }
119 
InsidePosFromOutsidePosQueryResult
Enumerates the possible results of an InsidePosFromOutsidePosQuery.
Definition: baseinsideposfromoutsideposquery.h:20
#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 initialized.
Definition: baseinsideposfromoutsideposquery.h:22
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
#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
InsidePosFromOutsidePosQueryOutputBlob * 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 the query has not yet been launched.
Definition: baseinsideposfromoutsideposquery.h:23
#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