You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			294 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			294 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |