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}