rust/lib-hedgewars-engine/src/lib.rs
author sheepluva
Mon, 05 Aug 2019 00:20:45 +0200
changeset 15295 f382ec6dba11
parent 15265 07e909ba4203
child 15759 c929e25a7da2
permissions -rw-r--r--
In hindsight my emscripten-ifdef (70d416a8f63f) is nonsense. As fpcrtl_glShaderSource() would not be defined and lead to compiling issues. So either it's 3 ifdefs (in pas2cRedo, pas2cSystem and misc.c), in order to toggle between fpcrtl_ and the native function, or alternatively have no ifdef for it at all. I'm going with none at all, which means emscripten will compile with the original (const) function prototype, being wrapped by the fpcrtl_ function, same as non-emscripten builds.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
     1
pub mod instance;
14704
12db7e435ea6 move camera into engine
alfadur
parents: 14702
diff changeset
     2
pub mod ipc;
14335
97be4f6bf264 add render module 🦔
alfadur
parents: 14295
diff changeset
     3
mod render;
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
     4
mod world;
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
     5
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
     6
use std::{
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
     7
    ffi::CString,
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
     8
    io::{Read, Write},
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
     9
    mem::replace,
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
    10
    os::raw::{c_char, c_void},
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
    11
};
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
    12
14713
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
    13
use integral_geometry::Point;
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
    14
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
    15
use self::instance::EngineInstance;
14188
3b83ec44e10b pass hwrunner gl context into engine
alfadur
parents: 14169
diff changeset
    16
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    17
#[repr(C)]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    18
#[derive(Copy, Clone)]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    19
pub struct PreviewInfo {
14143
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    20
    width: u32,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    21
    height: u32,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    22
    hedgehogs_number: u8,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    23
    land: *const u8,
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    24
}
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    25
14854
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    26
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    27
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    28
pub enum SimpleEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    29
    SwitchHedgehog,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    30
    Timer,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    31
    LongJump,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    32
    HighJump,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    33
    Accept,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    34
    Deny,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    35
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    36
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    37
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    38
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    39
pub enum LongEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    40
    ArrowUp,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    41
    ArrowDown,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    42
    ArrowLeft,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    43
    ArrowRight,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    44
    Precision,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    45
    Attack,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    46
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    47
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    48
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    49
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    50
pub enum LongEventState {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    51
    Set,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    52
    Unset,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    53
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    54
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    55
#[repr(C)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    56
#[derive(Debug, PartialEq, Clone)]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    57
pub enum PositionedEventType {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    58
    CursorMove,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    59
    CursorClick,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    60
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    61
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    62
#[no_mangle]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    63
pub extern "C" fn simple_event(engine_state: &mut EngineInstance, event_type: SimpleEventType) {}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    64
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    65
#[no_mangle]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    66
pub extern "C" fn long_event(
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    67
    engine_state: &mut EngineInstance,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    68
    event_type: LongEventType,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    69
    state: LongEventState,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    70
) {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    71
    println!("{:?}: {:?}", event_type, state);
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    72
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    73
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    74
#[no_mangle]
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    75
pub extern "C" fn positioned_event(
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    76
    engine_state: &mut EngineInstance,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    77
    event_type: PositionedEventType,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    78
    x: i32,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    79
    y: i32,
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    80
) {
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    81
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    82
}
aed75d439027 Implement external events approach to input user actions into engine.
unc0rr
parents: 14713
diff changeset
    83
14143
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    84
#[no_mangle]
14370
ef2fc0210362 Rename protocol_version to hedgewars_engine_protocol_version to ensure use of correct library
unC0Rr
parents: 14335
diff changeset
    85
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: 14335
diff changeset
    86
    58
14143
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    87
}
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    88
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    89
#[no_mangle]
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    90
pub extern "C" fn start_engine() -> *mut EngineInstance {
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
    91
    let engine_state = Box::new(EngineInstance::new());
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    92
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    93
    Box::leak(engine_state)
14143
745c73e0e644 Start working on frontend to rust engine rewrite
unC0Rr
parents:
diff changeset
    94
}
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    95
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    96
#[no_mangle]
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
    97
pub extern "C" fn generate_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) {
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14271
diff changeset
    98
    (*engine_state).process_ipc_queue();
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14271
diff changeset
    99
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   100
    (*engine_state).world.generate_preview();
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   101
14373
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   102
    if let Some(land_preview) = (*engine_state).world.preview() {
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   103
        *preview = PreviewInfo {
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   104
            width: land_preview.width() as u32,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   105
            height: land_preview.height() as u32,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   106
            hedgehogs_number: 0,
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   107
            land: land_preview.raw_pixels().as_ptr(),
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   108
        };
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   109
    }
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   110
}
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   111
14373
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   112
#[no_mangle]
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   113
pub extern "C" fn dispose_preview(engine_state: &mut EngineInstance, preview: &mut PreviewInfo) {
4409344db447 Rework EngineInstance::generatePreview, add preview cleanup function in enginelib
unC0Rr
parents: 14370
diff changeset
   114
    (*engine_state).world.dispose_preview();
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   115
}
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   116
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   117
#[no_mangle]
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents: 14271
diff changeset
   118
pub extern "C" fn send_ipc(engine_state: &mut EngineInstance, buf: *const u8, size: usize) {
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   119
    unsafe {
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   120
        (*engine_state)
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14854
diff changeset
   121
            .ipc_channel
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   122
            .write(std::slice::from_raw_parts(buf, size))
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   123
            .unwrap();
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   124
    }
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   125
}
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   126
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   127
#[no_mangle]
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   128
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: 14293
diff changeset
   129
    unsafe {
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   130
        (*engine_state)
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14854
diff changeset
   131
            .ipc_channel
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   132
            .read(std::slice::from_raw_parts_mut(buf, size))
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   133
            .unwrap_or(0)
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   134
    }
14271
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   135
}
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   136
1aac8a62be6f Implement send_ipc and read_ipc in engine lib, send_ipc in frontend
unC0Rr
parents: 14255
diff changeset
   137
#[no_mangle]
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   138
pub extern "C" fn setup_current_gl_context(
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   139
    engine_state: &mut EngineInstance,
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   140
    width: u16,
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   141
    height: u16,
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   142
    gl_loader: extern "C" fn(*const c_char) -> *const c_void,
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   143
) {
14706
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14705
diff changeset
   144
    gl::load_with(|name| {
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14705
diff changeset
   145
        let c_name = CString::new(name).unwrap();
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14705
diff changeset
   146
        gl_loader(c_name.as_ptr())
88b0efba77b9 init gl in frontend interface
alfadur
parents: 14705
diff changeset
   147
    });
14707
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14706
diff changeset
   148
    unsafe {
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14706
diff changeset
   149
        gl::Viewport(0, 0, width as i32, height as i32);
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14706
diff changeset
   150
    }
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
   151
    engine_state.world.create_renderer(width, height);
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   152
}
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   153
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   154
#[no_mangle]
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   155
pub extern "C" fn render_frame(engine_state: &mut EngineInstance) {
14707
5237b4c44d11 reeneble render from frontend
alfadur
parents: 14706
diff changeset
   156
    engine_state.render()
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   157
}
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   158
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
   159
#[no_mangle]
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   160
pub extern "C" fn advance_simulation(engine_state: &mut EngineInstance, ticks: u32) -> bool {
14295
fd8e0e52d5bd add hwphysics to engine
alfadur
parents: 14294
diff changeset
   161
    engine_state.world.step();
fd8e0e52d5bd add hwphysics to engine
alfadur
parents: 14294
diff changeset
   162
    true
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   163
}
14713
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   164
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   165
#[no_mangle]
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   166
pub extern "C" fn move_camera(engine_state: &mut EngineInstance, delta_x: i32, delta_y: i32) {
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   167
    engine_state
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   168
        .world
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   169
        .move_camera(Point::new(delta_x, delta_y), 0.0);
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   170
}
cc6ab1e3f7d5 Allow to move camera around
unc0rr
parents: 14707
diff changeset
   171
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
   172
#[no_mangle]
14153
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   173
pub extern "C" fn cleanup(engine_state: *mut EngineInstance) {
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   174
    unsafe {
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   175
        Box::from_raw(engine_state);
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   176
    }
b273b43b16d2 Make hedgewars-engine crate produce shared library, implement some basics
unC0Rr
parents: 14143
diff changeset
   177
}