-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patharea.cpp
64 lines (54 loc) · 1.53 KB
/
area.cpp
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
#include "area.h"
#define MAXGRASS 30
#define HELICOPTER 0
#define NORMAL 1
#define BREEZE 2
#define TORNADO 3
Area::Area()
{
printf("ERROR!\n");
}
Area::Area(float density, float size, Vector2f center, Terrain *terrain)
{
init(density, size, center, terrain);
}
void Area::init(float density, float size, Vector2f center, Terrain *terrain)
{
this->density = density;
this->size = size;
this->center = center;
for(int i = 0; i < MAXGRASS*density; i++)
{
float xpos = size*(rand()/float(RAND_MAX)) - size/2;
float zpos = size*(rand()/float(RAND_MAX)) - size/2;
float ypos = terrain->getHeight(center.x + xpos, center.y + zpos);
grasses.push_back(new Grass(xpos, ypos, zpos));
}
}
void Area::draw()
{
glPushMatrix();
glTranslated(center.x, 0, center.y);
vector<Grass *>::iterator iter = grasses.begin();
while( iter != grasses.end())
{
(*iter)->draw();
++iter;
}
glPopMatrix();
}
void Area::calculate(float timestep, Vector2f camera, Wind wind)
{
Vector2f windData;
windData = wind.calculateWind(center);
vector<Grass *>::iterator iter = grasses.begin();
while( iter != grasses.end())
{
if((center - wind.getWindCenter()).length() < 5 && (wind.getWindType() == HELICOPTER || wind.getWindType() == TORNADO))
{
windData = wind.calculateWind(center + (*iter)->getBase());
}
(*iter)->calculate(windData.x, windData.y, timestep);
++iter;
}
}