summaryrefslogtreecommitdiff
path: root/Runtime/NavMesh/NavMeshCarving.h
blob: 0cec244a35ec5ba6fac5abd31a13a98736c50e60 (plain)
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
#pragma once

#include "Runtime/Utilities/dynamic_array.h"
#include "Runtime/NavMesh/NavMeshTypes.h"
#include "Runtime/Geometry/AABB.h"

class NavMeshObstacle;
class NavMesh;

class NavMeshCarving
{
	enum TileCarveStatus
	{
		kIgnore = 0,
		kRestore = 1,
		kCarve = 2
	};

	struct ObstacleCarveInfo
	{
		NavMeshCarveData carveData;
		MinMaxAABB carveBounds;
		NavMeshObstacle* obstacle;
	};

public:
	NavMeshCarving ();
	~NavMeshCarving ();


	void AddObstacle (NavMeshObstacle& obstacle, int& handle);
	void RemoveObstacle (int& handle);
	bool Carve ();

private:

	void UpdateCarveData (dynamic_array<NavMeshCarveData>& newCarveData);
	bool UpdateTiles (NavMesh* navmesh, const dynamic_array<NavMeshCarveData>& newCarveData);

	TileCarveStatus CollectCarveDataAndStatus (dynamic_array<Matrix4x4f>& transforms, dynamic_array<Vector3f>& sizes, dynamic_array<MinMaxAABB>& aabbs, const dynamic_array<NavMeshCarveData>& newCarveData, const MinMaxAABB& tileBounds) const;
	void CollectOverlappingCarveData (dynamic_array<Matrix4x4f>& transforms, dynamic_array<Vector3f>& sizes, dynamic_array<MinMaxAABB>& aabbs, const MinMaxAABB& bounds) const;

	dynamic_array<ObstacleCarveInfo> m_ObstacleInfo;
	dynamic_array<MinMaxAABB> m_OldCarveBounds;
};