VRDash/VRDash/Overlay/Config/OverlayLocation/PlayspaceLocation.cs

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
// }
// }
//}