PkmnLib_rs/src/ffi/dynamic_data/libraries/dynamic_library.rs

28 lines
1015 B
Rust
Raw Normal View History

2022-12-24 11:00:50 +00:00
use crate::dynamic_data::{
BattleStatCalculator, DamageLibrary, DynamicLibrary, DynamicLibraryImpl, MiscLibrary, ScriptResolver,
};
2022-10-14 08:33:19 +00:00
use crate::ffi::{IdentifiablePointer, OwnedPtr};
use crate::static_data::StaticData;
2022-10-14 11:59:04 +00:00
use std::sync::Arc;
2022-10-14 08:33:19 +00:00
2022-10-14 14:53:30 +00:00
/// Instantiates a new DynamicLibrary with given parameters.
2022-10-14 08:33:19 +00:00
#[no_mangle]
extern "C" fn dynamic_library_new(
2022-12-24 11:00:50 +00:00
static_data: OwnedPtr<Box<dyn StaticData>>,
2022-10-14 08:33:19 +00:00
stat_calculator: OwnedPtr<Box<dyn BattleStatCalculator>>,
damage_library: OwnedPtr<Box<dyn DamageLibrary>>,
misc_library: OwnedPtr<Box<dyn MiscLibrary>>,
script_resolver: OwnedPtr<Box<dyn ScriptResolver>>,
2022-12-24 11:00:50 +00:00
) -> IdentifiablePointer<Arc<dyn DynamicLibrary>> {
2022-10-14 08:33:19 +00:00
unsafe {
2022-12-24 11:00:50 +00:00
let a: Arc<dyn DynamicLibrary> = Arc::new(DynamicLibraryImpl::new(
2022-10-14 08:33:19 +00:00
*Box::from_raw(static_data),
*Box::from_raw(stat_calculator),
*Box::from_raw(damage_library),
*Box::from_raw(misc_library),
*Box::from_raw(script_resolver),
2022-12-24 11:00:50 +00:00
));
a.into()
2022-10-14 08:33:19 +00:00
}
}