16 Vector(-1,1), |
16 Vector(-1,1), |
17 Vector(-1,0), |
17 Vector(-1,0), |
18 Vector(-1,-1) |
18 Vector(-1,-1) |
19 }; |
19 }; |
20 |
20 |
21 Terrain::Terrain (void) : |
21 Terrain::Terrain (const TerrainConfig &config) : |
22 terrain_buf(NULL), width(0), height(0) |
22 terrain_buf(NULL), |
|
23 width(config.dimensions.x), height(config.dimensions.y) |
23 { |
24 { |
24 } |
25 // allocate terrain_buf |
25 |
26 terrain_buf = new TerrainPixel[width * height]; |
26 Terrain::Terrain (PixelDimension width, PixelDimension height, int seed) : |
27 |
27 terrain_buf(NULL), |
28 // fill with dirt |
28 width(width), height(height) |
29 memset(terrain_buf, TERRAIN_DIRT, width * height); |
29 { |
30 |
30 // allocate+generate random terrain |
31 // geneerate random map? |
31 generateTerrain(seed); |
32 if (config.random_seed) |
|
33 generateTerrain(config.random_seed); |
|
34 |
|
35 // update pixel buffer |
|
36 generatePixelBuffer(); |
32 } |
37 } |
33 |
38 |
34 Terrain::Terrain (PixelDimension width, PixelDimension height, TerrainPixel *terrain_buf) : |
39 Terrain::Terrain (PixelDimension width, PixelDimension height, TerrainPixel *terrain_buf) : |
35 terrain_buf(terrain_buf), |
40 terrain_buf(terrain_buf), |
36 width(width), height(height) |
41 width(width), height(height) |
43 // free terrain data |
48 // free terrain data |
44 delete[] terrain_buf; |
49 delete[] terrain_buf; |
45 } |
50 } |
46 |
51 |
47 void Terrain::generateTerrain (int seed) { |
52 void Terrain::generateTerrain (int seed) { |
48 // shouldn't be generated yet |
|
49 assert(!terrain_buf); |
|
50 |
|
51 // set random number generator seed. |
53 // set random number generator seed. |
52 srand(seed); |
54 srand(seed); |
53 |
|
54 // allocate terrain buffer |
|
55 terrain_buf = new TerrainPixel[width * height]; |
|
56 |
|
57 // fill with dirt |
|
58 memset(terrain_buf, TERRAIN_DIRT, width * height); |
|
59 |
55 |
60 // some constants to control random generation |
56 // some constants to control random generation |
61 const int min_range = 25; |
57 const int min_range = 25; |
62 const int max_range = 80; |
58 const int max_range = 80; |
63 const int num = 50; |
59 const int num = 50; |
100 if ((x - mid.x) * (x - mid.x) + (y - mid.y) * (y - mid.y) < range * range) |
96 if ((x - mid.x) * (x - mid.x) + (y - mid.y) * (y - mid.y) < range * range) |
101 terrain_buf[y * width + x] = (TerrainPixel) type; |
97 terrain_buf[y * width + x] = (TerrainPixel) type; |
102 } |
98 } |
103 } |
99 } |
104 } |
100 } |
105 |
|
106 // update pixel buffer |
|
107 generatePixelBuffer(); |
|
108 } |
101 } |
109 |
102 |
110 void Terrain::generatePixelBuffer (void) { |
103 void Terrain::generatePixelBuffer (void) { |
111 // initialize textures |
104 // initialize textures |
112 generateTexture(); |
105 generateTexture(); |