summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2026-06-17 17:41:28 -0400
committerMica White <botahamec@outlook.com>2026-06-17 17:41:28 -0400
commitb9570962cfc214bbac0f3fef1e6c1f9848f52658 (patch)
tree4c131b0208b394f7c10d395c3a6e72f91b0a57fc /src/main.rs
parent0403d02e376fd0b95abe2f06ffbf836dd2a8ddf0 (diff)
Basic renderer and framerate test
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index e7a11a9..e8c9f23 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,48 @@
+use std::time::Instant;
+
+use crossterm::{
+ event::{Event, KeyCode},
+ style::ContentStyle,
+};
+use tortuise::buffer::{Buffer, Cell};
+
fn main() {
- println!("Hello, world!");
+ 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();
}