rust/hedgewars-engine/src/lib.rs
changeset 14174 b273b43b16d2
parent 14164 745c73e0e644
equal deleted inserted replaced
14173:5acfdf49742d 14174:b273b43b16d2
       
     1 extern crate integral_geometry;
       
     2 extern crate land2d;
       
     3 extern crate landgen;
       
     4 extern crate lfprng;
       
     5 
       
     6 mod world;
       
     7 
     1 #[repr(C)]
     8 #[repr(C)]
     2 pub struct Preview {
     9 pub struct EngineInstance {
       
    10     world: world::World,
       
    11 }
       
    12 
       
    13 #[repr(C)]
       
    14 #[derive(Copy, Clone)]
       
    15 pub struct PreviewInfo {
     3     width: u32,
    16     width: u32,
     4     height: u32,
    17     height: u32,
     5     hedgehogs_number: u8,
    18     hedgehogs_number: u8,
     6     land: *const u8,
    19     land: *const u8,
     7 }
    20 }
     8 
       
     9 
    21 
    10 #[no_mangle]
    22 #[no_mangle]
    11 pub extern "C" fn protocol_version() -> u32 {
    23 pub extern "C" fn protocol_version() -> u32 {
    12     56
    24     56
    13 }
    25 }
    14 
    26 
    15 #[no_mangle]
    27 #[no_mangle]
    16 pub extern "C" fn generate_preview () -> Preview  {
    28 pub extern "C" fn start_engine() -> *mut EngineInstance {
    17     unimplemented!()
    29     let engine_state = Box::new(EngineInstance {
       
    30         world: world::World::new(),
       
    31     });
       
    32 
       
    33     Box::leak(engine_state)
    18 }
    34 }
       
    35 
       
    36 #[no_mangle]
       
    37 pub extern "C" fn generate_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) {
       
    38     (*engine_state).world.generate_preview();
       
    39 
       
    40     let land_preview = (*engine_state).world.preview();
       
    41 
       
    42     *preview = PreviewInfo {
       
    43         width: land_preview.width() as u32,
       
    44         height: land_preview.height() as u32,
       
    45         hedgehogs_number: 0,
       
    46         land: land_preview.raw_pixels().as_ptr(),
       
    47     };
       
    48 }
       
    49 
       
    50 #[no_mangle]
       
    51 pub extern "C" fn cleanup(engine_state: *mut EngineInstance) {
       
    52     unsafe {
       
    53         Box::from_raw(engine_state);
       
    54     }
       
    55 }