-
Notifications
You must be signed in to change notification settings - Fork 0
/
QuadNodeClass.hpp
121 lines (91 loc) · 2.67 KB
/
QuadNodeClass.hpp
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
111
112
113
114
115
116
117
118
119
120
121
#ifndef QUADNODECLASS_HPP
#define QUADNODECLASS_HPP
#include "ObjectHandlerClass.hpp" // Gives objectClass and OBJ_COUNT
#include <DirectXMath.h>
struct NodeObject { //+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//
int CloneCount = 0; //
int *CloneIDs; //
float *GreatestCloneX_array; //
float *LowestCloneX_array; //
float *GreatestCloneY_array; //
float *LowestCloneY_array; //
float *GreatestCloneZ_array; //
float *LowestCloneZ_array; //
//
}; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
class QuadNodeClass {
private:
// The class can't hold an array of itself, cus it would infinitely expand.
// however it can hold a pointer to an array of itself, so that when those get
// allocated they don't automatically reproduce infinitely.
QuadNodeClass *ChildNodes[4];
int TotalChildNodeCount = -1;
int *ChildNodeIDs = nullptr;
int NodeID = -1;
float North, South, East, West, Top, Bot;
NodeObject NodeObjects[OBJ_COUNT];
public:
QuadNodeClass();
~QuadNodeClass();
void ReleaseAll();
QuadNodeClass *FindGridSlot(int GridID);
/* ------------- COMMENTS -------------
Returns NodeID if it does intersect, otherwise it returns -1.
*/
int TestLeafFrustumIntersection(Plane* AllFrustumPlanes);
/* ------------- COMMENTS -------------
Returns an array of all the cloneIDs (Of targetObject) which rely inside the frustum.
*/
int TestCloneFrustumIntersection(
Plane* AllFrustumPlanes,
int TargetObject,
int TargetClone
);
/* ------------- COMMENTS -------------
Assigns all nodes with NorthSouthEastWest, and assign the
final leaf-nodes IDs.
*/
void Initialize(
int ID_from,
int ID_to,
int Depth,
float North,
float South,
float East,
float West,
float Top,
float Bot
);
void AssignObjects(
NodeObject* RootNodeObjects,
NodeObject* ParentsNodeObjects,
int nr_of_layers);
/* ------------- COMMENTS -------------
Checks which final childnode the Corner X,Z resides in, and returns the index of that node.
*/
int CornerDive(int nr_of_layers, float x, float z);
/* ------------- COMMENTS -------------
Also allocates ChildNodeIDs array according to size, if it's not already allocated.
*/
void SetTotalChildNodeCount(int Count);
void SetChildNodeIDs(int* ChildNodeIDs);
void SetNodeID(int ID);
void SetNorth(float North);
void SetSouth(float South);
void SetEast(float East);
void SetWest(float West);
void SetTop(float Top);
void SetBot(float Bot);
int GetTotalChildNodeCount();
int* GetChildNodeIDs();
int GetNodeID();
float GetNorth();
float GetSouth();
float GetEast();
float GetWest();
float GetTop();
float GetBot();
NodeObject* GetNodeObjects();
};
#endif