gwnavruntime/world/botblob.h Source File

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