From 2a9944038b001f69f03df3f0cbee8bf20a708af1 Mon Sep 17 00:00:00 2001 From: jan Date: Sat, 11 Jan 2025 15:34:38 +0100 Subject: [PATCH] Emulator now prints key-bindings on startup --- Cargo.lock | 16 ++++++++++++++++ Cargo.toml | 1 + src/main.rs | 1 + src/utils.rs | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 2a24adb..6661d79 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -473,6 +473,15 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "pad" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" +dependencies = [ + "unicode-width", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -546,6 +555,7 @@ dependencies = [ "flate2", "gilrs", "macroquad", + "pad", "thiserror", ] @@ -592,6 +602,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "utf8parse" version = "0.2.2" diff --git a/Cargo.toml b/Cargo.toml index b15135c..caef12e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ clap = { version = "4.5.21", features = ["derive"] } flate2 = "1.0.35" gilrs = { version = "0.11.0",optional=true} macroquad = "0.4.13" +pad = "0.1.6" thiserror = "2.0.3" [features] diff --git a/src/main.rs b/src/main.rs index 0aa4a2f..1999a8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,6 +32,7 @@ fn window_conf() -> Conf { #[macroquad::main(window_conf)] async fn main() -> Result<()> { let mut cli = Cli::parse(); + print_keybinds(); let mut buffer = [Color::from_rgba(255, 255, 255, 255); 256 * 256]; let mut image = Image::gen_image_color(256, 256, Color::from_rgba(0, 0, 0, 255)); diff --git a/src/utils.rs b/src/utils.rs index 8965d37..02ef017 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -4,6 +4,7 @@ use anyhow::Result; use flate2::read::GzDecoder; use macroquad::color::Color; use macroquad::prelude::*; +use pad::PadStr; use std::fs::File; use std::io::Read; const RES: usize = 256; @@ -152,3 +153,35 @@ pub fn get_input_code_no_gamepad(layout: &Layout) -> (u16, u16) { (pos_code, key_code) } + +pub fn print_keybinds() { + let options = vec![ + ("Input A", "Space / Mouse-Left"), + ("Input B", "B / Mouse-Right"), + ("Input Up", "Up / W"), + ("Input Down", "Down / S"), + ("Input Left", "Left / A"), + ("Input Right", "Right / D"), + ("Input Select", "N"), + ("Input Start", "M"), + ("Toggle Pause", "P"), + ("Reload", "R"), + ("Toggle Cursor", "C"), + ("Toggle Verbose", "V"), + ]; + + let left_width = options + .iter() + .map(|(left, _)| left.len()) + .max() + .unwrap_or(0); + + let linewidth = 40; + println!("{}", "-".repeat(linewidth)); + + for (left, right) in options { + let padded_left = left.pad_to_width(left_width); + println!("{} --- {}", padded_left, right); + } + println!("{}", "-".repeat(linewidth)); +}