gwnavruntime/spatialization/spatializedpointblob.h Source File

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