rust/lib-hwengine-future/src/lib.rs
branchtransitional_engine
changeset 16033 1860852892c0
parent 16029 9cbd18220eb7
child 16034 09beeec033ba
--- a/rust/lib-hwengine-future/src/lib.rs	Tue Sep 10 13:56:51 2024 +0200
+++ b/rust/lib-hwengine-future/src/lib.rs	Tue Sep 10 18:21:31 2024 +0200
@@ -2,6 +2,7 @@
 
 use landgen::{
     outline_template_based::outline_template::OutlineTemplate,
+    maze::MazeTemplate,
     wavefront_collapse::generator::TemplateDescription as WfcTemplate, LandGenerationParameters,
     LandGenerator,
 };
@@ -126,6 +127,45 @@
 }
 
 #[no_mangle]
+pub extern "C" fn generate_maze_game_field(
+    feature_size: u32,
+    seed: *const i8,
+    template_type: *const i8,
+    data_path: *const i8,
+) -> *mut GameField {
+    let data_path: &str = unsafe { CStr::from_ptr(data_path) }.to_str().unwrap();
+    let data_path = Path::new(&data_path);
+
+    let seed: &str = unsafe { CStr::from_ptr(seed) }.to_str().unwrap();
+    let template_type: &str = unsafe { CStr::from_ptr(template_type) }.to_str().unwrap();
+
+    let mut random_numbers_gen = LaggedFibonacciPRNG::new(seed.as_bytes());
+
+    let map_gen = MapGenerator::<MazeTemplate>::new(data_path);
+    let distance_divisor = feature_size.pow(2) / 8 + 10;
+    let params = LandGenerationParameters::new(0u16, 0x8000u16, distance_divisor, false, false);
+    let template = MazeTemplate {
+        width: 4096,
+        height: 2048,
+        cell_size: 80,
+        inverted: false,
+        distortion_limiting_factor: 100,
+        braidness: 10,
+    };
+    let landgen = map_gen.build_generator(template);
+    let collision = landgen.generate_land(&params, &mut random_numbers_gen);
+    let size = collision.size().size();
+
+    let game_field = Box::new(GameField {
+        collision,
+        pixels: land2d::Land2D::new(&size, 0),
+        landgen_parameters: Some(params),
+    });
+
+    Box::leak(game_field)
+}
+
+#[no_mangle]
 pub extern "C" fn apply_theme(
     game_field: &mut GameField,
     data_path: *const i8,