use rustraight::prelude::*;
const BUTTONS: &[(PadButton, &str)] = &[
(PadButton::South, "South(A)"), (PadButton::East, "East(B)"),
(PadButton::West, "West(X)"), (PadButton::North, "North(Y)"),
(PadButton::LBumper, "LB"), (PadButton::RBumper, "RB"),
(PadButton::LTrigger, "LT"), (PadButton::RTrigger, "RT"),
(PadButton::Select, "Select"), (PadButton::Start, "Start"),
(PadButton::LThumb, "LThumb"), (PadButton::RThumb, "RThumb"),
(PadButton::DPadUp, "DUp"), (PadButton::DPadDown, "DDown"),
(PadButton::DPadLeft, "DLeft"), (PadButton::DPadRight, "DRight"),
];
const AXES: &[(PadAxis, &str)] = &[
(PadAxis::LeftStickX, "LStickX"), (PadAxis::LeftStickY, "LStickY"),
(PadAxis::RightStickX, "RStickX"), (PadAxis::RightStickY, "RStickY"),
(PadAxis::LeftTrigger, "LTrigAxis"), (PadAxis::RightTrigger, "RTrigAxis"),
];
fn main() {
init(WindowConfig {
title: String::from("08_gamepad"),
width: 900,
height: 600,
screen_width: 900,
screen_height: 600,
..Default::default()
});
while advance_frame() {
draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));
draw_text(MAIN_SCREEN, 10, 6, format!("接続中のパッド数 pad_count(): {}", pad_count()), Color::YELLOW);
for pad_id in 0..4usize {
let base_y = 30 + pad_id as i32 * 140;
let connected = is_pad_connected(pad_id);
draw_text(
MAIN_SCREEN, 10, base_y,
format!("pad_id={pad_id} is_pad_connected={connected}"),
if connected { Color::GREEN } else { Color::rgb(100, 100, 100) },
);
if !connected { continue; }
for (i, (btn, label)) in BUTTONS.iter().enumerate() {
let x = 10 + (i % 8) as i32 * 110;
let y = base_y + 20 + (i / 8) as i32 * 20;
let color = if is_pad_pressed(pad_id, *btn) { Color::GREEN } else { Color::rgb(120, 120, 120) };
draw_text(MAIN_SCREEN, x, y, *label, color);
if is_pad_just_pressed(pad_id, *btn) { log_info!("pad {pad_id} is_pad_just_pressed: {btn:?}"); }
if is_pad_released(pad_id, *btn) { log_info!("pad {pad_id} is_pad_released: {btn:?}"); }
}
for (i, (axis, label)) in AXES.iter().enumerate() {
let x = 10 + (i % 3) as i32 * 290;
let y = base_y + 60 + (i / 3) as i32 * 20;
let v = pad_axis(pad_id, *axis);
draw_text(MAIN_SCREEN, x, y, format!("{label}: {v:+.2}"), Color::WHITE);
draw_rectangle(MAIN_SCREEN, x + 100, y + 4, 100, 8, Color::rgb(60, 60, 60), true);
let bar_w = ((v.clamp(-1.0, 1.0) + 1.0) * 0.5 * 100.0) as i32;
draw_rectangle(MAIN_SCREEN, x + 100, y + 4, bar_w.max(1), 8, Color::CYAN, true);
}
}
}
}