summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: e8c9f2328cb36ceb0ffbbe1479fcf363d6e39cdb (plain)
use std::time::Instant;

use crossterm::{
	event::{Event, KeyCode},
	style::ContentStyle,
};
use tortuise::buffer::{Buffer, Cell};

fn main() {
	let mut stdout = std::io::stdout().lock();
	let mut buffer = Buffer::new(&mut stdout).unwrap();
	let mut last_frame_start = Instant::now();
	buffer
		.render_loop(
			|renderer, event| {
				if let Event::Key(event) = event
					&& event.code == KeyCode::Esc
				{
					let _ = renderer.finish();
					std::process::exit(0);
				}
			},
			|renderer| {
				renderer.cells.clear();
				let end = Instant::now();
				let frame_time = (end - last_frame_start).as_micros();
				let digits = [
					frame_time % 1_000_000 / 100_000,
					frame_time % 100_000 / 10_000,
					frame_time % 10_000 / 1_000,
					frame_time % 1_000 / 100,
					frame_time % 100 / 10,
					frame_time % 10,
				];
				for (x, digit) in digits.into_iter().enumerate() {
					renderer.cells.push(Cell {
						character: char::from_digit(digit as u32, 10).unwrap(),
						x: x as u16,
						y: 0,
						z: 0,
						style: ContentStyle::new(),
					});
				}
				last_frame_start = Instant::now();
			},
		)
		.unwrap();
}