Files
vstyler/Assets/PlayAreaScale.cs
2016-05-18 20:02:27 +02:00

65 lines
1.7 KiB
C#
Executable File

using UnityEngine;
using System.Collections;
using Valve.VR;
[ExecuteInEditMode]
public class PlayAreaScale : MonoBehaviour {
public float Padding = 0;
public static bool GetBounds(ref HmdQuad_t pRect)
{
var initOpenVR = (!SteamVR.active && !SteamVR.usingNativeSupport);
if (initOpenVR)
{
var error = EVRInitError.None;
OpenVR.Init(ref error, EVRApplicationType.VRApplication_Other);
}
var chaperone = OpenVR.Chaperone;
bool success = (chaperone != null) && chaperone.GetPlayAreaRect(ref pRect);
if (!success)
{
Debug.LogWarning("Failed to get Calibrated Play Area bounds! Make sure you have tracking first, and that your space is calibrated.");
}
if (initOpenVR)
OpenVR.Shutdown();
return success;
}
// Use this for initialization
void OnEnable() {
StartCoroutine("UpdateBounds");
}
// Update is called once per frame
void Update () {
}
IEnumerator UpdateBounds()
{
var rect = new HmdQuad_t();
if (!GetBounds(ref rect)) {
yield return null;
}
var corners = new HmdVector3_t[] { rect.vCorners0, rect.vCorners1, rect.vCorners2, rect.vCorners3 };
float maxX = 0.0f;
float maxZ = 0.0f;
foreach (var corner in corners) {
if (corner.v0 > maxX) {
maxX = corner.v0;
}
if (corner.v2 > maxZ) {
maxZ = corner.v2;
}
}
maxX += Padding;
maxZ += Padding;
maxX *= 2;
maxZ *= 2;
transform.localScale = new Vector3(maxX, transform.localScale.y, maxZ);
}
}