use std::io::BufWriter;
use mimalloc::MiMalloc;
use tortuise::{
buffer::{Buffer, Event},
file::FileManager,
input::InputManager,
scene::switch_scenes,
script::{ScriptContext, ScriptManager, WasmRunner},
storage::StorageManager,
time::TimeContext,
};
#[global_allocator]
static GLOBAL: MiMalloc = MiMalloc;
fn main() {
let mut files = FileManager::default();
let wasm_runner = WasmRunner::new();
let manifest = files
.load_file(Box::from("manifest.toml".as_ref()), &wasm_runner.engine)
.unwrap()
.unwrap_manifest()
.clone();
let stdout = Box::new(BufWriter::new(std::io::stdout().lock()));
let mut buffer = Buffer::new(stdout).unwrap();
let mut input = InputManager::new();
let mut time = TimeContext::new();
let mut storage = StorageManager::load(etcetera::AppStrategyArgs {
top_level_domain: "com".into(),
author: "botahamec".into(),
app_name: manifest.name.to_string(),
})
.unwrap();
let mut scripts = ScriptManager::new(&manifest.scripts);
let mut context = ScriptContext {
manifest: &manifest,
buffer: &mut buffer,
storage: &mut storage,
input: &input,
time: &time,
operation_queue: Vec::new(),
};
switch_scenes(
&mut scripts,
&mut context,
&mut files,
&wasm_runner,
manifest.first_scene,
);
let server_addr = format!("127.0.0.1:{}", puffin_http::DEFAULT_PORT);
let _puffin_server = puffin_http::Server::new(&server_addr).unwrap();
puffin::set_scopes_on(true);
buffer
.render_loop(|buffer, event| match event {
Event::Key(event) => {
if event.is_press() {
input.press_key(event.code);
}
}
Event::Render => {
buffer.cells.clear();
let mut context = ScriptContext {
manifest: &manifest,
buffer,
storage: &mut storage,
input: &input,
time: &time,
operation_queue: Vec::new(),
};
scripts.run_scripts(&mut context, &wasm_runner, &mut files);
input.reset_next_frame();
time.next_frame();
}
})
.unwrap();
}
|