123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- using UnityEditor;
- using UnityEngine;
- using System.CodeDom;
- using Microsoft.CSharp;
- using System.IO;
- using System.CodeDom.Compiler;
- using System.Linq;
- using System.Collections.Generic;
- using System.Reflection;
- using System.Linq.Expressions;
- using System;
- using UnityEditorInternal;
- namespace Valve.VR
- {
- public class SteamVR_Input_LiveWindow : EditorWindow
- {
- private GUIStyle labelStyle;
- private GUIStyle setLabelStyle;
- [MenuItem("Window/SteamVR Input Live View")]
- public static void ShowWindow()
- {
- GetWindow<SteamVR_Input_LiveWindow>(false, "SteamVR Input Live View", true);
- }
- private void OnInspectorUpdate()
- {
- Repaint();
- }
- private Vector2 scrollPosition;
- private Dictionary<SteamVR_Input_Sources, bool> sourceFoldouts = null;
- private Dictionary<SteamVR_Input_Sources, Dictionary<string, bool>> setFoldouts = null;
- Color inactiveSetColor = Color.Lerp(Color.red, Color.white, 0.5f);
- Color actionUnboundColor = Color.red;
- Color actionChangedColor = Color.green;
- Color actionNotUpdatingColor = Color.yellow;
- private void DrawMap()
- {
- EditorGUILayout.BeginHorizontal();
- //GUILayout.FlexibleSpace();
- GUI.backgroundColor = actionUnboundColor;
- EditorGUILayout.LabelField("Not Bound", labelStyle);
- GUILayout.FlexibleSpace();
- GUI.backgroundColor = inactiveSetColor;
- EditorGUILayout.LabelField("Inactive", labelStyle);
- GUILayout.FlexibleSpace();
- GUI.backgroundColor = actionNotUpdatingColor;
- EditorGUILayout.LabelField("Not Used Yet", labelStyle);
- GUILayout.FlexibleSpace();
- GUI.backgroundColor = actionChangedColor;
- EditorGUILayout.LabelField("Changed", labelStyle);
- //GUILayout.FlexibleSpace();
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.Space();
- }
- private void OnGUI()
- {
- if (SteamVR_Input.actionSets == null)
- {
- EditorGUILayout.LabelField("Must first generate actions. Open SteamVR Input window.");
- return;
- }
- bool startUpdatingSourceOnAccess = SteamVR_Action.startUpdatingSourceOnAccess;
- SteamVR_Action.startUpdatingSourceOnAccess = false;
- if (labelStyle == null)
- {
- labelStyle = new GUIStyle(EditorStyles.textField);
- labelStyle.normal.background = Texture2D.whiteTexture;
- setLabelStyle = new GUIStyle(EditorStyles.label);
- setLabelStyle.wordWrap = true;
- setLabelStyle.normal.background = Texture2D.whiteTexture;
- }
- scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
- Color defaultColor = GUI.backgroundColor;
- SteamVR_ActionSet[] actionSets = SteamVR_Input.actionSets;
- SteamVR_Input_Sources[] sources = SteamVR_Input_Source.GetAllSources();
- if (sourceFoldouts == null)
- {
- sourceFoldouts = new Dictionary<SteamVR_Input_Sources, bool>();
- setFoldouts = new Dictionary<SteamVR_Input_Sources, Dictionary<string, bool>>();
- for (int sourceIndex = 0; sourceIndex < sources.Length; sourceIndex++)
- {
- sourceFoldouts.Add(sources[sourceIndex], false);
- setFoldouts.Add(sources[sourceIndex], new Dictionary<string, bool>());
- for (int actionSetIndex = 0; actionSetIndex < actionSets.Length; actionSetIndex++)
- {
- SteamVR_ActionSet set = actionSets[actionSetIndex];
- setFoldouts[sources[sourceIndex]].Add(set.GetShortName(), true);
- }
- }
- sourceFoldouts[SteamVR_Input_Sources.Any] = true;
- sourceFoldouts[SteamVR_Input_Sources.LeftHand] = true;
- sourceFoldouts[SteamVR_Input_Sources.RightHand] = true;
- }
- DrawMap();
- for (int sourceIndex = 0; sourceIndex < sources.Length; sourceIndex++)
- {
- SteamVR_Input_Sources source = sources[sourceIndex];
- sourceFoldouts[source] = EditorGUILayout.Foldout(sourceFoldouts[source], source.ToString());
- if (sourceFoldouts[source] == false)
- continue;
- EditorGUI.indentLevel++;
- for (int actionSetIndex = 0; actionSetIndex < actionSets.Length; actionSetIndex++)
- {
- SteamVR_ActionSet set = actionSets[actionSetIndex];
- bool setActive = set.IsActive(source);
- string activeText = setActive ? "Active" : "Inactive";
- float setLastChanged = set.GetTimeLastChanged();
- if (setLastChanged != -1)
- {
- float timeSinceLastChanged = Time.realtimeSinceStartup - setLastChanged;
- if (timeSinceLastChanged < 1)
- {
- Color blendColor = setActive ? Color.green : inactiveSetColor;
- Color setColor = Color.Lerp(blendColor, defaultColor, timeSinceLastChanged);
- GUI.backgroundColor = setColor;
- }
- }
- EditorGUILayout.BeginHorizontal();
- setFoldouts[source][set.GetShortName()] = EditorGUILayout.Foldout(setFoldouts[source][set.GetShortName()], set.GetShortName());
- EditorGUILayout.LabelField(activeText, labelStyle);
- GUI.backgroundColor = defaultColor;
- EditorGUILayout.EndHorizontal();
- if (setFoldouts[source][set.GetShortName()] == false)
- continue;
- EditorGUI.indentLevel++;
- for (int actionIndex = 0; actionIndex < set.allActions.Length; actionIndex++)
- {
- SteamVR_Action action = set.allActions[actionIndex];
- if (source != SteamVR_Input_Sources.Any && action is SteamVR_Action_Skeleton)
- continue;
- bool isUpdating = action.IsUpdating(source);
- bool inAction = action is ISteamVR_Action_In;
- bool noData = false;
- if (inAction && isUpdating == false)
- {
- GUI.backgroundColor = Color.yellow;
- noData = true;
- }
- else
- {
- bool actionBound = action.GetActiveBinding(source);
- if (setActive == false)
- {
- GUI.backgroundColor = inactiveSetColor;
- }
- else if (actionBound == false)
- {
- GUI.backgroundColor = Color.red;
- noData = true;
- }
- }
- if (noData)
- {
- EditorGUILayout.LabelField(action.GetShortName(), "-", labelStyle);
- GUI.backgroundColor = defaultColor;
- continue;
- }
- float actionLastChanged = action.GetTimeLastChanged(source);
- string actionText = "";
- float timeSinceLastChanged = -1;
- if (actionLastChanged != -1)
- {
- timeSinceLastChanged = Time.realtimeSinceStartup - actionLastChanged;
- if (timeSinceLastChanged < 1)
- {
- Color setColor = Color.Lerp(Color.green, defaultColor, timeSinceLastChanged);
- GUI.backgroundColor = setColor;
- }
- }
- if (action is SteamVR_Action_Boolean)
- {
- SteamVR_Action_Boolean actionBoolean = (SteamVR_Action_Boolean)action;
- actionText = actionBoolean.GetState(source).ToString();
- }
- else if (action is SteamVR_Action_Single)
- {
- SteamVR_Action_Single actionSingle = (SteamVR_Action_Single)action;
- actionText = actionSingle.GetAxis(source).ToString("0.0000");
- }
- else if (action is SteamVR_Action_Vector2)
- {
- SteamVR_Action_Vector2 actionVector2 = (SteamVR_Action_Vector2)action;
- actionText = string.Format("({0:0.0000}, {1:0.0000})", actionVector2.GetAxis(source).x, actionVector2.GetAxis(source).y);
- }
- else if (action is SteamVR_Action_Vector3)
- {
- SteamVR_Action_Vector3 actionVector3 = (SteamVR_Action_Vector3)action;
- Vector3 axis = actionVector3.GetAxis(source);
- actionText = string.Format("({0:0.0000}, {1:0.0000}, {2:0.0000})", axis.x, axis.y, axis.z);
- }
- else if (action is SteamVR_Action_Pose)
- {
- SteamVR_Action_Pose actionPose = (SteamVR_Action_Pose)action;
- Vector3 position = actionPose.GetLocalPosition(source);
- Quaternion rotation = actionPose.GetLocalRotation(source);
- actionText = string.Format("({0:0.0000}, {1:0.0000}, {2:0.0000}) : ({3:0.0000}, {4:0.0000}, {5:0.0000}, {6:0.0000})",
- position.x, position.y, position.z,
- rotation.x, rotation.y, rotation.z, rotation.w);
- }
- else if (action is SteamVR_Action_Skeleton)
- {
- SteamVR_Action_Skeleton actionSkeleton = (SteamVR_Action_Skeleton)action;
- Vector3 position = actionSkeleton.GetLocalPosition(source);
- Quaternion rotation = actionSkeleton.GetLocalRotation(source);
- actionText = string.Format("({0:0.0000}, {1:0.0000}, {2:0.0000}) : ({3:0.0000}, {4:0.0000}, {5:0.0000}, {6:0.0000})",
- position.x, position.y, position.z,
- rotation.x, rotation.y, rotation.z, rotation.w);
- }
- else if (action is SteamVR_Action_Vibration)
- {
- //SteamVR_Input_Action_Vibration actionVibration = (SteamVR_Input_Action_Vibration)action;
- if (timeSinceLastChanged == -1)
- actionText = "never used";
- actionText = string.Format("{0:0} seconds since last used", timeSinceLastChanged);
- }
- EditorGUILayout.LabelField(action.GetShortName(), actionText, labelStyle);
- GUI.backgroundColor = defaultColor;
- }
- EditorGUI.indentLevel--;
- EditorGUILayout.Space();
- }
- EditorGUI.indentLevel--;
- }
- EditorGUILayout.Space();
- EditorGUILayout.LabelField("Active Action Set List");
- EditorGUI.indentLevel++;
- EditorGUILayout.LabelField(SteamVR_ActionSet_Manager.debugActiveSetListText, setLabelStyle);
- EditorGUI.indentLevel--;
- EditorGUILayout.Space();
- EditorGUILayout.EndScrollView();
- SteamVR_Action.startUpdatingSourceOnAccess = startUpdatingSourceOnAccess;
- }
- }
- }
|