This repository has been archived by the owner on Jul 18, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathUniformGrid.h
117 lines (82 loc) · 4.22 KB
/
UniformGrid.h
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
/*
* UniformGrid.h
* SpatialTest Project
*
* Uniform Grid Datastructure.
*
* Created by radix on 08/04/08.
* Copyright Mykola Konyk, <mykola@konyk.org>, 2008.
*
* This code is under Microsoft Reciprocal License (Ms-RL)
* Please see http://www.opensource.org/licenses/ms-rl.html
*
* Important points about the license (from Ms-RL):
*
* [A] For any file you distribute that contains code from the software (in source code or binary format), you must provide
* recipients the source code to that file along with a copy of this license, which license will govern that file.
* You may license other files that are entirely your own work and do not contain code from the software under any terms
* you choose.
*
* [B] No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
*
* [C] If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
* patent license from such contributor to the software ends automatically.
*
* [D] If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices
* that are present in the software.
*
* [E] If you distribute any portion of the software in source code form, you may do so only under this license by including a
* complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object
* code form, you may only do so under a license that complies with this license.
*
* [F] The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees
* or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent
* permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular
* purpose and non-infringement.
*
*/
#if !defined(ST_UNIFORMGRID_H)
#define ST_UNIFORMGRID_H
#include "ISpatialStructure.h"
#include "ISpatialCell.h"
#include <vector>
namespace SpatialTest
{
class UniformGridHashBucket;
class UniformGrid : public ISpatialStructure
{
public:
UniformGrid(int i32HashBuckets = 1024);
~UniformGrid();
public:
void VAddObjects(const std::vector<ISpatialObject*>& refObjects);
void VUpdate();
protected:
static unsigned int ComputeHashValue(int i32HashBuckets, int i32X, int i32Y, int i32Z);
protected:
static float s_f32ObjectCellRatio;
static float s_f32Epsilon;
protected:
int m_i32HashBuckets;
int m_i32FrameCount;
float m_f32GridSize;
std::vector<UniformGridHashBucket*> m_vecHashBuckets;
std::vector<ISpatialObject*> m_vecObjects;
};
class UniformGridHashBucket : public ISpatialCell
{
public:
UniformGridHashBucket();
public:
void InsertObject(ISpatialObject* pObject);
void RemoveObject(ISpatialObject* pObject);
void CheckCollisions(int i32LastFrame, ISpatialObject* pObject);
int GetLastFrame() const;
private:
int m_i32LastFrame;
//std::vector<ISpatialObject*> m_vecObjects;
ISpatialObject* m_pObjects;
int m_i32ObjectCount;
};
};
#endif //!definedST_UNIFORMGRID_H