1#[macro_export]
2macro_rules! script {
3 ($t:ident) => {
4 thread_local! {
5 static SCRIPT: ::std::sync::LazyLock<::std::sync::Mutex<$t>> =
6 ::std::sync::LazyLock::new(Default::default);
7 }
8
9 #[no_mangle]
10 pub fn init() {
11 SCRIPT.with(|s| s.lock().unwrap().init());
12 }
13
14 #[no_mangle]
15 pub fn register_actions() {
16 let actions = $t::actions();
17 $crate::action::register_many(&actions);
18 }
19
20 #[no_mangle]
21 pub fn tick() {
22 SCRIPT.with(|s| s.lock().unwrap().tick());
23 }
24
25 #[no_mangle]
26 pub fn late_tick() {
27 for message in $crate::message::get() {
28 SCRIPT.with(|s| s.lock().unwrap().on_message(message));
29 }
30 }
31 };
32}