rust/landgen/src/template_based.rs
changeset 14100 4d22be35cfa2
parent 14095 b2feb190e4bc
child 14121 69db1d2e4cec
equal deleted inserted replaced
14099:7845beb87cb5 14100:4d22be35cfa2
     3 use LandGenerationParameters;
     3 use LandGenerationParameters;
     4 use LandGenerator;
     4 use LandGenerator;
     5 
     5 
     6 use outline::OutlinePoints;
     6 use outline::OutlinePoints;
     7 use outline_template::OutlineTemplate;
     7 use outline_template::OutlineTemplate;
     8 
       
     9 
     8 
    10 pub struct TemplatedLandGenerator {
     9 pub struct TemplatedLandGenerator {
    11     outline_template: OutlineTemplate,
    10     outline_template: OutlineTemplate,
    12 }
    11 }
    13 
    12 
    23         parameters: LandGenerationParameters<T>,
    22         parameters: LandGenerationParameters<T>,
    24         random_numbers: &mut I,
    23         random_numbers: &mut I,
    25     ) -> Land2D<T> {
    24     ) -> Land2D<T> {
    26         let mut land = Land2D::new(self.outline_template.size, parameters.basic);
    25         let mut land = Land2D::new(self.outline_template.size, parameters.basic);
    27 
    26 
    28         let mut points =
    27         let mut points = OutlinePoints::from_outline_template(
    29             OutlinePoints::from_outline_template(&self.outline_template, land.play_box(), land.size(), random_numbers);
    28             &self.outline_template,
       
    29             land.play_box(),
       
    30             land.size(),
       
    31             random_numbers,
       
    32         );
    30 
    33 
    31         // mirror
    34         // mirror
    32         if self.outline_template.can_mirror {
    35         if self.outline_template.can_mirror {
    33             if let Some(b) = random_numbers.next() {
    36             if let Some(b) = random_numbers.next() {
    34                 if b & 1 != 0 {
    37                 if b & 1 != 0 {
    44                     points.flip();
    47                     points.flip();
    45                 }
    48                 }
    46             }
    49             }
    47         }
    50         }
    48 
    51 
    49         points.distort(random_numbers);
    52         points.distort(parameters.distance_divisor, random_numbers);
    50 
    53 
    51         points.draw(&mut land, parameters.zero);
    54         points.draw(&mut land, parameters.zero);
    52 
    55 
    53         for p in &points.fill_points {
    56         for p in &points.fill_points {
    54             land.fill(*p, parameters.zero, parameters.zero)
    57             land.fill(*p, parameters.zero, parameters.zero)