improve output
This commit is contained in:
parent
e2dd9e78ac
commit
e6f5be6f01
79
src/main.rs
79
src/main.rs
|
@ -1,18 +1,18 @@
|
||||||
use std::io::stdout;
|
use std::io::stdout;
|
||||||
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, thread};
|
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use crossterm::{event, execute, queue};
|
||||||
use crossterm::event::{Event, KeyCode, KeyEventKind};
|
use crossterm::event::{Event, KeyCode, KeyEventKind};
|
||||||
use crossterm::style::{Print, PrintStyledContent, Stylize};
|
use crossterm::style::{Print, PrintStyledContent, Stylize};
|
||||||
use crossterm::terminal::{EnterAlternateScreen, LeaveAlternateScreen};
|
use crossterm::terminal::{disable_raw_mode, enable_raw_mode, EnableLineWrap, EnterAlternateScreen, LeaveAlternateScreen};
|
||||||
use crossterm::{event, execute};
|
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use rand::{distributions, Rng};
|
use rand::{distributions, Rng};
|
||||||
use servicepoint2::Command::{BitmapLinearWin, CharBrightness};
|
|
||||||
use servicepoint2::{
|
use servicepoint2::{
|
||||||
ByteGrid, CompressionCode, Connection, Origin, PixelGrid, PIXEL_WIDTH, TILE_HEIGHT, TILE_WIDTH,
|
ByteGrid, CompressionCode, Connection, Origin, PIXEL_WIDTH, PixelGrid, TILE_HEIGHT, TILE_WIDTH,
|
||||||
};
|
};
|
||||||
|
use servicepoint2::Command::{BitmapLinearWin, CharBrightness};
|
||||||
|
|
||||||
use crate::game::Game;
|
use crate::game::Game;
|
||||||
|
|
||||||
|
@ -39,9 +39,9 @@ fn main() {
|
||||||
let connection = Connection::open(&cli.destination)
|
let connection = Connection::open(&cli.destination)
|
||||||
.expect("Could not connect. Did you forget `--destination`?");
|
.expect("Could not connect. Did you forget `--destination`?");
|
||||||
|
|
||||||
let entered_alternate = execute!(io::stdout(), EnterAlternateScreen).is_ok();
|
let entered_alternate = execute!(stdout(), EnterAlternateScreen, EnableLineWrap).is_ok();
|
||||||
|
|
||||||
crossterm::terminal::enable_raw_mode().expect("could not enable raw terminal mode");
|
enable_raw_mode().expect("could not enable raw terminal mode");
|
||||||
|
|
||||||
let mut left = Game::default();
|
let mut left = Game::default();
|
||||||
let mut right = Game::default();
|
let mut right = Game::default();
|
||||||
|
@ -100,38 +100,23 @@ fn main() {
|
||||||
Event::Key(key_event) if key_event.kind == KeyEventKind::Press => {
|
Event::Key(key_event) if key_event.kind == KeyEventKind::Press => {
|
||||||
match key_event.code {
|
match key_event.code {
|
||||||
KeyCode::Char('h') => {
|
KeyCode::Char('h') => {
|
||||||
execute!(
|
println_info("[h] help");
|
||||||
stdout(),
|
println_info("[q] quit");
|
||||||
Print("h for help\r\n"),
|
println_info("[a] reset left field");
|
||||||
Print("q to quit\r\n"),
|
println_info("[d] reset right field");
|
||||||
Print("a to reset left field\r\n"),
|
println_info("[→] move divider right");
|
||||||
Print("d to reset right field\r\n")
|
println_info("[←] move divider left");
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
KeyCode::Char('q') => {
|
KeyCode::Char('q') => {
|
||||||
execute!(stdout(), PrintStyledContent("terminating\r\n".red()))
|
println_warning("terminating");
|
||||||
.unwrap();
|
|
||||||
close_requested = true;
|
close_requested = true;
|
||||||
}
|
}
|
||||||
KeyCode::Char('a') => {
|
KeyCode::Char('a') => {
|
||||||
execute!(
|
println_debug("generating new random field for left");
|
||||||
stdout(),
|
|
||||||
PrintStyledContent(
|
|
||||||
"generating new random field for left\r\n".grey()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
left = make_random_field(cli.probability);
|
left = make_random_field(cli.probability);
|
||||||
}
|
}
|
||||||
KeyCode::Char('d') => {
|
KeyCode::Char('d') => {
|
||||||
execute!(
|
println_info("generating new random field for right");
|
||||||
stdout(),
|
|
||||||
PrintStyledContent(
|
|
||||||
"generating new random field for right\r\n".grey()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
right = make_random_field(cli.probability);
|
right = make_random_field(cli.probability);
|
||||||
}
|
}
|
||||||
KeyCode::Right => {
|
KeyCode::Right => {
|
||||||
|
@ -141,22 +126,12 @@ fn main() {
|
||||||
split_pixel -= 1;
|
split_pixel -= 1;
|
||||||
}
|
}
|
||||||
key_code => {
|
key_code => {
|
||||||
execute!(
|
println_debug(format!("unhandled KeyCode {key_code:?}"));
|
||||||
stdout(),
|
|
||||||
PrintStyledContent(
|
|
||||||
format!("unhandled KeyCode {key_code:?}\r\n").dark_grey()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
event => {
|
event => {
|
||||||
execute!(
|
println_debug(format!("unhandled event {event:?}"));
|
||||||
stdout(),
|
|
||||||
PrintStyledContent(format!("unhandled event {event:?}\r\n").dark_grey()),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,13 +139,29 @@ fn main() {
|
||||||
thread::sleep(Duration::from_millis(30));
|
thread::sleep(Duration::from_millis(30));
|
||||||
}
|
}
|
||||||
|
|
||||||
crossterm::terminal::disable_raw_mode().expect("could not disable raw terminal mode");
|
disable_raw_mode().expect("could not disable raw terminal mode");
|
||||||
|
|
||||||
if entered_alternate {
|
if entered_alternate {
|
||||||
execute!(stdout(), LeaveAlternateScreen).expect("could not leave alternate screen");
|
execute!(stdout(), LeaveAlternateScreen).expect("could not leave alternate screen");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn println_info(text: impl Into<String>) {
|
||||||
|
println_command(PrintStyledContent(text.into().white()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn println_debug(text: impl Into<String>) {
|
||||||
|
println_command(PrintStyledContent(text.into().grey()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn println_warning(text: impl Into<String>) {
|
||||||
|
println_command(PrintStyledContent(text.into().red()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn println_command(command: impl crossterm::Command) {
|
||||||
|
queue!(stdout(), command, Print("\r\n"));
|
||||||
|
}
|
||||||
|
|
||||||
fn make_random_field(probability: f64) -> Game {
|
fn make_random_field(probability: f64) -> Game {
|
||||||
let mut field = PixelGrid::max_sized();
|
let mut field = PixelGrid::max_sized();
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
|
|
Loading…
Reference in a new issue