gwnavruntime/world/botblob.h Source File

botblob.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: NOBODY
9 #ifndef Navigation_BotBlob_H
10 #define Navigation_BotBlob_H
11 
19 
20 
21 namespace Kaim
22 {
23 
24 class Bot;
25 
26 
28 //
29 // Path finder config
30 //
32 
33 class PathFinderConfigBlob
34 {
35 public:
36  KyFloat32 m_fromOutsideNavMeshDistance;
37  KyFloat32 m_toOutsideNavMeshDistance;
38  KyFloat32 m_propagationBoxExtent;
39  KyUInt32 m_abstractGraphTraversalMode; // cast this as PathFinderAbstractGraphTraversalMode
40 };
41 
42 class PathFinderConfigBlobBuilder : public BaseBlobBuilder<PathFinderConfigBlob>
43 {
44  KY_CLASS_WITHOUT_COPY(PathFinderConfigBlobBuilder)
45 
46 public:
47  PathFinderConfigBlobBuilder(const PathFinderConfig& config) : m_config(config) {}
48 
49  virtual void DoBuild();
50 
51 private:
52  const PathFinderConfig& m_config;
53 };
54 
55 inline void SwapEndianness(Endianness::Target e, PathFinderConfigBlob& self)
56 {
57  SwapEndianness(e, self.m_fromOutsideNavMeshDistance);
58  SwapEndianness(e, self.m_toOutsideNavMeshDistance);
59  SwapEndianness(e, self.m_propagationBoxExtent);
60  SwapEndianness(e, self.m_abstractGraphTraversalMode);
61 }
62 
63 
64 
66 //
67 // Bot config
68 //
70 
71 class BotConfigBlob
72 {
73  KY_ROOT_BLOB_CLASS(Runtime, BotConfigBlob, 4)
74 
75 public:
76  KyUInt32 m_visualDebugId;
77  KyUInt32 m_databaseIndex;
78  KyFloat32 m_radius;
79  KyFloat32 m_height;
80 
81  // ------------------- PathFind Config -------------------
82  PathFinderConfigBlob m_pathFinderConfig;
83  ChannelComputerConfig m_channelComputerConfig;
84 
85  // ------------------- PathProgress Config -------------------
86  PathProgressConfig m_pathProgressConfig;
87 
88  // ------------------- Trajectory Config -------------------
89 
90  // Trajectory
91  KyUInt32 m_trajectoryMode; // Cast this to TrajectoryMode
92  ShortcutTrajectoryConfigBlob m_shortcutTrajectoryConfig;
93  SplineTrajectoryConfigBlob m_splineTrajectoryConfig;
94  KyFloat32 m_trajectoryMinimalMoveDistance;
95  KyUInt32 m_trajectoryFailureMode; // Cast this to TrajectoryFailureMode
96 
97  // Avoidance Config
98  KyUInt32 m_enableAvoidance;
99  ColliderCollectorConfig m_colliderCollectorConfig;
100  AvoidanceConfigBlob m_avoidanceConfig;
101 
102  KyFloat32 m_maxDesiredLinearSpeed;
103 };
104 
105 inline void SwapEndianness(Endianness::Target e, BotConfigBlob& self)
106 {
107  SwapEndianness(e, self.m_visualDebugId);
108  SwapEndianness(e, self.m_databaseIndex);
109  SwapEndianness(e, self.m_radius);
110  SwapEndianness(e, self.m_height);
111  SwapEndianness(e, self.m_pathFinderConfig);
112  SwapEndianness(e, self.m_channelComputerConfig);
113  SwapEndianness(e, self.m_pathProgressConfig);
114  SwapEndianness(e, self.m_trajectoryMode);
115  SwapEndianness(e, self.m_shortcutTrajectoryConfig);
116  SwapEndianness(e, self.m_splineTrajectoryConfig);
117  SwapEndianness(e, self.m_trajectoryMinimalMoveDistance);
118  SwapEndianness(e, self.m_trajectoryFailureMode);
119  SwapEndianness(e, self.m_enableAvoidance);
120  SwapEndianness(e, self.m_colliderCollectorConfig);
121  SwapEndianness(e, self.m_avoidanceConfig);
122  SwapEndianness(e, self.m_maxDesiredLinearSpeed);
123 }
124 
125 class BotConfigBlobBuilder : public BaseBlobBuilder<BotConfigBlob>
126 {
127  KY_CLASS_WITHOUT_COPY(BotConfigBlobBuilder)
128 
129 public:
130  BotConfigBlobBuilder(const BotConfig& botConfig, KyUInt32 visualDebugId, KyUInt32 databaseIndex)
131  : m_botConfig(botConfig), m_visualDebugId(visualDebugId), m_databaseIndex(databaseIndex) {}
132 
133  virtual void DoBuild();
134 
135 private:
136  const BotConfig& m_botConfig;
137  KyUInt32 m_visualDebugId;
138  KyUInt32 m_databaseIndex;
139 };
140 
141 
142 
144 //
145 // Bot direction
146 //
148 
149 class FrontDirectionBlob
150 {
151  KY_ROOT_BLOB_CLASS(Runtime, FrontDirectionBlob, 0)
152 
153 public:
154  KyUInt32 m_visualDebugId;
155  Vec2f m_frontDirection;
156 };
157 
158 inline void SwapEndianness(Endianness::Target e, FrontDirectionBlob& self)
159 {
160  SwapEndianness(e, self.m_visualDebugId);
161  SwapEndianness(e, self.m_frontDirection);
162 }
163 
164 class FrontDirectionBlobBuilder : public BaseBlobBuilder<FrontDirectionBlob>
165 {
166  KY_CLASS_WITHOUT_COPY(FrontDirectionBlobBuilder)
167 
168 public:
169  FrontDirectionBlobBuilder(KyUInt32 visualDebugId, const Vec2f* frontDirection)
170  : m_visualDebugId(visualDebugId)
171  , m_frontDirection(frontDirection)
172  {}
173 
174  virtual void DoBuild();
175 
176 private:
177  KyUInt32 m_visualDebugId;
178  const Vec2f* m_frontDirection;
179 };
180 
181 
182 
183 } // namespace Kaim
184 
185 #endif // Navigation_BotBlob_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
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