125 lines
4.5 KiB
C#
125 lines
4.5 KiB
C#
//using Newtonsoft.Json;
|
|
//using OpenTK;
|
|
//using System;
|
|
//using System.Collections.Generic;
|
|
//using System.Linq;
|
|
//using System.Text;
|
|
//using System.Threading.Tasks;
|
|
//using Valve.VR;
|
|
//using VRDash.UI.LocationEditors;
|
|
//using VRDash.Utilities;
|
|
|
|
//namespace VRDash.Overlay.Config.OverlayLocation
|
|
//{
|
|
// [OverlayLocationInfo("Playspace", typeof(ControllerLocationEditor))]
|
|
// public class PlayspaceLocation : IOverlayLocation
|
|
// {
|
|
// public ControllerHand Controller { get; set; } = ControllerHand.Left;
|
|
|
|
// [JsonIgnore]
|
|
// public Matrix3x4 Location { get; private set; } = new Matrix3x4(new Vector4(1, 0, 0, 0),
|
|
// new Vector4(0, 1, 0, 0),
|
|
// new Vector4(0, 0, 1, 0));
|
|
|
|
// public float PosX { get; set; } = 0;
|
|
// public float PosY { get; set; } = 0;
|
|
// public float PosZ { get; set; } = 0;
|
|
|
|
// public float RotP { get; set; } = 0;
|
|
// public float RotY { get; set; } = 0;
|
|
// public float RotR { get; set; } = 0;
|
|
|
|
// public float ScaleX { get; set; } = 1;
|
|
// public float ScaleY { get; set; } = 1;
|
|
// public float ScaleZ { get; set; } = 1;
|
|
|
|
// DateTime m_LastCheck = DateTime.MinValue;
|
|
|
|
// IOverlay m_Overlay = null;
|
|
|
|
// public OverlayHandles CreateOverlay(string key, string name, IOverlay overlay)
|
|
// {
|
|
// ulong overlayHandle = 0;
|
|
// EVROverlayError err = OpenVR.Overlay.CreateOverlay(key, name, ref overlayHandle);
|
|
|
|
// if (err != EVROverlayError.None){
|
|
// throw new Exception($"Error creating overlay: {err}");
|
|
// }
|
|
|
|
// ETrackedDeviceClass type = OpenVR.System.GetTrackedDeviceClass(0);
|
|
|
|
// overlay.Update += Overlay_Update;
|
|
|
|
// m_Overlay = overlay;
|
|
|
|
|
|
// return new OverlayHandles(overlayHandle, 0);
|
|
// }
|
|
|
|
// public void SetLocationBasedOnController()
|
|
// {
|
|
// uint controllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);
|
|
|
|
// TrackedDevicePose_t pose = new TrackedDevicePose_t();
|
|
// TrackedDevicePose_t gamePose = new TrackedDevicePose_t();
|
|
// var err = OpenVR.Compositor.GetLastPoseForTrackedDeviceIndex(controllerIndex, ref pose, ref gamePose);
|
|
// if(err != EVRCompositorError.None)
|
|
// {
|
|
// this.GetLogger(m_Overlay).Warn($"Unable to set location based on controller: {err}");
|
|
// return;
|
|
// }
|
|
|
|
// if(pose.eTrackingResult != ETrackingResult.Running_OK)
|
|
// {
|
|
// this.GetLogger(m_Overlay).Warn($"Unable to get reliable tracking: {pose.eTrackingResult}");
|
|
// }
|
|
|
|
// var matrix = pose.mDeviceToAbsoluteTracking.ToOpenTKMatrix();
|
|
|
|
// matrix
|
|
// }
|
|
|
|
// private void Overlay_Update(object sender, EventArgs e)
|
|
// {
|
|
// if (DateTime.Now.Subtract(m_LastCheck).TotalSeconds >= 1)
|
|
// {
|
|
|
|
// MathHelper.DegreesToRadians(RotP);
|
|
// var quat = Quaternion.FromEulerAngles(MathHelper.DegreesToRadians(RotP), MathHelper.DegreesToRadians(RotY), MathHelper.DegreesToRadians(RotR));
|
|
// Location = Matrix3x4.Mult(Matrix3x4.CreateTranslation(PosX, PosY, PosZ), Matrix3x4.Mult(Matrix3x4.CreateFromQuaternion(quat), Matrix3x4.CreateScale(ScaleX, ScaleY, ScaleZ)));
|
|
|
|
|
|
// if (m_Overlay.OverlayHandle == OpenVR.k_ulOverlayHandleInvalid) { return; }
|
|
|
|
// var matrix = Location.ToOpenVRMatrix();
|
|
|
|
// var err = OpenVR.Overlay.SetOverlayTransformAbsolute(m_Overlay.OverlayHandle, ETrackingUniverseOrigin.TrackingUniverseStanding, ref matrix);
|
|
|
|
// //var err = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(m_Overlay.OverlayHandle, m_ControllerIndex, ref matrix);
|
|
|
|
// if (err != EVROverlayError.None)
|
|
// {
|
|
// this.GetLogger(m_Overlay).Warn($"Error setting tracked device relative to {Controller} hand: {err}");
|
|
// }
|
|
// else
|
|
// {
|
|
// this.GetLogger(m_Overlay).Info($"Controller index updated.");
|
|
// }
|
|
|
|
// m_LastCheck = DateTime.Now;
|
|
// }
|
|
// }
|
|
|
|
// public void ResetCheckTimer()
|
|
// {
|
|
// m_LastCheck = DateTime.MinValue;
|
|
// }
|
|
|
|
// public enum ControllerHand
|
|
// {
|
|
// Left = 0,
|
|
// Right = 1
|
|
// }
|
|
// }
|
|
//}
|