src/Terrain.cc
changeset 409 1a03ff151abc
parent 408 e6cfc44266af
child 412 721c60072091
equal deleted inserted replaced
408:e6cfc44266af 409:1a03ff151abc
    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();