--- 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(¶ms, &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,