123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- using System;
- using UnityEngine;
- using Valve.VR;
- public class SteamVR_Menu : MonoBehaviour
- {
- public RenderTexture texture
- {
- get
- {
- return (!this.overlay) ? null : (this.overlay.texture as RenderTexture);
- }
- }
- public float scale { get; private set; }
- private void Awake()
- {
- this.scaleLimitX = string.Format("{0:N1}", this.scaleLimits.x);
- this.scaleLimitY = string.Format("{0:N1}", this.scaleLimits.y);
- this.scaleRateText = string.Format("{0:N1}", this.scaleRate);
- SteamVR_Overlay instance = SteamVR_Overlay.instance;
- if (instance != null)
- {
- this.uvOffset = instance.uvOffset;
- this.distance = instance.distance;
- }
- }
- private void OnGUI()
- {
- if (this.overlay == null)
- {
- return;
- }
- RenderTexture renderTexture = this.overlay.texture as RenderTexture;
- RenderTexture active = RenderTexture.active;
- RenderTexture.active = renderTexture;
- if (Event.current.type == EventType.Repaint)
- {
- GL.Clear(false, true, Color.clear);
- }
- Rect screenRect = new Rect(0f, 0f, (float)renderTexture.width, (float)renderTexture.height);
- if (Screen.width < renderTexture.width)
- {
- screenRect.width = (float)Screen.width;
- this.overlay.uvOffset.x = -(float)(renderTexture.width - Screen.width) / (float)(2 * renderTexture.width);
- }
- if (Screen.height < renderTexture.height)
- {
- screenRect.height = (float)Screen.height;
- this.overlay.uvOffset.y = (float)(renderTexture.height - Screen.height) / (float)(2 * renderTexture.height);
- }
- GUILayout.BeginArea(screenRect);
- if (this.background != null)
- {
- GUI.DrawTexture(new Rect((screenRect.width - (float)this.background.width) / 2f, (screenRect.height - (float)this.background.height) / 2f, (float)this.background.width, (float)this.background.height), this.background);
- }
- GUILayout.BeginHorizontal(new GUILayoutOption[0]);
- GUILayout.FlexibleSpace();
- GUILayout.BeginVertical(new GUILayoutOption[0]);
- if (this.logo != null)
- {
- GUILayout.Space(screenRect.height / 2f - this.logoHeight);
- GUILayout.Box(this.logo, new GUILayoutOption[0]);
- }
- GUILayout.Space(this.menuOffset);
- bool flag = GUILayout.Button("[Esc] - Close menu", new GUILayoutOption[0]);
- GUILayout.BeginHorizontal(new GUILayoutOption[0]);
- GUILayout.Label(string.Format("Scale: {0:N4}", this.scale), new GUILayoutOption[0]);
- float num = GUILayout.HorizontalSlider(this.scale, this.scaleLimits.x, this.scaleLimits.y, new GUILayoutOption[0]);
- if (num != this.scale)
- {
- this.SetScale(num);
- }
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal(new GUILayoutOption[0]);
- GUILayout.Label(string.Format("Scale limits:", new object[0]), new GUILayoutOption[0]);
- string text = GUILayout.TextField(this.scaleLimitX, new GUILayoutOption[0]);
- if (text != this.scaleLimitX && float.TryParse(text, out this.scaleLimits.x))
- {
- this.scaleLimitX = text;
- }
- string text2 = GUILayout.TextField(this.scaleLimitY, new GUILayoutOption[0]);
- if (text2 != this.scaleLimitY && float.TryParse(text2, out this.scaleLimits.y))
- {
- this.scaleLimitY = text2;
- }
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal(new GUILayoutOption[0]);
- GUILayout.Label(string.Format("Scale rate:", new object[0]), new GUILayoutOption[0]);
- string text3 = GUILayout.TextField(this.scaleRateText, new GUILayoutOption[0]);
- if (text3 != this.scaleRateText && float.TryParse(text3, out this.scaleRate))
- {
- this.scaleRateText = text3;
- }
- GUILayout.EndHorizontal();
- if (SteamVR.active)
- {
- SteamVR instance = SteamVR.instance;
- GUILayout.BeginHorizontal(new GUILayoutOption[0]);
- float sceneResolutionScale = SteamVR_Camera.sceneResolutionScale;
- int num2 = (int)(instance.sceneWidth * sceneResolutionScale);
- int num3 = (int)(instance.sceneHeight * sceneResolutionScale);
- int num4 = (int)(100f * sceneResolutionScale);
- GUILayout.Label(string.Format("Scene quality: {0}x{1} ({2}%)", num2, num3, num4), new GUILayoutOption[0]);
- int num5 = Mathf.RoundToInt(GUILayout.HorizontalSlider((float)num4, 50f, 200f, new GUILayoutOption[0]));
- if (num5 != num4)
- {
- SteamVR_Camera.sceneResolutionScale = (float)num5 / 100f;
- }
- GUILayout.EndHorizontal();
- }
- this.overlay.highquality = GUILayout.Toggle(this.overlay.highquality, "High quality", new GUILayoutOption[0]);
- if (this.overlay.highquality)
- {
- this.overlay.curved = GUILayout.Toggle(this.overlay.curved, "Curved overlay", new GUILayoutOption[0]);
- this.overlay.antialias = GUILayout.Toggle(this.overlay.antialias, "Overlay RGSS(2x2)", new GUILayoutOption[0]);
- }
- else
- {
- this.overlay.curved = false;
- this.overlay.antialias = false;
- }
- SteamVR_Camera steamVR_Camera = SteamVR_Render.Top();
- if (steamVR_Camera != null)
- {
- steamVR_Camera.wireframe = GUILayout.Toggle(steamVR_Camera.wireframe, "Wireframe", new GUILayoutOption[0]);
- SteamVR_Render instance2 = SteamVR_Render.instance;
- if (instance2.trackingSpace == ETrackingUniverseOrigin.TrackingUniverseSeated)
- {
- if (GUILayout.Button("Switch to Standing", new GUILayoutOption[0]))
- {
- instance2.trackingSpace = ETrackingUniverseOrigin.TrackingUniverseStanding;
- }
- if (GUILayout.Button("Center View", new GUILayoutOption[0]))
- {
- CVRSystem system = OpenVR.System;
- if (system != null)
- {
- system.ResetSeatedZeroPose();
- }
- }
- }
- else if (GUILayout.Button("Switch to Seated", new GUILayoutOption[0]))
- {
- instance2.trackingSpace = ETrackingUniverseOrigin.TrackingUniverseSeated;
- }
- }
- if (GUILayout.Button("Exit", new GUILayoutOption[0]))
- {
- Application.Quit();
- }
- GUILayout.Space(this.menuOffset);
- string environmentVariable = Environment.GetEnvironmentVariable("VR_OVERRIDE");
- if (environmentVariable != null)
- {
- GUILayout.Label("VR_OVERRIDE=" + environmentVariable, new GUILayoutOption[0]);
- }
- GUILayout.Label("Graphics device: " + SystemInfo.graphicsDeviceVersion, new GUILayoutOption[0]);
- GUILayout.EndVertical();
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- if (this.cursor != null)
- {
- float x = Input.mousePosition.x;
- float y = (float)Screen.height - Input.mousePosition.y;
- float width = (float)this.cursor.width;
- float height = (float)this.cursor.height;
- GUI.DrawTexture(new Rect(x, y, width, height), this.cursor);
- }
- RenderTexture.active = active;
- if (flag)
- {
- this.HideMenu();
- }
- }
- public void ShowMenu()
- {
- SteamVR_Overlay instance = SteamVR_Overlay.instance;
- if (instance == null)
- {
- return;
- }
- RenderTexture renderTexture = instance.texture as RenderTexture;
- if (renderTexture == null)
- {
- Debug.LogError("Menu requires overlay texture to be a render texture.");
- return;
- }
- this.SaveCursorState();
- Cursor.visible = true;
- Cursor.lockState = CursorLockMode.None;
- this.overlay = instance;
- this.uvOffset = instance.uvOffset;
- this.distance = instance.distance;
- Camera[] array = UnityEngine.Object.FindObjectsOfType(typeof(Camera)) as Camera[];
- foreach (Camera camera in array)
- {
- if (camera.enabled && camera.targetTexture == renderTexture)
- {
- this.overlayCam = camera;
- this.overlayCam.enabled = false;
- break;
- }
- }
- SteamVR_Camera steamVR_Camera = SteamVR_Render.Top();
- if (steamVR_Camera != null)
- {
- this.scale = steamVR_Camera.origin.localScale.x;
- }
- }
- public void HideMenu()
- {
- this.RestoreCursorState();
- if (this.overlayCam != null)
- {
- this.overlayCam.enabled = true;
- }
- if (this.overlay != null)
- {
- this.overlay.uvOffset = this.uvOffset;
- this.overlay.distance = this.distance;
- this.overlay = null;
- }
- }
- private void SetScale(float scale)
- {
- this.scale = scale;
- SteamVR_Camera steamVR_Camera = SteamVR_Render.Top();
- if (steamVR_Camera != null)
- {
- steamVR_Camera.origin.localScale = new Vector3(scale, scale, scale);
- }
- }
- private void SaveCursorState()
- {
- this.savedCursorVisible = Cursor.visible;
- this.savedCursorLockState = Cursor.lockState;
- }
- private void RestoreCursorState()
- {
- Cursor.visible = this.savedCursorVisible;
- Cursor.lockState = this.savedCursorLockState;
- }
- public Texture cursor;
- public Texture background;
- public Texture logo;
- public float logoHeight;
- public float menuOffset;
- public Vector2 scaleLimits = new Vector2(0.1f, 5f);
- public float scaleRate = 0.5f;
- private SteamVR_Overlay overlay;
- private Camera overlayCam;
- private Vector4 uvOffset;
- private float distance;
- private string scaleLimitX;
- private string scaleLimitY;
- private string scaleRateText;
- private CursorLockMode savedCursorLockState;
- private bool savedCursorVisible;
- }
|