extern crate sdl2; use sdl2::controller::GameController; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::pixels::Color; use sdl2::GameControllerSubsystem; use sdl2::IntegerOrSdlError; use std::time::Duration; fn get_controllers(game_controller: &GameControllerSubsystem) -> Vec { let mut result = vec![]; for i in 0..game_controller.num_joysticks().unwrap() { if game_controller.is_game_controller(i) { result.push(game_controller.open(i).unwrap()); } } result } fn main() { let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let game_controller = sdl_context.game_controller().unwrap(); println!("Game controller: {:?}", game_controller); println!( "I have {} joysticks", game_controller.num_joysticks().unwrap() ); let controllers = get_controllers(&game_controller); for c in &controllers { println!("=========="); println!("Controller: {}", c.name()); println!("Mapping: {}", c.name()); println!("=========="); } let window = video_subsystem .window("rust-sdl2 demo", 800, 600) .position_centered() .build() .unwrap(); let mut canvas = window.into_canvas().build().unwrap(); canvas.set_draw_color(Color::RGB(0, 255, 255)); canvas.clear(); canvas.present(); let mut event_pump = sdl_context.event_pump().unwrap(); let mut i = 0; 'running: loop { i = (i + 1) % 255; canvas.set_draw_color(Color::RGB(i, 64, 255 - i)); canvas.clear(); for event in event_pump.poll_iter() { match event { Event::Quit { .. } | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => break 'running, _ => { println!("Got event: {:?}", event) } } } // The rest of the game loop goes here... canvas.present(); ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60)); } }