# HG changeset patch # User unC0Rr # Date 1541602532 -3600 # Node ID b273b43b16d23ccb165793aea880a7e38838f625 # Parent 5acfdf49742dbdda3a219fd0db16513c90601686 Make hedgewars-engine crate produce shared library, implement some basics diff -r 5acfdf49742d -r b273b43b16d2 rust/hedgewars-engine/Cargo.toml --- a/rust/hedgewars-engine/Cargo.toml Wed Nov 07 15:55:00 2018 +0100 +++ b/rust/hedgewars-engine/Cargo.toml Wed Nov 07 15:55:32 2018 +0100 @@ -5,3 +5,10 @@ [dependencies] land2d = { path = "../land2d" } +lfprng = { path = "../lfprng" } +integral-geometry = { path = "../integral-geometry" } +landgen = { path = "../landgen" } + +[lib] +name = "hedgewars_engine" +crate-type = ["dylib"] 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); + } +}