#![warn(missing_docs)]
#[macro_use]
extern crate tracing;
pub mod setup;
use core::ffi::{c_char, c_int};
#[cfg(target_os = "android")]
use winit::platform::android::activity::AndroidApp;
#[cfg(target_family = "wasm")]
use wasm_bindgen::prelude::wasm_bindgen;
extern crate wasm_bindgen;
#[no_mangle]
#[cfg_attr(target_family = "wasm", wasm_bindgen)]
pub extern "C" fn ce_start(argc: c_int, argv: *const *const c_char) -> c_int {
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
let args: Option<Vec<String>>;
unsafe {
args = utils::args::parse_args_from_c(argc, argv.cast::<*const *const c_char>());
}
if let Some(args) = args {
utils::args::set_parsed_args(args);
}
if setup::get_args().version {
setup::print_version();
setup::print_dependencies();
return 0;
}
setup::setup_logger();
setup::process_args();
debug!("Launched as library...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
match setup::start() {
Err(error) => {
error!("{:?}", error);
-1
}
_ => 0,
}
}
#[no_mangle]
#[cfg(all(target_os = "android", feature = "client"))]
pub fn android_main(app: AndroidApp) {
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
if setup::get_args().version {
setup::print_version();
setup::print_dependencies();
return ();
}
setup::setup_logger();
setup::process_args();
debug!("Launched as Android app...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
client::game::store_android_app(app);
if let Err(error) = setup::start() {
error!("{:?}", error)
}
}
#[no_mangle]
#[cfg(target_family = "wasm")]
#[wasm_bindgen(start)]
pub fn wasm_start() {
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
if setup::get_args().version {
setup::print_version();
setup::print_dependencies();
return ();
}
setup::setup_logger();
setup::process_args();
debug!("Launched as Wasm library...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
if let Err(error) = setup::start() {
error!("{:?}", error)
}
}