12 public Texture cursor, background, logo;
13 public float logoHeight, menuOffset;
15 public Vector2 scaleLimits =
new Vector2(0.1f, 5.0f);
16 public float scaleRate = 0.5f;
23 public RenderTexture texture {
get {
return overlay ? overlay.texture as RenderTexture : null; } }
24 public float scale {
get;
private set; }
26 string scaleLimitX, scaleLimitY, scaleRateText;
28 CursorLockMode savedCursorLockState;
29 bool savedCursorVisible;
33 scaleLimitX = string.Format(
"{0:N1}", scaleLimits.x);
34 scaleLimitY = string.Format(
"{0:N1}", scaleLimits.y);
35 scaleRateText = string.Format(
"{0:N1}", scaleRate);
37 var overlay = SteamVR_Overlay.instance;
40 uvOffset = overlay.uvOffset;
41 distance = overlay.distance;
50 var texture = overlay.texture as RenderTexture;
52 var prevActive = RenderTexture.active;
53 RenderTexture.active = texture;
55 if (Event.current.type == EventType.Repaint)
56 GL.Clear(
false,
true, Color.clear);
58 var area =
new Rect(0, 0, texture.width, texture.height);
61 if (Screen.width < texture.width)
63 area.width = Screen.width;
64 overlay.uvOffset.x = -(float)(texture.width - Screen.width) / (2 * texture.width);
66 if (Screen.height < texture.height)
68 area.height = Screen.height;
69 overlay.uvOffset.y = (float)(texture.height - Screen.height) / (2 * texture.height);
72 GUILayout.BeginArea(area);
74 if (background != null)
76 GUI.DrawTexture(
new Rect(
77 (area.width - background.width) / 2,
78 (area.height - background.height) / 2,
79 background.width, background.height), background);
82 GUILayout.BeginHorizontal();
83 GUILayout.FlexibleSpace();
84 GUILayout.BeginVertical();
88 GUILayout.Space(area.height / 2 - logoHeight);
92 GUILayout.Space(menuOffset);
94 bool bHideMenu = GUILayout.Button(
"[Esc] - Close menu");
96 GUILayout.BeginHorizontal();
97 GUILayout.Label(string.Format(
"Scale: {0:N4}", scale));
99 var result = GUILayout.HorizontalSlider(scale, scaleLimits.x, scaleLimits.y);
105 GUILayout.EndHorizontal();
107 GUILayout.BeginHorizontal();
108 GUILayout.Label(string.Format(
"Scale limits:"));
110 var result = GUILayout.TextField(scaleLimitX);
111 if (result != scaleLimitX)
113 if (
float.TryParse(result, out scaleLimits.x))
114 scaleLimitX = result;
118 var result = GUILayout.TextField(scaleLimitY);
119 if (result != scaleLimitY)
121 if (
float.TryParse(result, out scaleLimits.y))
122 scaleLimitY = result;
125 GUILayout.EndHorizontal();
127 GUILayout.BeginHorizontal();
128 GUILayout.Label(string.Format(
"Scale rate:"));
130 var result = GUILayout.TextField(scaleRateText);
131 if (result != scaleRateText)
133 if (
float.TryParse(result, out scaleRate))
134 scaleRateText = result;
137 GUILayout.EndHorizontal();
141 var vr = SteamVR.instance;
143 GUILayout.BeginHorizontal();
145 var t = SteamVR_Camera.sceneResolutionScale;
146 int w = (int)(vr.sceneWidth * t);
147 int h = (int)(vr.sceneHeight * t);
148 int pct = (int)(100.0f * t);
149 GUILayout.Label(string.Format(
"Scene quality: {0}x{1} ({2}%)", w, h, pct));
150 var result = Mathf.RoundToInt(GUILayout.HorizontalSlider(pct, 50, 200));
153 SteamVR_Camera.sceneResolutionScale = (float)result / 100.0f;
156 GUILayout.EndHorizontal();
159 overlay.highquality = GUILayout.Toggle(overlay.highquality,
"High quality");
161 if (overlay.highquality)
163 overlay.curved = GUILayout.Toggle(overlay.curved,
"Curved overlay");
164 overlay.antialias = GUILayout.Toggle(overlay.antialias,
"Overlay RGSS(2x2)");
168 overlay.curved =
false;
169 overlay.antialias =
false;
172 var tracker = SteamVR_Render.Top();
175 tracker.wireframe = GUILayout.Toggle(tracker.wireframe,
"Wireframe");
177 var render = SteamVR_Render.instance;
178 if (render.trackingSpace == ETrackingUniverseOrigin.TrackingUniverseSeated)
180 if (GUILayout.Button(
"Switch to Standing"))
181 render.trackingSpace = ETrackingUniverseOrigin.TrackingUniverseStanding;
182 if (GUILayout.Button(
"Center View"))
184 var system = OpenVR.System;
186 system.ResetSeatedZeroPose();
191 if (GUILayout.Button(
"Switch to Seated"))
192 render.trackingSpace = ETrackingUniverseOrigin.TrackingUniverseSeated;
197 if (GUILayout.Button(
"Exit"))
200 GUILayout.Space(menuOffset);
202 var env = System.Environment.GetEnvironmentVariable(
"VR_OVERRIDE");
205 GUILayout.Label(
"VR_OVERRIDE=" + env);
208 GUILayout.Label(
"Graphics device: " + SystemInfo.graphicsDeviceVersion);
210 GUILayout.EndVertical();
211 GUILayout.FlexibleSpace();
212 GUILayout.EndHorizontal();
218 float x = Input.mousePosition.x, y = Screen.height - Input.mousePosition.y;
219 float w = cursor.width, h = cursor.height;
220 GUI.DrawTexture(
new Rect(x, y, w, h), cursor);
223 RenderTexture.active = prevActive;
229 public void ShowMenu()
231 var overlay = SteamVR_Overlay.instance;
235 var texture = overlay.texture as RenderTexture;
238 Debug.LogError(
"Menu requires overlay texture to be a render texture.");
244 Cursor.visible =
true;
245 Cursor.lockState = CursorLockMode.None;
247 this.overlay = overlay;
248 uvOffset = overlay.uvOffset;
249 distance = overlay.distance;
253 var cameras = Object.FindObjectsOfType(typeof(Camera)) as Camera[];
254 foreach (var cam
in cameras)
256 if (cam.enabled && cam.targetTexture == texture)
259 overlayCam.enabled =
false;
264 var tracker = SteamVR_Render.Top();
266 scale = tracker.origin.localScale.x;
269 public void HideMenu()
271 RestoreCursorState();
273 if (overlayCam != null)
274 overlayCam.enabled =
true;
278 overlay.uvOffset = uvOffset;
279 overlay.distance = distance;
286 if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Joystick1Button7))
297 else if (Input.GetKeyDown(KeyCode.Home))
301 else if (Input.GetKey(KeyCode.PageUp))
303 SetScale(Mathf.Clamp(scale + scaleRate * Time.deltaTime, scaleLimits.x, scaleLimits.y));
305 else if (Input.GetKey(KeyCode.PageDown))
307 SetScale(Mathf.Clamp(scale - scaleRate * Time.deltaTime, scaleLimits.x, scaleLimits.y));
311 void SetScale(
float scale)
315 var tracker = SteamVR_Render.Top();
317 tracker.origin.localScale =
new Vector3(scale, scale, scale);
320 void SaveCursorState()
322 savedCursorVisible = Cursor.visible;
323 savedCursorLockState = Cursor.lockState;
326 void RestoreCursorState()
328 Cursor.visible = savedCursorVisible;
329 Cursor.lockState = savedCursorLockState;