pub mod bit; pub mod protocol; pub mod format; pub mod nbt; pub mod item; pub mod gl; pub mod types; pub mod resources; pub mod render; extern crate glfw; extern crate image; extern crate time; extern crate byteorder; extern crate serde_json; extern crate steven_openssl as openssl; extern crate hyper; extern crate flate2; use std::sync::{Arc, RwLock}; use glfw::{Action, Context, Key}; fn main() { let resource_manager = Arc::new(RwLock::new(resources::Manager::new())); { resource_manager.write().unwrap().tick(); } let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap(); glfw.window_hint(glfw::WindowHint::ContextVersion(3, 2)); glfw.window_hint(glfw::WindowHint::OpenGlProfile(glfw::OpenGlProfileHint::Core)); glfw.window_hint(glfw::WindowHint::OpenGlForwardCompat(true)); glfw.window_hint(glfw::WindowHint::DepthBits(32)); glfw.window_hint(glfw::WindowHint::StencilBits(0)); let (mut window, events) = glfw.create_window(854, 480, "Steven", glfw::WindowMode::Windowed) .expect("Failed to create GLFW window"); gl::init(&mut window); window.set_key_polling(true); window.make_current(); glfw.set_swap_interval(1); let mut renderer = render::Renderer::new(resource_manager.clone()); let mut last_frame = time::now(); let frame_time = (time::Duration::seconds(1).num_nanoseconds().unwrap() as f64) / 60.0; while !window.should_close() { { resource_manager.write().unwrap().tick(); } let now = time::now(); let diff = now - last_frame; last_frame = now; let delta = (diff.num_nanoseconds().unwrap() as f64) / frame_time; let (width, height) = window.get_framebuffer_size(); renderer.tick(delta, width as u32, height as u32); window.swap_buffers(); glfw.poll_events(); for (_, event) in glfw::flush_messages(&events) { handle_window_event(&mut window, event); } } } fn handle_window_event(window: &mut glfw::Window, event: glfw::WindowEvent) { match event { glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) => { window.set_should_close(true) } _ => {} } }