6 releases (3 breaking)
0.10.0 | May 20, 2024 |
---|---|
0.9.0 | Jul 4, 2023 |
0.8.1 | Mar 8, 2023 |
0.8.0 | Aug 5, 2022 |
0.7.0 | Feb 27, 2022 |
#1365 in Procedural macros
26 downloads per month
Used in arcdps
27KB
607 lines
Arcdps Plugin Bindings
This provides arcdps plugin bindings featuring safe, zero-cost abstractions.
Easily integrate into arcdps with just a few lines of code.
Features
Current features include:
- Versioning plugins via Cargo.toml
- A simple interface for all callbacks
- Optional opt out of safe abstractions to directly access the arcdps C interface
- Imgui interfacing via
imgui-rs
- Logging to arcdps via the
log
crate - unofficial extras bindings
Still in development:
- Exposing settings from arcdps
Still exploring technical boundaries:
- Arcdps-like snapping of imgui windows
How to use
A small example showcasing 2 of the many functions provided.
If init
returns an error, arcdps won't consider the plugin as loaded and will display the error.
No other function, except for unofficial-extras functions, will be called afterwards.
use std::error::Error;
use arcdps::UserInfoIter;
arcdps::arcdps_export! {
name: "example addon",
sig: 123, // change this to a random number
unofficial_extras_squad_update: crate::squad_update,
init: crate::init,
}
fn squad_update(users: UserInfoIter) {
for user in users.into_iter() {
println!("{:?}", user);
}
}
fn init(swapchain: Option<NonNull<c_void>>) -> Result<(), Box<dyn Error>> {
match swapchain {
Some(swapchain) => {
println!("init: initialized with swapchain: {:?}", swapchain);
Ok(())
}
None => Err("init: swapchain is None".into()),
}
}
Dependencies
~1.5MB
~36K SLoC