5个版本

0.1.4 2022年8月1日
0.1.3 2022年6月8日
0.1.2 2022年2月20日
0.1.1 2021年8月26日
0.1.0 2021年7月7日

#324 in 硬件支持

Download history 105/week @ 2024-03-11 101/week @ 2024-03-18 16/week @ 2024-03-25 48/week @ 2024-04-01 71/week @ 2024-04-08 101/week @ 2024-04-15 44/week @ 2024-04-22 33/week @ 2024-04-29 28/week @ 2024-05-06 71/week @ 2024-05-13 59/week @ 2024-05-20 68/week @ 2024-05-27 152/week @ 2024-06-03 67/week @ 2024-06-10 94/week @ 2024-06-17 82/week @ 2024-06-24

每月下载量:397

MIT 许可证

48KB
1K SLoC

Rust编写的ViGEm客户端

MIT License crates.io docs.rs

ViGEm 是一个虚拟游戏手柄仿真框架。本库实现了 ViGEmBus 驱动程序 的客户端。此库要发挥作用,必须安装该驱动程序。

客户端完全使用Rust编写,未使用ViGEm的客户端C库。当然,它必须与WinAPI通信,这意味着它仅适用于Windows平台。

与竞争对手不同,此库提供了优化、安全且符合习惯的接口。

使用方法

此库可在 crates.io 上找到,并在 docs.rs 上提供文档。

在你的 Cargo.toml 中添加

[dependencies]
vigem-client = "0.1"

示例

尝试以下示例: cargo run --example readme

use std::{thread, time};

fn main() {
	// Connect to the ViGEmBus driver
	let client = vigem_client::Client::connect().unwrap();

	// Create the virtual controller target
	let id = vigem_client::TargetId::XBOX360_WIRED;
	let mut target = vigem_client::Xbox360Wired::new(client, id);

	// Plugin the virtual controller
	target.plugin().unwrap();

	// Wait for the virtual controller to be ready to accept updates
	target.wait_ready().unwrap();

	// The input state of the virtual controller
	let mut gamepad = vigem_client::XGamepad {
		buttons: vigem_client::XButtons!(UP | RIGHT | LB | A | X),
		..Default::default()
	};

	let start = time::Instant::now();
	loop {
		let elapsed = start.elapsed().as_secs_f64();

		// Play for 10 seconds
		if elapsed >= 10.0 {
			break;
		}

		// Spin the left thumb stick in circles
		gamepad.thumb_lx = (elapsed.cos() * 30000.0) as i16;
		gamepad.thumb_ly = (elapsed.sin() * 30000.0) as i16;

		// Spin the right thumb stick in circles
		gamepad.thumb_rx = -gamepad.thumb_ly;
		gamepad.thumb_ry = gamepad.thumb_lx;

		// Twiddle the triggers
		gamepad.left_trigger = ((((elapsed * 1.5).sin() * 127.0) as i32) + 127) as u8;
		gamepad.right_trigger = ((((elapsed * 1.5).cos() * 127.0) as i32) + 127) as u8;

		let _ = target.update(&gamepad);

		thread::sleep(time::Duration::from_millis(10));
	}
}

许可证

根据 MIT 许可证 授予许可,请参阅 license.txt

贡献

除非你明确说明,否则你提交的任何有意包含在作品中的贡献,都应按照上述条款许可,无需任何附加条款或条件。

依赖关系

~225KB