60 lines
2.3 KiB
Rust
60 lines
2.3 KiB
Rust
use crate::dynamic_data::{
|
|
BattleStatCalculator, DamageLibrary, DynamicLibrary, DynamicLibraryImpl, MiscLibrary, ScriptResolver,
|
|
};
|
|
use crate::ffi::ffi_handle::{FFIHandle, FromFFIHandle};
|
|
use crate::static_data::StaticData;
|
|
use std::sync::Arc;
|
|
|
|
/// Instantiates a new DynamicLibrary with given parameters.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_new(
|
|
static_data: FFIHandle<Arc<dyn StaticData>>,
|
|
stat_calculator: FFIHandle<Arc<dyn BattleStatCalculator>>,
|
|
damage_library: FFIHandle<Arc<dyn DamageLibrary>>,
|
|
misc_library: FFIHandle<Arc<dyn MiscLibrary>>,
|
|
script_resolver: FFIHandle<Arc<dyn ScriptResolver>>,
|
|
) -> FFIHandle<Arc<dyn DynamicLibrary>> {
|
|
let a: Arc<dyn DynamicLibrary> = Arc::new(DynamicLibraryImpl::new(
|
|
static_data.from_ffi_handle(),
|
|
stat_calculator.from_ffi_handle(),
|
|
damage_library.from_ffi_handle(),
|
|
misc_library.from_ffi_handle(),
|
|
script_resolver.from_ffi_handle(),
|
|
));
|
|
FFIHandle::get_handle(a.into())
|
|
}
|
|
|
|
/// The static data is the immutable storage data for this library.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_get_static_data(
|
|
ptr: FFIHandle<Arc<dyn DynamicLibrary>>,
|
|
) -> FFIHandle<Arc<dyn StaticData>> {
|
|
FFIHandle::get_handle(ptr.from_ffi_handle().static_data().clone().into())
|
|
}
|
|
|
|
/// The stat calculator deals with the calculation of flat and boosted stats, based on the
|
|
/// Pokemons attributes.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_get_stat_calculator(
|
|
ptr: FFIHandle<Arc<dyn DynamicLibrary>>,
|
|
) -> FFIHandle<Arc<dyn BattleStatCalculator>> {
|
|
FFIHandle::get_handle(ptr.from_ffi_handle().stat_calculator().clone().into())
|
|
}
|
|
|
|
/// The damage calculator deals with the calculation of things relating to damage.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_get_damage_calculator(
|
|
ptr: FFIHandle<Arc<dyn DynamicLibrary>>,
|
|
) -> FFIHandle<Arc<dyn DamageLibrary>> {
|
|
FFIHandle::get_handle(ptr.from_ffi_handle().damage_calculator().clone().into())
|
|
}
|
|
|
|
/// The Misc Library holds minor functions that do not fall in any of the other libraries and
|
|
/// calculators.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_get_misc_library(
|
|
ptr: FFIHandle<Arc<dyn DynamicLibrary>>,
|
|
) -> FFIHandle<Arc<dyn MiscLibrary>> {
|
|
FFIHandle::get_handle(ptr.from_ffi_handle().misc_library().clone().into())
|
|
}
|