diff -r 8d9e3af8abce -r 7d3b94cdc3c4 rust/lib-hedgewars-engine/src/lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rust/lib-hedgewars-engine/src/lib.rs Wed Nov 07 22:04:17 2018 +0100 @@ -0,0 +1,55 @@ +extern crate integral_geometry; +extern crate land2d; +extern crate landgen; +extern crate lfprng; + +mod world; + +#[repr(C)] +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 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); + } +}