rust/lib-hedgewars-engine/src/lib.rs
author unC0Rr
Wed, 28 Aug 2024 15:34:49 +0200
branchtransitional_engine
changeset 16051 2003b466b279
parent 15954 9502611bffc1
parent 16046 e8afb1bf2779
permissions -rw-r--r--
Merge default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
     1
pub mod instance;
14725
12db7e435ea6 move camera into engine
alfadur
parents: 14723
diff changeset
     2
pub mod ipc;
14356
97be4f6bf264 add render module 🦔
alfadur
parents: 14316
diff changeset
     3
mod render;
15797
95402fa4e191 move time out of physics
alfadur
parents: 15781
diff changeset
     4
mod time;
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
     5
mod world;
14292
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
     6
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
     7
use std::{
15954
9502611bffc1 Some bug fixes, build fixes and code formatting
unC0Rr
parents: 15921
diff changeset
     8
    ffi::{CStr, CString},
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
     9
    io::{Read, Write},
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
    10
    mem::replace,
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
    11
    os::raw::{c_char, c_void},
15919
d52f5d8e75e6 Allow passing data_path from QML
unc0rr
parents: 15797
diff changeset
    12
    path::Path,
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
    13
};
14292
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
    14
14734
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
    15
use integral_geometry::Point;
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
    16
14726
19122a329774 make world renderer optional + fmt
alfadur
parents: 14725
diff changeset
    17
use self::instance::EngineInstance;
14209
3b83ec44e10b pass hwrunner gl context into engine
alfadur
parents: 14190
diff changeset
    18
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
    19
#[repr(C)]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
    20
#[derive(Copy, Clone)]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
    21
pub struct PreviewInfo {
14164
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    22
    width: u32,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    23
    height: u32,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    24
    hedgehogs_number: u8,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    25
    land: *const u8,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    26
}
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    27
14875
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    28
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    29
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    30
pub enum SimpleEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    31
    SwitchHedgehog,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    32
    Timer,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    33
    LongJump,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    34
    HighJump,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    35
    Accept,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    36
    Deny,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    37
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    38
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    39
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    40
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    41
pub enum LongEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    42
    ArrowUp,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    43
    ArrowDown,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    44
    ArrowLeft,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    45
    ArrowRight,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    46
    Precision,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    47
    Attack,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    48
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    49
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    50
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    51
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    52
pub enum LongEventState {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    53
    Set,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    54
    Unset,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    55
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    56
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    57
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    58
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    59
pub enum PositionedEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    60
    CursorMove,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    61
    CursorClick,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    62
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    63
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    64
#[no_mangle]
16045
4933920eba89 Implement key bindings
unC0Rr
parents: 15921
diff changeset
    65
pub extern "C" fn simple_event(engine_state: &mut EngineInstance, event_type: SimpleEventType) {
4933920eba89 Implement key bindings
unC0Rr
parents: 15921
diff changeset
    66
    println!("{:?}", event_type);
4933920eba89 Implement key bindings
unC0Rr
parents: 15921
diff changeset
    67
}
14875
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    68
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    69
#[no_mangle]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    70
pub extern "C" fn long_event(
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    71
    engine_state: &mut EngineInstance,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    72
    event_type: LongEventType,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    73
    state: LongEventState,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    74
) {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    75
    println!("{:?}: {:?}", event_type, state);
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    76
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    77
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    78
#[no_mangle]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    79
pub extern "C" fn positioned_event(
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    80
    engine_state: &mut EngineInstance,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    81
    event_type: PositionedEventType,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    82
    x: i32,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    83
    y: i32,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    84
) {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    85
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14734
diff changeset
    86
14164
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    87
#[no_mangle]
14391
ef2fc0210362 Rename protocol_version to hedgewars_engine_protocol_version to ensure use of correct library
unC0Rr
parents: 14356
diff changeset
    88
pub extern "C" fn hedgewars_engine_protocol_version() -> u32 {
ef2fc0210362 Rename protocol_version to hedgewars_engine_protocol_version to ensure use of correct library
unC0Rr
parents: 14356
diff changeset
    89
    58
14164
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    90
}
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    91
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    92
#[no_mangle]
15919
d52f5d8e75e6 Allow passing data_path from QML
unc0rr
parents: 15797
diff changeset
    93
pub extern "C" fn start_engine(data_path: *const i8) -> *mut EngineInstance {
d52f5d8e75e6 Allow passing data_path from QML
unc0rr
parents: 15797
diff changeset
    94
    let data_path: &str = unsafe { CStr::from_ptr(data_path) }.to_str().unwrap();
d52f5d8e75e6 Allow passing data_path from QML
unc0rr
parents: 15797
diff changeset
    95
d52f5d8e75e6 Allow passing data_path from QML
unc0rr
parents: 15797
diff changeset
    96
    let engine_state = Box::new(EngineInstance::new(Path::new(&data_path)));
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
    97
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
    98
    Box::leak(engine_state)
14164
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    99
}
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   100
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   101
#[no_mangle]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   102
pub extern "C" fn generate_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) {
14293
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14292
diff changeset
   103
    (*engine_state).process_ipc_queue();
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14292
diff changeset
   104
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   105
    (*engine_state).world.generate_preview();
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   106
14394
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   107
    if let Some(land_preview) = (*engine_state).world.preview() {
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   108
        *preview = PreviewInfo {
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   109
            width: land_preview.width() as u32,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   110
            height: land_preview.height() as u32,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   111
            hedgehogs_number: 0,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   112
            land: land_preview.raw_pixels().as_ptr(),
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   113
        };
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   114
    }
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   115
}
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   116
14394
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   117
#[no_mangle]
15921
5b3beb90e1a6 Implement generation of c header from rust interface, adapt qmlfrontend
unC0Rr
parents: 15919
diff changeset
   118
pub extern "C" fn dispose_preview(engine_state: &mut EngineInstance) {
14394
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14391
diff changeset
   119
    (*engine_state).world.dispose_preview();
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   120
}
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   121
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   122
#[no_mangle]
14293
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14292
diff changeset
   123
pub extern "C" fn send_ipc(engine_state: &mut EngineInstance, buf: *const u8, size: usize) {
14292
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   124
    unsafe {
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   125
        (*engine_state)
15286
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14875
diff changeset
   126
            .ipc_channel
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   127
            .write(std::slice::from_raw_parts(buf, size))
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   128
            .unwrap();
14292
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   129
    }
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   130
}
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   131
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   132
#[no_mangle]
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   133
pub extern "C" fn read_ipc(engine_state: &mut EngineInstance, buf: *mut u8, size: usize) -> usize {
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   134
    unsafe {
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   135
        (*engine_state)
15286
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14875
diff changeset
   136
            .ipc_channel
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   137
            .read(std::slice::from_raw_parts_mut(buf, size))
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   138
            .unwrap_or(0)
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   139
    }
14292
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   140
}
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   141
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14276
diff changeset
   142
#[no_mangle]
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   143
pub extern "C" fn setup_current_gl_context(
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   144
    engine_state: &mut EngineInstance,
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   145
    width: u16,
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   146
    height: u16,
15921
5b3beb90e1a6 Implement generation of c header from rust interface, adapt qmlfrontend
unC0Rr
parents: 15919
diff changeset
   147
    gl_loader: extern "C" fn(*const c_char) -> *mut c_void,
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   148
) {
14727
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14726
diff changeset
   149
    gl::load_with(|name| {
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14726
diff changeset
   150
        let c_name = CString::new(name).unwrap();
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14726
diff changeset
   151
        gl_loader(c_name.as_ptr())
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14726
diff changeset
   152
    });
14728
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14727
diff changeset
   153
    unsafe {
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14727
diff changeset
   154
        gl::Viewport(0, 0, width as i32, height as i32);
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14727
diff changeset
   155
    }
14726
19122a329774 make world renderer optional + fmt
alfadur
parents: 14725
diff changeset
   156
    engine_state.world.create_renderer(width, height);
16046
e8afb1bf2779 Implement triggering advancement of simulation in qmlfrontend
unC0Rr
parents: 16045
diff changeset
   157
    engine_state.world.init_renderer();
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   158
}
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   159
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   160
#[no_mangle]
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   161
pub extern "C" fn render_frame(engine_state: &mut EngineInstance) {
14728
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14727
diff changeset
   162
    engine_state.render()
14314
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   163
}
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   164
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14293
diff changeset
   165
#[no_mangle]
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   166
pub extern "C" fn advance_simulation(engine_state: &mut EngineInstance, ticks: u32) -> bool {
14316
fd8e0e52d5bd add hwphysics to engine
alfadur
parents: 14315
diff changeset
   167
    engine_state.world.step();
fd8e0e52d5bd add hwphysics to engine
alfadur
parents: 14315
diff changeset
   168
    true
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   169
}
14734
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   170
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   171
#[no_mangle]
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   172
pub extern "C" fn move_camera(engine_state: &mut EngineInstance, delta_x: i32, delta_y: i32) {
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   173
    engine_state
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   174
        .world
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   175
        .move_camera(Point::new(delta_x, delta_y), 0.0);
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   176
}
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14728
diff changeset
   177
14315
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14314
diff changeset
   178
#[no_mangle]
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   179
pub extern "C" fn cleanup(engine_state: *mut EngineInstance) {
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   180
    unsafe {
15921
5b3beb90e1a6 Implement generation of c header from rust interface, adapt qmlfrontend
unC0Rr
parents: 15919
diff changeset
   181
        drop(Box::from_raw(engine_state));
14174
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   182
    }
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14164
diff changeset
   183
}