classicube-sys 4.1.0

Rust C bindings for ClassiCube.
# classicube-sys

Rust bindings to [ClassiCube](https://www.classicube.net)

[Documentation](https://spiralp.github.io/rust-classicube-sys/classicube_sys/index.html)

## Example

Add this to `Cargo.toml`:

```toml
[lib]
crate-type = ["cdylib"]

[dependencies]
classicube-sys = { git = "https://github.com/SpiralP/rust-classicube-sys.git" }
```

`lib.rs`:

```rust
use classicube_sys::*;
use std::{os::raw::c_int, ptr};

extern "C" fn init() {
    let owned_string = OwnedString::new("hello from rust!");
    unsafe {
        Chat_Add(owned_string.as_cc_string());
    }
}

#[unsafe(no_mangle)]
pub static Plugin_ApiVersion: c_int = 1;

#[unsafe(no_mangle)]
pub static mut Plugin_Component: IGameComponent = IGameComponent {
    // Called when the game is being loaded.
    Init: Some(init),
    // Called when the component is being freed. (e.g. due to game being closed)
    Free: None,
    // Called to reset the component's state. (e.g. reconnecting to server)
    Reset: None,
    // Called to update the component's state when the user begins loading a new map.
    OnNewMap: None,
    // Called to update the component's state when the user has finished loading a new map.
    OnNewMapLoaded: None,
    // Next component in linked list of components.
    next: ptr::null_mut(),
};
```

Copy the `.dll`/`.so`/`.dylib` from `target/{debug,release}/` to the `plugins` folder where your ClassiCube executable is found

## References

[Example library usage](https://github.com/SpiralP/rust-classicube-roll-plugin)

[ClassiCube source](https://github.com/UnknownShadow200/ClassiCube)

[ClassiCube Plugin help](https://github.com/UnknownShadow200/ClassiCube/blob/HEAD/doc/plugin-dev.md)

[ClassiCube Plugin examples](https://github.com/UnknownShadow200/ClassiCube-Plugins)