rust/mapgen/src/lib.rs
changeset 16102 5d302b12d837
parent 16101 a4cbc6926439
child 16111 669cdf697f16
equal deleted inserted replaced
16101:a4cbc6926439 16102:5d302b12d837
    17     wavefront_collapse::generator::{
    17     wavefront_collapse::generator::{
    18         TemplateDescription as WfcTemplate, WavefrontCollapseLandGenerator,
    18         TemplateDescription as WfcTemplate, WavefrontCollapseLandGenerator,
    19     },
    19     },
    20     LandGenerationParameters, LandGenerator,
    20     LandGenerationParameters, LandGenerator,
    21 };
    21 };
    22 use rand::{seq::SliceRandom, Rng};
    22 use rand::Rng;
    23 
    23 
       
    24 use rand::prelude::IndexedRandom;
    24 use std::{borrow::Borrow, collections::hash_map::HashMap};
    25 use std::{borrow::Borrow, collections::hash_map::HashMap};
    25 use rand::prelude::IndexedRandom;
       
    26 use vec2d::Vec2D;
    26 use vec2d::Vec2D;
    27 
    27 
    28 #[derive(PartialEq, Eq, Hash, Clone, Debug)]
    28 #[derive(PartialEq, Eq, Hash, Clone, Debug)]
    29 struct TemplateType(String);
    29 struct TemplateType(String);
    30 
    30 
    66         let mut texture = Vec2D::new(&land.size().size(), 0);
    66         let mut texture = Vec2D::new(&land.size().size(), 0);
    67 
    67 
    68         if let Some(land_sprite) = theme.land_texture() {
    68         if let Some(land_sprite) = theme.land_texture() {
    69             for (row_index, (land_row, tex_row)) in land.rows().zip(texture.rows_mut()).enumerate()
    69             for (row_index, (land_row, tex_row)) in land.rows().zip(texture.rows_mut()).enumerate()
    70             {
    70             {
    71                 let sprite_row = land_sprite.get_row(row_index % land_sprite.height());
    71                 let sprite_row = land_sprite.get_row(row_index % land_sprite.height() as usize);
    72                 let mut x_offset = 0;
    72                 let mut x_offset = 0;
    73                 while sprite_row.len() < land.width() - x_offset {
    73                 while sprite_row.len() < land.width() - x_offset {
    74                     let copy_range = x_offset..x_offset + sprite_row.len();
    74                     let copy_range = x_offset..x_offset + sprite_row.len();
    75                     tex_row_copy(
    75                     tex_row_copy(
    76                         parameters.basic(),
    76                         parameters.basic(),
    77                         &land_row[copy_range.clone()],
    77                         &land_row[copy_range.clone()],
    78                         &mut tex_row[copy_range],
    78                         &mut tex_row[copy_range],
    79                         sprite_row,
    79                         sprite_row,
    80                     );
    80                     );
    81 
    81 
    82                     x_offset += land_sprite.width()
    82                     x_offset += land_sprite.width() as usize
    83                 }
    83                 }
    84 
    84 
    85                 if x_offset < land.width() {
    85                 if x_offset < land.width() {
    86                     let final_range = x_offset..land.width();
    86                     let final_range = x_offset..land.width();
    87                     tex_row_copy(
    87                     tex_row_copy(
   105                 parameters.basic(),
   105                 parameters.basic(),
   106                 land.rows().rev().zip(texture.rows_mut().rev()),
   106                 land.rows().rev().zip(texture.rows_mut().rev()),
   107                 &mut offsets,
   107                 &mut offsets,
   108                 border_width,
   108                 border_width,
   109                 |x, y| {
   109                 |x, y| {
   110                     border_sprite
   110                     border_sprite.get_pixel(
   111                         .get_pixel(x % border_sprite.width(), border_sprite.height() - 1 - y)
   111                         x % border_sprite.width() as usize,
       
   112                         border_sprite.height() as usize - 1 - y,
       
   113                     )
   112                 },
   114                 },
   113             );
   115             );
   114 
   116 
   115             offsets.iter_mut().for_each(|v| *v = 255);
   117             offsets.iter_mut().for_each(|v| *v = 255);
   116 
   118 
   117             land_border_pass(
   119             land_border_pass(
   118                 parameters.basic(),
   120                 parameters.basic(),
   119                 land.rows().zip(texture.rows_mut()),
   121                 land.rows().zip(texture.rows_mut()),
   120                 &mut offsets,
   122                 &mut offsets,
   121                 border_width,
   123                 border_width,
   122                 |x, y| border_sprite.get_pixel(x % border_sprite.width(), y),
   124                 |x, y| border_sprite.get_pixel(x % border_sprite.width() as usize, y),
   123             );
   125             );
   124         }
   126         }
   125 
   127 
   126         texture
   128         texture
   127     }
   129     }
   167             .template_types
   169             .template_types
   168             .into_iter()
   170             .into_iter()
   169             .map(|(size, indices)| {
   171             .map(|(size, indices)| {
   170                 (
   172                 (
   171                     TemplateType(size),
   173                     TemplateType(size),
   172                     indices.iter().map(|i| templates[*i].to_template(&desc.tiles, &desc.edges)).collect(),
   174                     indices
       
   175                         .iter()
       
   176                         .map(|i| templates[*i].to_template(&desc.tiles, &desc.edges))
       
   177                         .collect(),
   173                 )
   178                 )
   174             })
   179             })
   175             .collect();
   180             .collect();
   176     }
   181     }
   177 
   182