gwnavruntime/spatialization/spatializedpointblob.h Source File

spatializedpointblob.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 
15 
16 
17 namespace Kaim
18 {
19 
20 class SpatializedPoint;
21 class PointDbSpatialization;
22 
24 // PointDbSpatializationBlob
25 
26 enum PointDbSpatializationFlag
27 {
28  PointDbSpatializationFlag_InNavMesh = 1 << 0
29 };
30 
31 class PointDbSpatializationBlob
32 {
33 public:
34  KyUInt32 m_flags; // PointDbSpatializationFlag
35  KyUInt32 m_databaseIndex;
36  Vec3f m_triangleCenter;
37  Vec3f m_triangleNormal;
38  PositionSpatializationRange m_positionSpatializationRange;
39 };
40 
41 inline void SwapEndianness(Endianness::Target e, PointDbSpatializationBlob& self)
42 {
43  SwapEndianness(e, self.m_flags);
44  SwapEndianness(e, self.m_databaseIndex);
45  SwapEndianness(e, self.m_triangleCenter);
46  SwapEndianness(e, self.m_triangleNormal);
47  SwapEndianness(e, self.m_positionSpatializationRange);
48 }
49 
50 class PointDbSpatializationBlobBuilder : public BaseBlobBuilder<PointDbSpatializationBlob>
51 {
52  KY_CLASS_WITHOUT_COPY(PointDbSpatializationBlobBuilder)
53 
54 public:
55  PointDbSpatializationBlobBuilder(const PointDbSpatialization* dbProjection, const SpatializedPoint* spatializedPoint, KyUInt32 databaseIndex)
56  : m_dbProjection(dbProjection), m_spatializedPoint(spatializedPoint), m_databaseIndex(databaseIndex)
57  {}
58 
59  virtual void DoBuild();
60 
61 private:
62  const PointDbSpatialization* m_dbProjection;
63  const SpatializedPoint* m_spatializedPoint;
64  KyUInt32 m_databaseIndex;
65 };
66 
68 // SpatializationResult
69 class SpatializationResultBlob
70 {
71  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_Blob)
72  KY_ROOT_BLOB_CLASS(Runtime, SpatializationResultBlob, 0)
73 
74 public:
75  KyUInt32 GetOutsideNavmeshCount() const;
76  bool IsOutsideNavMesh(KyUInt32 databaseIndex) const;
77 
78 public:
79  KyUInt32 m_visualDebugId;
80  BlobArray<PointDbSpatializationBlob> m_pointDbSpatializations;
81 };
82 
83 inline void SwapEndianness(Endianness::Target e, SpatializationResultBlob& self)
84 {
85  SwapEndianness(e, self.m_visualDebugId);
86  SwapEndianness(e, self.m_pointDbSpatializations);
87 }
88 
89 class SpatializationResultBlobBuilder : public BaseBlobBuilder<SpatializationResultBlob>
90 {
91  KY_CLASS_WITHOUT_COPY(SpatializationResultBlobBuilder)
92 
93 public:
94  SpatializationResultBlobBuilder(KyUInt32 visualDebugId, const SpatializedPoint* spatializedPoint)
95  : m_visualDebugId(visualDebugId), m_spatializedPoint(spatializedPoint)
96  {}
97 
98  virtual void DoBuild();
99 
100 private:
101  KyUInt32 m_visualDebugId;
102  const SpatializedPoint* m_spatializedPoint;
103 };
104 
105 
107 // SpatializedPointBlob
108 class SpatializedPointBlob
109 {
110  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_Blob)
111  KY_ROOT_BLOB_CLASS(Runtime, SpatializedPointBlob, 0)
112  //KY_CLASS_WITHOUT_COPY(SpatializedPointBlob)
113 
114 public:
115  KyUInt32 GetOutsideNavmeshCount() const;
116 
117 public:
118  BlobArray<PointDbSpatializationBlob> m_pointDbSpatializations;
119  Vec3f m_position;
120  KyFloat32 m_height;
121  KyUInt32 m_type; // stores the SpatializedPointObjectType
122 };
123 
124 inline void SwapEndianness(Endianness::Target e, SpatializedPointBlob& self)
125 {
126  SwapEndianness(e, self.m_pointDbSpatializations);
127  SwapEndianness(e, self.m_position);
128  SwapEndianness(e, self.m_height);
129  SwapEndianness(e, self.m_type);
130 }
131 
132 
134 // SpatializedPointBlobBuilder
135 class SpatializedPointBlobBuilder : public BaseBlobBuilder<SpatializedPointBlob>
136 {
137  KY_CLASS_WITHOUT_COPY(SpatializedPointBlobBuilder)
138 
139 public:
140  SpatializedPointBlobBuilder(const SpatializedPoint* spatializedPoint, VisualDebugLOD visualDebugLOD)
141  : m_spatializedPoint(spatializedPoint)
142  , m_visualDebugLOD(visualDebugLOD)
143  {}
144 
145  virtual void DoBuild();
146 
147 private:
148  void FillPointDbSpatializationBlob(const PointDbSpatialization& dbProjection,
149  PointDbSpatializationBlob& pointDbSpatialization, KyUInt32 i);
150 
151  const SpatializedPoint* m_spatializedPoint;
152  VisualDebugLOD m_visualDebugLOD;
153 };
154 
155 
156 
157 } // namespace Kaim
158 
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
#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
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
VisualDebugLOD
Enumerates the visual debug levels of details.
Definition: worldelement.h:22
float KyFloat32
float
Definition: types.h:32