gwnavruntime/spatialization/spatializedcylinder.h Source File

spatializedcylinder.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 // primary contact: LAPA - secondary contact: GUAL
8 #ifndef Navigation_SpatializedCylinder_H
9 #define Navigation_SpatializedCylinder_H
10 
13 
14 
15 namespace Kaim
16 {
17 
21 class SpatializedCylinderInitConfig
22 {
23  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_Spatialization)
24 public:
25  // ---------------------------------- Public Member Functions ----------------------------------
26 
28 
30  void SetDefaults();
31 
32  void InitFromBot(Ptr<DatabaseBinding> databaseBinding, Bot* bot, KyFloat32 radius, KyFloat32 height);
33  void InitFromCylinderObstacle(Ptr<DatabaseBinding> databaseBinding, CylinderObstacle* cylinderObstacle, KyFloat32 radius, KyFloat32 height);
34  void InitFromBoxObstacle(Ptr<DatabaseBinding> databaseBinding, BoxObstacle* boxObstacle, KyUInt32 cylinderIndex, KyFloat32 radius, KyFloat32 height);
35 
36 
37  // ---------------------------------- Public Data Members ----------------------------------
38 
39  SpatializedPointInitConfig m_spatializedPointInitConfig;
40  KyFloat32 m_radius;
41 };
42 
43 
47 {
48  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_Spatialization)
50 
51 public:
52  // ---------------------------------- Main API Functions ----------------------------------
53 
55  ~SpatializedCylinder();
56 
57  void Init(const SpatializedCylinderInitConfig& initConfig);
58  void Clear();
59 
60 
61  // ---------------------------------- Getters ----------------------------------
62 
63  KyFloat32 GetRadius() const;
64  KyFloat32 GetHeight() const;
65  const Vec3f& GetVelocity() const;
66  const Vec3f& GetPosition() const;
67  const SpatializedPoint& GetSpatializedPoint() const;
68 
69  NavTrianglePtr GetNavTrianglePtr(Database* database) const;
70  SpatializedPoint& GetSpatializedPoint();
71 
72 
73  // ---------------------------------- Setters ----------------------------------
74 
75  void SetRadius(KyFloat32 radius);
76  void SetHeight(KyFloat32 height);
77  void SetVelocity(const Vec3f& velocity);
78  void SetPosition(const Vec3f& position);
79 
80 
81  // ---------------------------------- Spatialization Update Functions ----------------------------------
82  bool UpdateSpatialization(const Vec3f& currentPosition, SpatializationUpdateCoherency updateMode = SpatializationUpdateCoherency_Maximum, PointSpatialization* inputOutputIntermediateSpatialization = KY_NULL);
83  void InvalidateAllDbSpatializations();
84 
85 
86 private:
87  Ptr<SpatializedPoint> m_spatializedPoint;
88  Vec3f m_velocity;
89  KyFloat32 m_radius;
90 };
91 
92 KY_INLINE SpatializedCylinder::SpatializedCylinder() : m_velocity(Vec3f::Zero()) , m_radius(0.0f) {}
93 KY_INLINE SpatializedCylinder::~SpatializedCylinder() { Clear(); }
94 
95 KY_INLINE void SpatializedCylinder::Clear()
96 {
97  if (m_spatializedPoint != KY_NULL)
98  m_spatializedPoint->Clear(); // Clear SpatializedPoint (sets all to default values and frees PointDbSpatializations memory)
99 
100  m_spatializedPoint = KY_NULL; // Decrement RefCount
101 }
102 
103 // Getters
104 KY_INLINE KyFloat32 SpatializedCylinder::GetRadius() const { return m_radius; }
105 KY_INLINE const Vec3f& SpatializedCylinder::GetVelocity() const { return m_velocity; }
106 KY_INLINE const Vec3f& SpatializedCylinder::GetPosition() const { return m_spatializedPoint->GetPosition(); }
107 KY_INLINE const SpatializedPoint& SpatializedCylinder::GetSpatializedPoint() const { return *m_spatializedPoint; }
108 inline NavTrianglePtr SpatializedCylinder::GetNavTrianglePtr(Database* database) const { return m_spatializedPoint->GetNavTrianglePtr(database); }
109 KY_INLINE KyFloat32 SpatializedCylinder::GetHeight() const { return m_spatializedPoint->GetHeight(); }
110 
111 KY_INLINE SpatializedPoint& SpatializedCylinder::GetSpatializedPoint() { return *m_spatializedPoint; }
112 
113 KY_INLINE void SpatializedCylinder::SetRadius(KyFloat32 radius) { m_radius = radius; }
114 KY_INLINE void SpatializedCylinder::SetVelocity(const Vec3f& velocity) { m_velocity = velocity; }
115 KY_INLINE void SpatializedCylinder::SetPosition(const Vec3f& position) { m_spatializedPoint->SetPosition(position); }
116 KY_INLINE void SpatializedCylinder::SetHeight(KyFloat32 height) { m_spatializedPoint->SetHeight(height); }
117 KY_INLINE void SpatializedCylinder::InvalidateAllDbSpatializations() { m_spatializedPoint->InvalidateAllDbSpatializations(); }
118 
119 KY_INLINE bool SpatializedCylinder::UpdateSpatialization(const Vec3f& currentPosition, SpatializationUpdateCoherency updateMode, PointSpatialization* inputOutputIntermediateSpatialization)
120 {
121  return m_spatializedPoint->UpdateSpatialization(currentPosition, updateMode, inputOutputIntermediateSpatialization);
122 }
123 
124 
125 KY_INLINE SpatializedCylinderInitConfig::SpatializedCylinderInitConfig() { SetDefaults(); }
127 {
128  m_spatializedPointInitConfig.SetDefaults();
129  m_radius = 0.0f;
130 }
131 
132 KY_INLINE void SpatializedCylinderInitConfig::InitFromBot(Ptr<DatabaseBinding> databaseBinding, Bot* bot, KyFloat32 radius, KyFloat32 height)
133 {
134  m_spatializedPointInitConfig.InitFromBot(databaseBinding, bot, height);
135  m_radius = radius;
136 }
138 KY_INLINE void SpatializedCylinderInitConfig::InitFromCylinderObstacle(Ptr<DatabaseBinding> databaseBinding, CylinderObstacle* cylinderObstacle, KyFloat32 radius, KyFloat32 height)
139 {
140  m_spatializedPointInitConfig.InitFromCylinderObstacle(databaseBinding, cylinderObstacle, height);
141  m_radius = radius;
142 }
143 
144 KY_INLINE void SpatializedCylinderInitConfig::InitFromBoxObstacle(Ptr<DatabaseBinding> databaseBinding, BoxObstacle* boxObstacle, KyUInt32 cylinderIndex, KyFloat32 radius, KyFloat32 height)
145 {
146  m_spatializedPointInitConfig.InitFromBoxObstacle(databaseBinding, boxObstacle, cylinderIndex, height);
147  m_radius = radius;
148 }
149 
150 } // namespace Kaim
151 
152 #endif // Navigation_SpatializedCylinder_H
CylinderObstacles represent dynamic objects of your game engine that prevent your Bots from moving fr...
Definition: cylinderobstacle.h:87
This class is the world element that represent an active character in Gameware Navigation.
Definition: bot.h:150
#define KY_NULL
Null value.
Definition: types.h:247
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:387
void SetDefaults()
Sets all members to their default value.
Definition: spatializedcylinder.h:154
Class used to initialize a SpatializedCylinder.
Definition: spatializedcylinder.h:22
Class used to initialize a SpatializedPoint.
Definition: spatializedpoint.h:120
This class is a runtime container for all NavData that represents the world from the point of view of...
Definition: database.h:64
KyFloat32 GetHeight() const
Note: height is only used for visual debugging, it is not relevant for navigation.
Definition: spatializedcylinder.h:137
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
Internal representation of world elements, using a vertical cylinder shape.
Definition: spatializedcylinder.h:56
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:22
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
Internal class used for point spatialization in NavData.
Definition: spatializedpoint.h:171
Each instance of the BoxObstacle class represents a dynamic, physical object in your game engine that...
Definition: boxobstacle.h:139
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43
This class defines a three-dimensional vector whose coordinates are stored using floating-point numbe...
Definition: vec3f.h:23