#[macro_use]
extern crate lazy_static;
extern crate byteorder;
#[cfg(not(target_arch = "wasm32"))]
extern crate glutin;
#[cfg(not(target_arch = "wasm32"))]
extern crate image;
pub extern crate paste;
#[cfg(not(target_arch = "wasm32"))]
extern crate rodio;
#[cfg(target_arch = "wasm32")]
extern crate serde;
#[cfg(target_arch = "wasm32")]
extern crate serde_json;
mod app_context;
mod app_info;
pub mod asset_id;
mod core;
mod input;
pub mod renderer;
pub(crate) mod timer;
pub(crate) mod utils;
#[cfg(target_arch = "wasm32")]
pub use crate::core::{wasm_exports, wasm_imports};
pub use crate::core::println;
pub use crate::app_context::{AppContext, Audio};
pub use crate::app_info::AppInfo;
pub use crate::input::{KeyCode, TouchPoint};
pub use crate::timer::Timer;
use crate::asset_id::AppAssetId;
use crate::renderer::Renderer;
const MAX_TIMESTEP: f64 = 1. / 15.;
pub fn run<AS: 'static + AppAssetId, AP: 'static + App<AS>>(info: AppInfo, app: AP) {
core::run(info, app);
}
#[macro_export]
macro_rules! nuuro_println {
($($t: tt )*) => {
::nuuro::println(format!($($t)*));
};
}
pub trait App<A: AppAssetId> {
fn start(&mut self, _ctx: &mut AppContext<A>) {}
fn advance(&mut self, seconds: f64, ctx: &mut AppContext<A>);
fn key_down(&mut self, key: KeyCode, ctx: &mut AppContext<A>);
fn key_up(&mut self, _key: KeyCode, _ctx: &mut AppContext<A>) {}
fn render(&mut self, renderer: &mut Renderer<A>, ctx: &AppContext<A>);
}