gwnavruntime/collision/collisionraycastqueryblob.h Source File

collisionraycastqueryblob.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 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 #ifndef Navigation_CollisionRayCastQueryBlob_H
9 #define Navigation_CollisionRayCastQueryBlob_H
10 
14 
15 namespace Kaim
16 {
17 
18 class CollisionRayCastQueryOutputBlob
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 public:
22  CollisionRayCastQueryOutputBlob() : m_result(0) {}
23 
24  CollisionRayCastResult GetResult() const { return (CollisionRayCastResult)m_result; }
25 public:
26  KyUInt32 m_result;
27 };
28 inline void SwapEndianness(Endianness::Target e, CollisionRayCastQueryOutputBlob& self)
29 {
30  SwapEndianness(e, self.m_result );
31 }
32 
33 
34 class CollisionRayCastQueryOutputBlobBuilder : public BaseBlobBuilder<CollisionRayCastQueryOutputBlob>
35 {
36 public:
37  CollisionRayCastQueryOutputBlobBuilder(CollisionRayCastQuery* query) : m_query(query) {}
38  virtual void DoBuild()
39  {
40  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
41  }
42 
43 private:
44  CollisionRayCastQuery* m_query;
45 };
46 
47 class CollisionRayCastQueryBlob
48 {
49  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
50  KY_ROOT_BLOB_CLASS(Query, CollisionRayCastQueryBlob, 0)
51 public:
52  CollisionRayCastQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
53 
54 public:
55  KyUInt32 m_queryInfoId;
56 
57  KyUInt32 m_databaseIdx;
58  Vec3f m_startPos3f;
59  Vec3f m_endPos3f;
60 
61  BlobRef<CollisionRayCastQueryOutputBlob> m_queryOutput;
62 };
63 inline void SwapEndianness(Endianness::Target e, CollisionRayCastQueryBlob& self)
64 {
65  SwapEndianness(e, self.m_queryInfoId);
66  SwapEndianness(e, self.m_databaseIdx);
67  SwapEndianness(e, self.m_startPos3f);
68  SwapEndianness(e, self.m_endPos3f);
69 
70  SwapEndianness(e, self.m_queryOutput);
71 }
72 
73 
74 
75 class CollisionRayCastQueryBlobBuilder : public BaseBlobBuilder<CollisionRayCastQueryBlob>
76 {
77 public:
78  CollisionRayCastQueryBlobBuilder(CollisionRayCastQuery* query) : m_query(query) {}
79  virtual void DoBuild()
80  {
81  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
82 
83  if (m_query->m_database != KY_NULL)
84  {
85  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
86  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
87  BLOB_SET(m_blob->m_endPos3f , m_query->GetDestPos());
88 
89  switch (m_query->GetResult())
90  {
91  case RayDidNotHit :
92  case RayHit :
93  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, CollisionRayCastQueryOutputBlobBuilder(m_query));
94  break;
95  default:
96  break;
97  }
98  }
99  }
100 
101 private:
102  CollisionRayCastQuery* m_query;
103 };
104 }
105 
106 #endif // Navigation_CollisionRayCastQueryBlob_H
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:136
#define KY_NULL
Null value.
Definition: types.h:247
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
CollisionRayCastQueryOutputBlob * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:117
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226
#define BUILD_REFERENCED_BLOB(blobRef, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:197