1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#![feature(arc_new_cyclic)] #![deny(clippy::all)] //! Riddle crate supporting some basic game-centric time functionality. //! //! The most significant of which is keeping track of framerate, and providing //! a centralized place to access a consistent delta_t when running game logic. //! //! # Riddle Example //! //! The **recommended** way to use this crate is through the main `riddle` crate. //! Riddle exposes this crate through `riddle::time`. //! //! ```no_run //! use riddle::*; //! use std::sync::{Arc, atomic::{AtomicBool, Ordering}}; //! //! fn main() -> Result<(), RiddleError> { //! let rdl = RiddleLib::new()?; //! //! let quit_flag = Arc::new(AtomicBool::new(false)); //! rdl.state().time().register_timer(std::time::Duration::from_millis(200), { //! let quit_flag = quit_flag.clone(); //! move || { quit_flag.store(true, Ordering::Relaxed); } //! }); //! //! rdl.run(move |rdl| { //! if quit_flag.load(Ordering::Relaxed) { //! rdl.quit(); //! } //! //! if let Event::ProcessFrame = rdl.event() { //! // FPS: rdl.time().fps() //! } //! }) //! } //! ``` //! //! # Direct Example //! //! If you don't want to depend on `riddle`, you can use this crate directly. //! //! ``` //! use riddle_time::{ext::*, *}; //! use std::sync::{Arc, atomic::{AtomicBool, Ordering}}; //! //! let time = TimeSystem::new_shared(); //! //! let quit_flag = Arc::new(AtomicBool::new(false)); //! time.register_timer(std::time::Duration::from_millis(200), { //! let quit_flag = quit_flag.clone(); //! move || { quit_flag.store(true, Ordering::Relaxed); } //! }); //! //! while !quit_flag.load(Ordering::Relaxed) { //! std::thread::sleep(std::time::Duration::from_millis(100)); //! time.process_frame(); //! // FPS: time.fps() //! } //! ``` mod time_system; mod timer; pub mod ext; #[doc(hidden)] pub mod doctest; pub use time_system::*; pub use timer::*;