Skip to main content

tinygame_core/
lib.rs

1mod app;
2mod core;
3mod core_plugin;
4mod result;
5
6pub use core::utils;
7pub use core::{
8    plugins::{Plugin, PluginMeta},
9    world::World,
10};
11pub use core_plugin::{Core, CorePlugin, CoreSettings};
12pub use result::AppResult;
13pub use sdl3_sys;
14
15#[doc(hidden)]
16pub use sdl3_sys as __sdl3_sys;
17#[doc(hidden)]
18pub use app::{event as __app_event, init as __app_init, iterate as __app_iterate, quit as __app_quit, run as __app_run};
19
20#[macro_export]
21macro_rules! app {
22    ($setup:expr) => {
23        unsafe extern "C" fn __tinygame_app_init(
24            state_raw: *mut *mut ::std::ffi::c_void,
25            _argc: ::core::ffi::c_int,
26            _argv: *mut *mut ::core::ffi::c_char,
27        ) -> $crate::__sdl3_sys::init::SDL_AppResult {
28            let __tinygame_setup: fn(&mut $crate::World) = $setup;
29            $crate::__app_init(state_raw, __tinygame_setup)
30        }
31
32        unsafe extern "C" fn __tinygame_app_iterate(
33            state_raw: *mut ::std::ffi::c_void,
34        ) -> $crate::__sdl3_sys::init::SDL_AppResult {
35            $crate::__app_iterate(state_raw)
36        }
37
38        unsafe extern "C" fn __tinygame_app_event(
39            state_raw: *mut ::std::ffi::c_void,
40            event: *mut $crate::__sdl3_sys::events::SDL_Event,
41        ) -> $crate::__sdl3_sys::init::SDL_AppResult {
42            $crate::__app_event(state_raw, event)
43        }
44
45        unsafe extern "C" fn __tinygame_app_quit(
46            state_raw: *mut ::std::ffi::c_void,
47            _result: $crate::__sdl3_sys::init::SDL_AppResult,
48        ) {
49            $crate::__app_quit(state_raw)
50        }
51
52        fn main() {
53            unsafe extern "C" fn __tinygame_sdl_main(
54                argc: ::core::ffi::c_int,
55                argv: *mut *mut ::core::ffi::c_char,
56            ) -> ::core::ffi::c_int {
57                unsafe {
58                    $crate::__sdl3_sys::main::SDL_EnterAppMainCallbacks(
59                        argc,
60                        argv,
61                        ::core::option::Option::Some(__tinygame_app_init),
62                        ::core::option::Option::Some(__tinygame_app_iterate),
63                        ::core::option::Option::Some(__tinygame_app_event),
64                        ::core::option::Option::Some(__tinygame_app_quit),
65                    )
66                }
67            }
68
69            ::std::process::exit($crate::__app_run(__tinygame_sdl_main))
70        }
71    };
72}