rust/lib-hwengine-future/src/lib.rs
branchtransitional_engine
changeset 16055 ce4b50823a95
parent 16053 3402b2185698
child 16058 9cbd18220eb7
equal deleted inserted replaced
16054:274a5afc2aec 16055:ce4b50823a95
     2 
     2 
     3 use landgen::{
     3 use landgen::{
     4     wavefront_collapse::generator::{
     4     wavefront_collapse::generator::{
     5         TemplateDescription as WfcTemplate,
     5         TemplateDescription as WfcTemplate,
     6     },
     6     },
       
     7     outline_template_based::outline_template::OutlineTemplate,
     7     LandGenerationParameters, LandGenerator,
     8     LandGenerationParameters, LandGenerator,
     8 };
     9 };
     9 use lfprng::LaggedFibonacciPRNG;
    10 use lfprng::LaggedFibonacciPRNG;
    10 use mapgen::{theme::Theme, MapGenerator};
    11 use mapgen::{theme::Theme, MapGenerator};
    11 use std::fs;
    12 use std::fs;
    45 
    46 
    46     Box::leak(game_field)
    47     Box::leak(game_field)
    47 }
    48 }
    48 
    49 
    49 #[no_mangle]
    50 #[no_mangle]
    50 pub extern "C" fn generate_templated_game_field(
    51 pub extern "C" fn generate_outline_templated_game_field(
    51     feature_size: u32,
    52     feature_size: u32,
    52     seed: *const i8,
    53     seed: *const i8,
    53     template_type: *const i8,
    54     template_type: *const i8,
    54     data_path: *const i8,
    55     data_path: *const i8,
    55 ) -> *mut GameField {
    56 ) -> *mut GameField {
    60     let template_type: &str = unsafe { CStr::from_ptr(template_type) }.to_str().unwrap();
    61     let template_type: &str = unsafe { CStr::from_ptr(template_type) }.to_str().unwrap();
    61 
    62 
    62     let mut random_numbers_gen = LaggedFibonacciPRNG::new(seed.as_bytes());
    63     let mut random_numbers_gen = LaggedFibonacciPRNG::new(seed.as_bytes());
    63 
    64 
    64     let yaml_templates =
    65     let yaml_templates =
       
    66         fs::read_to_string(data_path.join(Path::new("map_templates.yaml")).as_path())
       
    67             .expect("Error reading map templates file");
       
    68     let mut map_gen = MapGenerator::<OutlineTemplate>::new(data_path);
       
    69     map_gen.import_yaml_templates(&yaml_templates);
       
    70 
       
    71     let distance_divisor = feature_size.pow(2) / 8 + 10;
       
    72     let params = LandGenerationParameters::new(0u16, 0x8000u16, distance_divisor, false, false);
       
    73     let template = map_gen
       
    74         .get_template(template_type, &mut random_numbers_gen)
       
    75         .expect("Error reading outline templates file")
       
    76         .clone();
       
    77     let landgen = map_gen.build_generator(template);
       
    78     let collision = landgen.generate_land(&params, &mut random_numbers_gen);
       
    79     let size = collision.size().size();
       
    80 
       
    81     let game_field = Box::new(GameField {
       
    82         collision,
       
    83         pixels: land2d::Land2D::new(&size, 0),
       
    84         landgen_parameters: Some(params),
       
    85     });
       
    86 
       
    87     Box::leak(game_field)
       
    88 }
       
    89 
       
    90 #[no_mangle]
       
    91 pub extern "C" fn generate_wfc_templated_game_field(
       
    92     feature_size: u32,
       
    93     seed: *const i8,
       
    94     template_type: *const i8,
       
    95     data_path: *const i8,
       
    96 ) -> *mut GameField {
       
    97     let data_path: &str = unsafe { CStr::from_ptr(data_path) }.to_str().unwrap();
       
    98     let data_path = Path::new(&data_path);
       
    99 
       
   100     let seed: &str = unsafe { CStr::from_ptr(seed) }.to_str().unwrap();
       
   101     let template_type: &str = unsafe { CStr::from_ptr(template_type) }.to_str().unwrap();
       
   102 
       
   103     let mut random_numbers_gen = LaggedFibonacciPRNG::new(seed.as_bytes());
       
   104 
       
   105     let yaml_templates =
    65         fs::read_to_string(data_path.join(Path::new("wfc_templates.yaml")).as_path())
   106         fs::read_to_string(data_path.join(Path::new("wfc_templates.yaml")).as_path())
    66             .expect("Error reading map templates file");
   107             .expect("Error reading map templates file");
    67     let mut map_gen = MapGenerator::<WfcTemplate>::new(data_path);
   108     let mut map_gen = MapGenerator::<WfcTemplate>::new(data_path);
    68     map_gen.import_yaml_templates(&yaml_templates);
   109     map_gen.import_yaml_templates(&yaml_templates);
    69 
   110 
    70     let distance_divisor = feature_size.pow(2) / 8 + 10;
   111     let distance_divisor = feature_size.pow(2) / 8 + 10;
    71     let params = LandGenerationParameters::new(0u16, 0x8000u16, distance_divisor, false, false);
   112     let params = LandGenerationParameters::new(0u16, 0x8000u16, distance_divisor, false, false);
    72     let template = map_gen
   113     let template = map_gen
    73         .get_template(template_type, &mut random_numbers_gen)
   114         .get_template(template_type, &mut random_numbers_gen)
    74         .expect("Error reading templates file")
   115         .expect("Error reading wfc templates file")
    75         .clone();
   116         .clone();
    76     let landgen = map_gen.build_generator(template);
   117     let landgen = map_gen.build_generator(template);
    77     let collision = landgen.generate_land(&params, &mut random_numbers_gen);
   118     let collision = landgen.generate_land(&params, &mut random_numbers_gen);
    78     let size = collision.size().size();
   119     let size = collision.size().size();
    79 
   120