diff -r 5acfdf49742d -r b273b43b16d2 rust/hedgewars-engine/src/lib.rs --- a/rust/hedgewars-engine/src/lib.rs Wed Nov 07 15:55:00 2018 +0100 +++ b/rust/hedgewars-engine/src/lib.rs Wed Nov 07 15:55:32 2018 +0100 @@ -1,18 +1,55 @@ +extern crate integral_geometry; +extern crate land2d; +extern crate landgen; +extern crate lfprng; + +mod world; + #[repr(C)] -pub struct Preview { +pub struct EngineInstance { + world: world::World, +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct PreviewInfo { width: u32, height: u32, hedgehogs_number: u8, land: *const u8, } - #[no_mangle] pub extern "C" fn protocol_version() -> u32 { 56 } #[no_mangle] -pub extern "C" fn generate_preview () -> Preview { - unimplemented!() +pub extern "C" fn start_engine() -> *mut EngineInstance { + let engine_state = Box::new(EngineInstance { + world: world::World::new(), + }); + + Box::leak(engine_state) } + +#[no_mangle] +pub extern "C" fn generate_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) { + (*engine_state).world.generate_preview(); + + let land_preview = (*engine_state).world.preview(); + + *preview = PreviewInfo { + width: land_preview.width() as u32, + height: land_preview.height() as u32, + hedgehogs_number: 0, + land: land_preview.raw_pixels().as_ptr(), + }; +} + +#[no_mangle] +pub extern "C" fn cleanup(engine_state: *mut EngineInstance) { + unsafe { + Box::from_raw(engine_state); + } +}