use crate::ffi::{ExternPointer, IdentifiablePointer, OwnedPtr}; use crate::static_data::{Nature, Statistic}; use std::ptr::drop_in_place; use std::sync::Arc; #[no_mangle] extern "C" fn nature_new( increase_stat: Statistic, decrease_stat: Statistic, increase_modifier: f32, decrease_modifier: f32, ) -> IdentifiablePointer> { Nature::new(increase_stat, decrease_stat, increase_modifier, decrease_modifier).into() } #[no_mangle] unsafe extern "C" fn nature_drop(ptr: OwnedPtr>) { drop_in_place(ptr) } #[no_mangle] extern "C" fn nature_increased_stat(ptr: ExternPointer>) -> Statistic { ptr.as_ref().increased_stat() } #[no_mangle] extern "C" fn nature_decreased_stat(ptr: ExternPointer>) -> Statistic { ptr.as_ref().decreased_stat() } #[no_mangle] extern "C" fn nature_get_stat_modifier(ptr: ExternPointer>, stat: Statistic) -> f32 { ptr.as_ref().get_stat_modifier(stat) }