#[macro_export]
macro_rules! script {
($t:ident) => {
static SCRIPT: ::std::sync::OnceLock<::std::sync::RwLock<$t>> =
::std::sync::OnceLock::new();
#[no_mangle]
pub fn init() {
SCRIPT.get_or_init(Default::default);
SCRIPT.get().unwrap().write().unwrap().init();
}
#[no_mangle]
pub fn tick() {
SCRIPT.get().unwrap().write().unwrap().tick();
}
#[no_mangle]
pub fn event(event: i32) {
let event = $crate::from_serialized_heap_ptr(event);
SCRIPT.get().unwrap().write().unwrap().event(event);
}
};
}