gwnavruntime/collision/collisionraycastqueryblob.h Source File

collisionraycastqueryblob.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 #pragma once
8 
12 
13 namespace Kaim
14 {
15 
16 class CollisionRayCastQueryOutputBlob
17 {
18  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
19 public:
20  CollisionRayCastQueryOutputBlob() : m_result(0) {}
21  CollisionRayCastResult GetResult() const { return (CollisionRayCastResult)m_result; }
22 public:
23  KyUInt32 m_result;
24 };
25 inline void SwapEndianness(Endianness::Target e, CollisionRayCastQueryOutputBlob& self)
26 {
27  SwapEndianness(e, self.m_result);
28 }
29 
30 
31 class CollisionRayCastQueryOutputBlobBuilder : public BaseBlobBuilder<CollisionRayCastQueryOutputBlob>
32 {
33 public:
34  CollisionRayCastQueryOutputBlobBuilder(CollisionRayCastQuery* query) : m_query(query) {}
35  virtual void DoBuild()
36  {
37  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
38  }
39 private:
40  CollisionRayCastQuery* m_query;
41 };
42 
43 class CollisionRayCastQueryBlob
44 {
45  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
46  KY_ROOT_BLOB_CLASS(Query, CollisionRayCastQueryBlob, 0)
47 
48 public:
49  CollisionRayCastQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
50 
51 public:
52  KyUInt32 m_queryInfoId;
53 
54  KyUInt32 m_databaseIdx;
55  Vec3f m_startPos3f;
56  Vec3f m_endPos3f;
57 
58  BlobRef<CollisionRayCastQueryOutputBlob> m_queryOutput;
59 };
60 inline void SwapEndianness(Endianness::Target e, CollisionRayCastQueryBlob& self)
61 {
62  SwapEndianness(e, self.m_queryInfoId);
63  SwapEndianness(e, self.m_databaseIdx);
64  SwapEndianness(e, self.m_startPos3f);
65  SwapEndianness(e, self.m_endPos3f);
66 
67  SwapEndianness(e, self.m_queryOutput);
68 }
69 
70 
71 class CollisionRayCastQueryBlobBuilder : public BaseBlobBuilder<CollisionRayCastQueryBlob>
72 {
73 public:
74  CollisionRayCastQueryBlobBuilder(CollisionRayCastQuery* query) : m_query(query) {}
75  virtual void DoBuild()
76  {
77  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
78 
79  if (m_query->m_database != nullptr)
80  {
81  BLOB_SET(m_blob->m_databaseIdx, m_query->m_database->GetDatabaseIndex());
82  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
83  BLOB_SET(m_blob->m_endPos3f , m_query->GetDestPos());
84  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, CollisionRayCastQueryOutputBlobBuilder(m_query));
85  }
86  }
87 
88 private:
89  CollisionRayCastQuery* m_query;
90 };
91 }
92 
#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 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
CollisionRayCastQueryOutputBlob * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:113
CollisionRayCastResult
CollisionRayCastResult.
Definition: collisiontypes.h:15
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#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