1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#pragma once
#include "Runtime/BaseClasses/NamedObject.h"
#include "Runtime/Utilities/dynamic_array.h"
#include "Runtime/Math/Vector3.h"
#include "NavMeshTypes.h"
#include "HeightmapData.h"
class dtNavMesh;
class dtNavMeshQuery;
class dtQueryFilter;
class NavMeshPath;
class HeightMeshQuery;
class NavMesh : public NamedObject
{
public:
struct Triangulation
{
dynamic_array<SInt32> layers;
dynamic_array<SInt32> indices;
dynamic_array<Vector3f> vertices;
};
REGISTER_DERIVED_CLASS (NavMesh, NamedObject);
DECLARE_OBJECT_SERIALIZE (NavMesh);
NavMesh (MemLabelId& label, ObjectCreationMode mode);
void Create ();
bool Raycast (NavMeshHit* hit, const Vector3f& sourcePosition, const Vector3f& targetPosition, const dtQueryFilter& filter);
bool DistanceToEdge (NavMeshHit* hit, const Vector3f& sourcePosition, const dtQueryFilter& filter);
bool SamplePosition (NavMeshHit* hit, const Vector3f& sourcePosition, const dtQueryFilter& filter, float maxDistance);
int CalculatePolygonPath (NavMeshPath* path, const Vector3f& sourcePosition, const Vector3f& targetPosition, const dtQueryFilter& filter);
int CalculatePathCorners (Vector3f* corners, int maxCorners, const NavMeshPath& path);
void Triangulate (NavMesh::Triangulation& triangulation) const;
virtual void AwakeFromLoad (AwakeFromLoadMode mode);
void SetData (const UInt8* data, unsigned size);
inline const UInt8* GetMeshData () const;
inline size_t GetMeshDataSize () const;
inline const HeightmapDataVector& GetHeightmaps () const;
inline void SetHeightmaps (HeightmapDataVector& heightmaps);
inline const dtNavMesh* GetInternalNavMesh () const;
inline dtNavMesh* GetInternalNavMesh ();
inline dtNavMeshQuery* GetInternalNavMeshQuery ();
inline const HeightMeshQuery* GetHeightMeshQuery () const;
private:
bool MapPosition (dtPolyRef* mappedPolyRef, Vector3f* mappedPosition, const Vector3f& position, const Vector3f& extents, const dtQueryFilter& filter) const;
void Cleanup ();
void CleanupWithError ();
Vector3f m_QueryExtents;
dynamic_array<UInt8> m_MeshData;
HeightmapDataVector m_Heightmaps;
dtNavMesh* m_NavMesh;
dtNavMeshQuery* m_NavMeshQuery;
HeightMeshQuery* m_HeightMeshQuery;
};
inline const UInt8* NavMesh::GetMeshData () const
{
return m_MeshData.begin ();
}
inline size_t NavMesh::GetMeshDataSize () const
{
return m_MeshData.size ();
}
inline const HeightmapDataVector& NavMesh::GetHeightmaps () const
{
return m_Heightmaps;
}
inline void NavMesh::SetHeightmaps (HeightmapDataVector& heightmaps)
{
m_Heightmaps = heightmaps;
}
inline const dtNavMesh* NavMesh::GetInternalNavMesh () const
{
return m_NavMesh;
}
inline dtNavMesh* NavMesh::GetInternalNavMesh ()
{
return m_NavMesh;
}
inline dtNavMeshQuery* NavMesh::GetInternalNavMeshQuery ()
{
return m_NavMeshQuery;
}
inline const HeightMeshQuery* NavMesh::GetHeightMeshQuery () const
{
return m_HeightMeshQuery;
}
void InvalidateNavMeshHit (NavMeshHit* hit);
|