lotus_script/
macros.rs

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}