Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

132 lines
3.8 KiB

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Test SteamVR_Controller support.
//
//=============================================================================
using UnityEngine;
using System.Collections.Generic;
using Valve.VR;
public class SteamVR_TestController : MonoBehaviour
{
List<int> controllerIndices = new List<int>();
private void OnDeviceConnected(int index, bool connected)
{
var system = OpenVR.System;
if (system == null || system.GetTrackedDeviceClass((uint)index) != ETrackedDeviceClass.Controller)
return;
if (connected)
{
Debug.Log(string.Format("Controller {0} connected.", index));
PrintControllerStatus(index);
controllerIndices.Add(index);
}
else
{
Debug.Log(string.Format("Controller {0} disconnected.", index));
PrintControllerStatus(index);
controllerIndices.Remove(index);
}
}
void OnEnable()
{
SteamVR_Events.DeviceConnected.Listen(OnDeviceConnected);
}
void OnDisable()
{
SteamVR_Events.DeviceConnected.Remove(OnDeviceConnected);
}
void PrintControllerStatus(int index)
{
var device = SteamVR_Controller.Input(index);
Debug.Log("index: " + device.index);
Debug.Log("connected: " + device.connected);
Debug.Log("hasTracking: " + device.hasTracking);
Debug.Log("outOfRange: " + device.outOfRange);
Debug.Log("calibrating: " + device.calibrating);
Debug.Log("uninitialized: " + device.uninitialized);
Debug.Log("pos: " + device.transform.pos);
Debug.Log("rot: " + device.transform.rot.eulerAngles);
Debug.Log("velocity: " + device.velocity);
Debug.Log("angularVelocity: " + device.angularVelocity);
var l = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);
var r = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
Debug.Log((l == r) ? "first" : (l == index) ? "left" : "right");
}
EVRButtonId[] buttonIds = new EVRButtonId[] {
EVRButtonId.k_EButton_ApplicationMenu,
EVRButtonId.k_EButton_Grip,
EVRButtonId.k_EButton_SteamVR_Touchpad,
EVRButtonId.k_EButton_SteamVR_Trigger
};
EVRButtonId[] axisIds = new EVRButtonId[] {
EVRButtonId.k_EButton_SteamVR_Touchpad,
EVRButtonId.k_EButton_SteamVR_Trigger
};
public Transform point, pointer;
void Update()
{
foreach (var index in controllerIndices)
{
var overlay = SteamVR_Overlay.instance;
if (overlay && point && pointer)
{
var t = SteamVR_Controller.Input(index).transform;
pointer.transform.localPosition = t.pos;
pointer.transform.localRotation = t.rot;
var results = new SteamVR_Overlay.IntersectionResults();
var hit = overlay.ComputeIntersection(t.pos, t.rot * Vector3.forward, ref results);
if (hit)
{
point.transform.localPosition = results.point;
point.transform.localRotation = Quaternion.LookRotation(results.normal);
}
continue;
}
foreach (var buttonId in buttonIds)
{
if (SteamVR_Controller.Input(index).GetPressDown(buttonId))
Debug.Log(buttonId + " press down");
if (SteamVR_Controller.Input(index).GetPressUp(buttonId))
{
Debug.Log(buttonId + " press up");
if (buttonId == EVRButtonId.k_EButton_SteamVR_Trigger)
{
SteamVR_Controller.Input(index).TriggerHapticPulse();
PrintControllerStatus(index);
}
}
if (SteamVR_Controller.Input(index).GetPress(buttonId))
Debug.Log(buttonId);
}
foreach (var buttonId in axisIds)
{
if (SteamVR_Controller.Input(index).GetTouchDown(buttonId))
Debug.Log(buttonId + " touch down");
if (SteamVR_Controller.Input(index).GetTouchUp(buttonId))
Debug.Log(buttonId + " touch up");
if (SteamVR_Controller.Input(index).GetTouch(buttonId))
{
var axis = SteamVR_Controller.Input(index).GetAxis(buttonId);
Debug.Log("axis: " + axis);
}
}
}
}
}