#button #controller #touch #headset #oculus #interface #send

rust_oculus_touch

Rust API 用于与您的 Oculus Touch 控制器和头戴式耳机交互

5 个版本

0.1.0 2023 年 12 月 22 日
0.0.6 2023 年 12 月 22 日
0.0.5 2023 年 12 月 22 日
0.0.4 2023 年 12 月 22 日
0.0.3 2023 年 12 月 22 日

#553硬件支持

每月 34 次下载

MIT 许可证

260KB
417

包含 (Windows DLL,180KB) lib/vJoyInterface.dll,(Windows DLL,47KB) lib/auto_oculus_touch.dll

这是什么?

这是一个允许您与您的 Oculus Touch 控制器和头戴式耳机交互的 Rust 库。它是 auto_oculus_touch 项目的包装。

使用它,您可以读取控制器和头戴式耳机的当前状态,向控制器发送按钮点击,或移动摇杆。

安装

cargo add rust_oculus_touch

示例用法

以下是一个简短的程序,当头戴式耳机佩戴时按下 X 按钮时,将使两个控制器振动 1 秒。

use rust_oculus_touch as ot;

fn main() {
    let oculus = ot::OculusTouch::new();
    oculus.InitOculus();

    while true {
        oculus.Poll();
        println!("\n");

        let wearing = oculus.Wearing();
        println!(
            "Headset is {} your head",
            if wearing { "ON" } else { "OFF" }
        );

        let x = oculus.GetPositionX(ot::OculusTouchControllerEnum::Head);
        let y = oculus.GetPositionY(ot::OculusTouchControllerEnum::Head);
        let z = oculus.GetPositionZ(ot::OculusTouchControllerEnum::Head);
        let yaw = oculus.GetYaw(ot::OculusTouchControllerEnum::Head);
        let pitch = oculus.GetPitch(ot::OculusTouchControllerEnum::Head);
        let roll = oculus.GetRoll(ot::OculusTouchControllerEnum::Head);
        println!(
            "Headset Position: ({}, {}, {}), Yaw: {}, Pitch: {}, Roll: {}",
            x, y, z, yaw, pitch, roll
        );

        let buttons_down = oculus.GetButtonsDownList(); // Get a list of buttons that are currently held down
        let sensors_touched = oculus.GetTouchDownList(); // Get a list of capacitive sensors that are currently being touched
        println!("These buttons are down: {:?}", buttons_down);
        println!("These sensors are touched: {:?}", sensors_touched);

        println!("Here's a vibration for fun!"); // Vibrate the controllers
        oculus.Vibrate(
            ot::OculusTouchControllerEnum::Left,
            ot::OculusTouchVibrationFrequencyEnum::Medium,
            128,
            1.0,
        );
        oculus.Vibrate(
            ot::OculusTouchControllerEnum::Right,
            ot::OculusTouchVibrationFrequencyEnum::Medium,
            128,
            1.0,
        );

        oculus.PollAndSleep(1.0 as u64); // Poll and wait 1 second
    }
}

这是上述程序的示例输出

Headset is ON your head
Headset Position: (-0.011632837, 0.061689533, 0.34418005), Yaw: 6.269506, Pitch: 37.764984, Roll: 1.5803292
These buttons are down: [RThumb]
These sensors are touched: [RThumb]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (-0.010339707, 0.061480127, 0.34358978), Yaw: 6.575623, Pitch: 37.657368, Roll: 1.8094705
These buttons are down: []
These sensors are touched: [A, B]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (-0.0077772066, 0.06255522, 0.3305807), Yaw: 6.428792, Pitch: 37.119587, Roll: 1.9261029
These buttons are down: []
These sensors are touched: [A, B, RIndexTrigger]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (0.040116116, 0.071848914, 0.05625144), Yaw: 3.89342, Pitch: 28.924469, Roll: 2.6751015
These buttons are down: []
These sensors are touched: []
Here's a vibration for fun!

API 参考

InitOculus

初始化 Oculus API。

参数

  • poll: boolean (可选): 如果为 true,则在初始化后轮询 Oculus API。默认为 true。

返回值

  • number: 初始化过程中的返回代码。

Poll

轮询 Oculus Touch API 以获取状态更新。

参数

None

返回值

None

Sleep

阻止运行时并等待指定的时间长度。在轮询之间睡眠很有用。

参数

  • length: number (可选): 睡眠的时间长度(秒)。默认为 0.1。

返回值

  • Promise<void>: 一旦经过指定的时间长度,就会解决的 Promise。

PollAndSleep

组合了 Poll()Sleep() 函数。

参数

  • length: number (可选): 睡眠的时间长度(秒)。默认为 0.1。

返回值

  • Promise<void>: 一旦经过指定的时间长度,就会解决的 Promise。

Wearing

检查用户是否佩戴了头戴式耳机。

参数

None

返回值

  • boolean: 如果用户佩戴了头戴式耳机则为 true,否则为 false。

IsPressed

检查在当前轮询中是否按下了指定的按钮。"Pressed" 和 "Down" 并不相同。

参数

  • button: OculusTouchButtonEnum: 要检查的按钮。

返回值

  • boolean: 如果按钮被按下则为 true,否则为 false。

IsReleased

检查在当前轮询中是否释放了指定的按钮。

参数

  • button: OculusTouchButtonEnum: 要检查的按钮。

返回值

  • boolean:如果按钮被释放则为真,否则为假。

IsDown

检查指定的按钮是否当前按下。"按下"和"按下"不是同一回事。

参数

  • button: OculusTouchButtonEnum: 要检查的按钮。

返回值

  • boolean:如果按钮被按下则为真,否则为假。

IsTouchPressed

检查在当前轮询中是否触摸了指定的按钮的电容器。"按下"和"按下"不是同一回事。

参数

  • sensor: OculusTouchSensorEnum:要检查的传感器。

返回值

  • boolean:如果按钮的电容器被触摸则为真,否则为假。

IsTouchReleased

检查在当前轮询中是否释放了指定的按钮的电容器。

参数

  • sensor: OculusTouchSensorEnum:要检查的传感器。

返回值

  • boolean:如果按钮的电容器被释放则为真,否则为假。

IsTouchDown

检查指定的按钮的电容器是否当前正在被触摸。"按下"和"按下"不是同一回事。

参数

  • sensor: OculusTouchSensorEnum:要检查的传感器。

返回值

  • boolean:如果按钮的电容器正在被触摸则为真,否则为假。

Reached

检查是否在最后一次轮询之间指定的轴达到了指定的阈值。

参数

  • axis: OculusTouchAxisEnum:要检查的轴。
  • value: number:要检查的阈值。

返回值

  • number:返回代码,指示轴是否达到阈值。如果没有越过阈值,则为0。如果正向越过阈值,则为1。如果负向越过阈值,则为-1。

GetAxis

返回指定轴的值。

参数

  • axis: OculusTouchAxisEnum:要查询的轴。

返回值

  • number:指定轴的当前值。

GetButtonsDown

返回当前按下的所有按钮的掩码。"按下"和"按下"不是同一回事。

参数

None

返回值

  • number:表示当前按下的按钮的掩码。

GetButtonsDownList

返回当前按下的所有按钮的列表。"按下"和"按下"不是同一回事。

参数

None

返回值

  • OculusTouchButtonEnum[]:当前按下的按钮列表。

GetButtonsReleased

返回当前轮询中释放的所有按钮的掩码。

参数

None

返回值

  • number:表示当前轮询中释放的按钮的掩码。

GetButtonsReleasedList

返回当前轮询中释放的所有按钮的列表。

参数

None

返回值

  • OculusTouchButtonEnum[]:当前轮询中释放的按钮列表。

GetButtonsPressed

返回当前轮询中按下的所有按钮的掩码。"按下"和"按下"不是同一回事。

参数

None

返回值

  • number:表示当前轮询中按下的按钮的掩码。

GetButtonsPressedList

返回当前轮询中按下的所有按钮的列表。"按下"和"按下"不是同一回事。

参数

None

返回值

  • OculusTouchButtonEnum[]:当前轮询中按下的按钮列表。

GetTouchDown

返回当前正在被触摸的所有按钮的掩码。"按下"和"按下"不是同一回事。

参数

None

返回值

  • number:表示当前正在被触摸的按钮的掩码。

GetTouchDownList

返回当前正在被触摸的所有按钮的列表。"按下"和"按下"不是同一回事。

参数

None

返回值

  • OculusTouchSensorEnum[]:当前正在被触摸的按钮列表。

GetTouchPressed

返回当前轮询中所有被触摸的电容按钮的位掩码。"按下"和"按下状态"是不同的。

参数

None

返回值

  • number:表示当前轮询中被触摸的电容按钮的位掩码。

GetTouchPressedList

返回当前轮询中被触摸的所有电容按钮的列表。"按下"和"按下状态"是不同的。

参数

None

返回值

  • OculusTouchSensorEnum[]:表示当前轮询中被触摸的电容按钮的列表。

GetTouchReleased

返回当前轮询中所有释放的电容按钮的位掩码。

参数

None

返回值

  • number:表示当前轮询中被释放的电容按钮的位掩码。

GetTouchReleasedList

返回当前轮询中所有释放的电容按钮的列表。

参数

None

返回值

  • OculusTouchSensorEnum[]:表示当前轮询中被释放的电容按钮的列表。

GetTrigger

返回指定触发器的值。

参数

  • hand: OculusTouchHandEnum:触发器的手(左手或右手)。
  • trigger: OculusTouchTriggerEnum:要查询的触发器(索引或手)。

返回值

  • number:指定触发器的值。

GetThumbStick

返回指定摇杆的轴值。

参数

  • hand: OculusTouchHandEnum:摇杆的手(左手或右手)。
  • axis: OculusTouchAxisEnum:要查询的摇杆轴(x或y)。

返回值

  • number:指定摇杆轴的值。

Vibrate

振动指定控制器。

参数

  • controller: OculusTouchControllerEnum:要振动的控制器。
  • frequency: OculusTouchVibrationFrequencyEnum(可选):振动频率。默认是 OculusTouchVibrationFrequencyEnum.Medium
  • amplitude: number(可选):振动的幅度,范围 [0, 255]。默认是 128。
  • length: number(可选):振动时长(秒),0 表示无限。默认是 1.0。

抛出异常

  • Error:如果幅度不在 [0, 255] 范围内。

返回值

None

GetYaw

返回指定控制器的偏航。偏航是围绕 y 轴的旋转。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的偏航(围绕 y 轴的旋转)。

GetPitch

返回指定控制器的俯仰。俯仰是围绕 x 轴的旋转。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的俯仰(围绕 x 轴的旋转)。

GetRoll

返回指定控制器的翻滚。翻滚是围绕 z 轴的旋转。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的翻滚(围绕 z 轴的旋转)。

GetPositionX

返回指定控制器的 x 坐标。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的 x 坐标。

GetPositionY

返回指定控制器的 y 坐标。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的 y 坐标。

GetPositionZ

返回指定控制器的 z 坐标。

参数

  • controller: OculusTouchControllerEnum:要查询的控制器。

返回值

  • number:指定控制器的 z 坐标。

SetTrackingOrigin

设置头显的跟踪原点。这是头显将视为原点(0, 0, 0)的点。

参数

  • origin: OculusTouchTrackingOriginEnum:要设置的跟踪原点。

返回值

None

ResetFacing

重置指定控制器的偏航。偏航是绕y轴的旋转。

参数

  • controller: OculusTouchControllerEnum:要重置偏航的控制器的枚举。

返回值

None

InitvJoy

初始化vJoy驱动程序。在使用任何vJoy函数之前必须调用此函数。

参数

  • device: number:要初始化的vJoy设备号。

抛出异常

  • Error:如果在初始化过程中发生错误。

返回值

None

SetvJoyAxis

设置指定vJoy轴的值。

参数

  • axis: OculusTouchvJoyDeviceEnum:要设置的vJoy轴。
  • value: number:要设置的值,范围[0.0, 1.0]。

返回值

None

SetvJoyAxisU

使用不同的范围设置指定vJoy轴的值。

参数

  • axis: OculusTouchvJoyDeviceEnum:要设置的vJoy轴。
  • value: number:要设置的值,范围[0.0, 1.0],映射到[-1.0, 1.0]。

返回值

None

SetvJoyButton

设置指定vJoy按钮的值。

参数

  • button: OculusTouchButtonEnum:要设置的vJoy按钮。
  • value: number:要设置的值,范围[0, 1]。

返回值

None

SendRawMouseMove

向宿主计算机发送原始鼠标移动事件。

参数

  • x: number:x方向上的相对移动。
  • y: number:y方向上的相对移动。
  • z: number:z方向上的相对移动。

返回值

None

SendRawMouseButtonDown

向宿主计算机发送原始鼠标按钮按下事件。

参数

  • button: OculusTouchRawMouseButtonEnum:要按下的按钮。

返回值

None

SendRawMouseButtonUp

向宿主计算机发送原始鼠标按钮释放事件。

参数

  • button: OculusTouchRawMouseButtonEnum:要释放的按钮。

返回值

None

依赖关系

~0.5–6MB
~25K SLoC