rustraight 0.5.2

A simple 2D game library for Rust, inspired by DXLib
// キーボード入力 API の動作確認用サンプル。アセット不要。
//
// 確認対象: is_pressed / is_just_pressed / is_released / KeyCode 全種
//
// 全 KeyCode を1画面にグリッド表示し、押している間は緑にハイライトする。
// 押した瞬間/離した瞬間はログ(デバッグビルドのコンソール)に出力する。
// 物理キーボードに存在するキーしか実際には押せない点に注意。

use rustraight::prelude::*;

const KEYS: &[(KeyCode, &str)] = &[
    (KeyCode::KeyA, "A"), (KeyCode::KeyB, "B"), (KeyCode::KeyC, "C"), (KeyCode::KeyD, "D"),
    (KeyCode::KeyE, "E"), (KeyCode::KeyF, "F"), (KeyCode::KeyG, "G"), (KeyCode::KeyH, "H"),
    (KeyCode::KeyI, "I"), (KeyCode::KeyJ, "J"), (KeyCode::KeyK, "K"), (KeyCode::KeyL, "L"),
    (KeyCode::KeyM, "M"), (KeyCode::KeyN, "N"), (KeyCode::KeyO, "O"), (KeyCode::KeyP, "P"),
    (KeyCode::KeyQ, "Q"), (KeyCode::KeyR, "R"), (KeyCode::KeyS, "S"), (KeyCode::KeyT, "T"),
    (KeyCode::KeyU, "U"), (KeyCode::KeyV, "V"), (KeyCode::KeyW, "W"), (KeyCode::KeyX, "X"),
    (KeyCode::KeyY, "Y"), (KeyCode::KeyZ, "Z"),
    (KeyCode::Digit0, "0"), (KeyCode::Digit1, "1"), (KeyCode::Digit2, "2"), (KeyCode::Digit3, "3"),
    (KeyCode::Digit4, "4"), (KeyCode::Digit5, "5"), (KeyCode::Digit6, "6"), (KeyCode::Digit7, "7"),
    (KeyCode::Digit8, "8"), (KeyCode::Digit9, "9"),
    (KeyCode::Numpad0, "N0"), (KeyCode::Numpad1, "N1"), (KeyCode::Numpad2, "N2"), (KeyCode::Numpad3, "N3"),
    (KeyCode::Numpad4, "N4"), (KeyCode::Numpad5, "N5"), (KeyCode::Numpad6, "N6"), (KeyCode::Numpad7, "N7"),
    (KeyCode::Numpad8, "N8"), (KeyCode::Numpad9, "N9"),
    (KeyCode::NumpadAdd, "N+"), (KeyCode::NumpadSubtract, "N-"), (KeyCode::NumpadMultiply, "N*"),
    (KeyCode::NumpadDivide, "N/"), (KeyCode::NumpadDecimal, "N."), (KeyCode::NumpadEnter, "NEnt"),
    (KeyCode::NumLock, "NumLk"),
    (KeyCode::F1, "F1"), (KeyCode::F2, "F2"), (KeyCode::F3, "F3"), (KeyCode::F4, "F4"),
    (KeyCode::F5, "F5"), (KeyCode::F6, "F6"), (KeyCode::F7, "F7"), (KeyCode::F8, "F8"),
    (KeyCode::F9, "F9"), (KeyCode::F10, "F10"), (KeyCode::F11, "F11"), (KeyCode::F12, "F12"),
    (KeyCode::F13, "F13"), (KeyCode::F14, "F14"), (KeyCode::F15, "F15"), (KeyCode::F16, "F16"),
    (KeyCode::F17, "F17"), (KeyCode::F18, "F18"), (KeyCode::F19, "F19"), (KeyCode::F20, "F20"),
    (KeyCode::F21, "F21"), (KeyCode::F22, "F22"), (KeyCode::F23, "F23"), (KeyCode::F24, "F24"),
    (KeyCode::ArrowUp, "Up"), (KeyCode::ArrowDown, "Dn"), (KeyCode::ArrowLeft, "Lt"), (KeyCode::ArrowRight, "Rt"),
    (KeyCode::Home, "Home"), (KeyCode::End, "End"), (KeyCode::PageUp, "PgUp"), (KeyCode::PageDown, "PgDn"),
    (KeyCode::Insert, "Ins"), (KeyCode::Delete, "Del"),
    (KeyCode::ShiftLeft, "LShift"), (KeyCode::ShiftRight, "RShift"),
    (KeyCode::ControlLeft, "LCtrl"), (KeyCode::ControlRight, "RCtrl"),
    (KeyCode::AltLeft, "LAlt"), (KeyCode::AltRight, "RAlt"),
    (KeyCode::SuperLeft, "LSuper"), (KeyCode::SuperRight, "RSuper"),
    (KeyCode::Backspace, "BkSp"), (KeyCode::Enter, "Enter"), (KeyCode::Tab, "Tab"),
    (KeyCode::Escape, "Esc"), (KeyCode::Space, "Space"), (KeyCode::CapsLock, "Caps"),
    (KeyCode::Minus, "-"), (KeyCode::Equal, "="), (KeyCode::BracketLeft, "["), (KeyCode::BracketRight, "]"),
    (KeyCode::Backslash, "\\"), (KeyCode::Semicolon, ";"), (KeyCode::Quote, "'"), (KeyCode::Backquote, "`"),
    (KeyCode::Comma, ","), (KeyCode::Period, "."), (KeyCode::Slash, "/"),
    (KeyCode::ScrollLock, "ScrLk"), (KeyCode::Pause, "Pause"), (KeyCode::PrintScreen, "PrtSc"),
];

fn main() {
    init(WindowConfig {
        title: String::from("06_keyboard"),
        width: 900,
        height: 500,
        screen_width: 900,
        screen_height: 500,
        ..Default::default()
    });

    while advance_frame() {
        draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));
        draw_text(
            MAIN_SCREEN, 10, 6,
            "緑=押している / 白=押していない。押した/離した瞬間はコンソールログに出る",
            Color::YELLOW,
        );

        let cols = 12;
        let cell_w = 72;
        let cell_h = 20;
        let origin_x = 10;
        let origin_y = 30;

        for (i, (key, label)) in KEYS.iter().enumerate() {
            let col = (i % cols) as i32;
            let row = (i / cols) as i32;
            let x = origin_x + col * cell_w;
            let y = origin_y + row * cell_h;

            let color = if is_pressed(*key) { Color::GREEN } else { Color::rgb(120, 120, 120) };
            draw_text(MAIN_SCREEN, x, y, *label, color);

            if is_just_pressed(*key) { log_info!("is_just_pressed: {key:?}"); }
            if is_released(*key) { log_info!("is_released: {key:?}"); }
        }
    }
}