gwnavruntime/database/positionspatializationrange.h Source File

positionspatializationrange.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 #pragma once
8 
12 
13 namespace Kaim
14 {
15 
18 {
19  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_WorldFwk)
20 
21 public:
23  : m_rangeAbovePosition(0.0f)
24  , m_rangeBelowPosition(0.0f)
25  {}
26 
28  : m_rangeAbovePosition(above)
29  , m_rangeBelowPosition(below)
30  {}
31 
34  bool CanBeSpatialized(KyFloat32 pos_z, KyFloat32 navMesh_z) const
35  {
36  return LessEq(pos_z - m_rangeBelowPosition, navMesh_z, pos_z + m_rangeAbovePosition);
37  }
38 
39  void Clear()
40  {
41  m_rangeAbovePosition = 0.0f;
42  m_rangeBelowPosition = 0.0f;
43  }
44 
45  bool operator==(const PositionSpatializationRange& other) const { return m_rangeAbovePosition == other.m_rangeAbovePosition && m_rangeBelowPosition == other.m_rangeBelowPosition; }
46 
47  KyFloat32 m_rangeAbovePosition;
49 };
50 // VerticalRange is a better, shorter name
51 // typedef PositionSpatializationRange VerticalRange;
52 
53 
54 KY_INLINE void SwapEndianness(Endianness::Target e, PositionSpatializationRange& self)
55 {
56  SwapEndianness(e, self.m_rangeAbovePosition);
57  SwapEndianness(e, self.m_rangeBelowPosition);
58 }
59 
60 
61 class DatabaseGenMetrics;
62 
63 class DatabasePositionSpatializationRange
64 {
65  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_WorldFwk)
66  KY_CLASS_WITHOUT_COPY(DatabasePositionSpatializationRange)
67 
68 public:
69  DatabasePositionSpatializationRange()
70  : m_genMetrics(nullptr), m_customized(false)
71  {}
72 
73  void SetDatabaseGenMetrics(DatabaseGenMetrics* genMetrics) { m_genMetrics = genMetrics; }
74 
78  void InitFromGenerationMetrics();
79 
81  KyResult SetSpatializationRange(KyFloat32 abovePosition, KyFloat32 belowPosition);
82 
83  const PositionSpatializationRange& GetPositionSpatializationRange() const { return m_positionSpatializationRange; }
84 
85  bool IsCustomized() const { return m_customized; }
86 
87 private:
88  PositionSpatializationRange m_positionSpatializationRange;
89  DatabaseGenMetrics* m_genMetrics; // never null because SetDatabaseGenMetrics() is called in Database constructor
90  bool m_customized;
91 };
92 
93 } // namespace Kaim
94 
Vertical range (above, below) that represents the altitude tolerance for a position to be inside the ...
Definition: positionspatializationrange.h:17
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
KyFloat32 m_rangeBelowPosition
max distance above navmesh where position are considered inside the navmesh
Definition: positionspatializationrange.h:48
#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
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
bool CanBeSpatialized(KyFloat32 pos_z, KyFloat32 navMesh_z) const
Returns true if positionAltitude can be spatialized to navMeshAltitude.
Definition: positionspatializationrange.h:34
float KyFloat32
float
Definition: types.h:32