gwnavruntime/world/tagvolumeblob.h Source File

tagvolumeblob.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 
12 
13 
14 namespace Kaim
15 {
16 
17 class TagVolumeBlob
18 {
19  KY_CLASS_WITHOUT_COPY(TagVolumeBlob)
20  KY_ROOT_BLOB_CLASS(NavData, TagVolumeBlob, 106)
21 
22 public:
23  TagVolumeBlob() : m_navTagIdx(KyUInt32MAXVAL) {}
24 
25  bool operator==(const TagVolumeBlob& other) const
26  {
27  if ((m_points.GetCount() != other.m_points.GetCount()) ||
28  (m_aabb != other.m_aabb) ||
29  (m_obstacleType != other.m_obstacleType) ||
30  (m_navTag != other.m_navTag))
31  {
32  return false;
33  }
34 
35  const Vec2f* thisPoints = m_points.GetValues();
36  const Vec2f* otherPoints = other.m_points.GetValues();
37  for (KyUInt32 i = 0; i < m_points.GetCount(); ++i)
38  {
39  if (thisPoints[i] != otherPoints[i])
40  return false;
41  }
42 
43  return true;
44  }
45  bool operator!=(const TagVolumeBlob& other) const { return !operator==(other); }
46 
47  TagVolume::ObstacleType GetObstacleType() const { return (TagVolume::ObstacleType)m_obstacleType; }
48  TagVolumeExtendOptions GetTagVolumeExtendOptions() const { return (TagVolumeExtendOptions)m_tagVolumeExtendOptions; }
49 public:
50  KyUInt32 m_visualDebugId;
51  BlobArray<Vec2f> m_points;
52  Box3f m_aabb;
53  KyUInt16 m_obstacleType; // cast this into TagVolume::ObstacleType
54  KyUInt16 m_tagVolumeExtendOptions; //TagVolumeExtendOptions
55  NavTag m_navTag;
56  mutable KyUInt32 m_navTagIdx;
57  DatabaseBindingBlob m_databaseBindings;
58 };
59 
60 inline void SwapEndianness(Endianness::Target e, TagVolumeBlob& self)
61 {
62  SwapEndianness(e, self.m_visualDebugId);
63  SwapEndianness(e, self.m_points);
64  SwapEndianness(e, self.m_aabb);
65  SwapEndianness(e, self.m_obstacleType);
66  SwapEndianness(e, self.m_tagVolumeExtendOptions);
67  SwapEndianness(e, self.m_navTag);
68  SwapEndianness(e, self.m_navTagIdx);
69  SwapEndianness(e, self.m_databaseBindings);
70 }
71 
72 class TagVolumeBlobBuilder : public BaseBlobBuilder<TagVolumeBlob>
73 {
74 public:
75  TagVolumeBlobBuilder(const TagVolume* tagVolume) : m_tagVolume(tagVolume) {}
76 
77 private:
78  void DoBuild()
79  {
80  if (m_tagVolume)
81  {
82  BLOB_SET(m_blob->m_visualDebugId, m_tagVolume->GetVisualDebugId());
83  BLOB_SET(m_blob->m_aabb, m_tagVolume->GetAABB());
84  BLOB_SET(m_blob->m_obstacleType, (KyUInt16)m_tagVolume->GetObstacleType());
85  BLOB_SET(m_blob->m_tagVolumeExtendOptions, (KyUInt16)m_tagVolume->GetTagVolumeExtendOptions());
86  BLOB_ARRAY_COPY(m_blob->m_points, m_tagVolume->GetPoints(), m_tagVolume->GetPointCount());
87  BLOB_BUILD(m_blob->m_navTag, NavTagBlobBuilder(m_tagVolume->GetNavTag()));
88  BLOB_BUILD(m_blob->m_databaseBindings, DatabaseBindingBlobBuilder(m_tagVolume->GetDatabaseBinding()));
89  }
90  }
91 
92  const TagVolume* m_tagVolume;
93 };
94 
95 class TagVolumeContextBlob
96 {
97  KY_CLASS_WITHOUT_COPY(TagVolumeContextBlob)
98  KY_ROOT_BLOB_CLASS(NavData, TagVolumeContextBlob, 0)
99 
100 public:
101  TagVolumeContextBlob() {}
102 
103  TagVolume::IntegrationStatus GetIntegrationStatus() const { return (TagVolume::IntegrationStatus)m_integrationStatus; }
104  TagVolume::WorldStatus GetWorldStatus() const { return (TagVolume::WorldStatus)m_worldStatus; }
105 public:
106  KyUInt32 m_visualDebugId;
107  KyUInt16 m_integrationStatus; // cast this into IntegratonStatus
108  KyUInt16 m_worldStatus; // cast this into WorldStatus;
109 };
110 
111 inline void SwapEndianness(Endianness::Target e, TagVolumeContextBlob& self)
112 {
113  SwapEndianness(e, self.m_visualDebugId);
114  SwapEndianness(e, self.m_integrationStatus);
115  SwapEndianness(e, self.m_worldStatus);
116 }
117 
118 class TagVolumeContextBlobBuilder : public BaseBlobBuilder<TagVolumeContextBlob>
119 {
120 public:
121  TagVolumeContextBlobBuilder(const TagVolume* tagVolume) : m_tagVolume(tagVolume) {}
122 
123 private:
124  void DoBuild()
125  {
126  if (m_tagVolume)
127  {
128  BLOB_SET(m_blob->m_visualDebugId, m_tagVolume->GetVisualDebugId());
129  BLOB_SET(m_blob->m_integrationStatus, (KyUInt16)m_tagVolume->GetIntegrationStatus());
130  BLOB_SET(m_blob->m_worldStatus, (KyUInt16)m_tagVolume->GetWorldStatus());
131  }
132  }
133 
134  const TagVolume* m_tagVolume;
135 };
136 
137 } // namespace Kaim
138 
#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
TagVolumeExtendOptions
TagVolumeExtendOptions.
Definition: tagvolume.h:24
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
std::uint16_t KyUInt16
uint16_t
Definition: types.h:28
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
TagVolumeBlob * 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
#define BLOB_ARRAY_COPY(blobArray, src, count)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:151
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68