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.
		
		
		
		
		
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
using System.Collections;
 | 
						|
using System;
 | 
						|
using Valve.VR;
 | 
						|
using System.Linq;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace Valve.VR
 | 
						|
{
 | 
						|
    public static class SteamVR_Input_Source
 | 
						|
    {
 | 
						|
        public static int numSources = System.Enum.GetValues(typeof(SteamVR_Input_Sources)).Length;
 | 
						|
 | 
						|
        private static ulong[] inputSourceHandlesBySource;
 | 
						|
        private static Dictionary<ulong, SteamVR_Input_Sources> inputSourceSourcesByHandle = new Dictionary<ulong, SteamVR_Input_Sources>();
 | 
						|
 | 
						|
        private static Type enumType = typeof(SteamVR_Input_Sources);
 | 
						|
        private static Type descriptionType = typeof(DescriptionAttribute);
 | 
						|
 | 
						|
        private static SteamVR_Input_Sources[] allSources;
 | 
						|
 | 
						|
        public static ulong GetHandle(SteamVR_Input_Sources inputSource)
 | 
						|
        {
 | 
						|
            int index = (int)inputSource;
 | 
						|
            if (index < inputSourceHandlesBySource.Length)
 | 
						|
                return inputSourceHandlesBySource[index];
 | 
						|
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
        public static SteamVR_Input_Sources GetSource(ulong handle)
 | 
						|
        {
 | 
						|
            if (inputSourceSourcesByHandle.ContainsKey(handle))
 | 
						|
                return inputSourceSourcesByHandle[handle];
 | 
						|
 | 
						|
            return SteamVR_Input_Sources.Any;
 | 
						|
        }
 | 
						|
 | 
						|
        public static SteamVR_Input_Sources[] GetAllSources()
 | 
						|
        {
 | 
						|
            if (allSources == null)
 | 
						|
                allSources = (SteamVR_Input_Sources[])System.Enum.GetValues(typeof(SteamVR_Input_Sources));
 | 
						|
 | 
						|
            return allSources;
 | 
						|
        }
 | 
						|
 | 
						|
        private static string GetPath(string inputSourceEnumName)
 | 
						|
        {
 | 
						|
            return ((DescriptionAttribute)enumType.GetMember(inputSourceEnumName)[0].GetCustomAttributes(descriptionType, false)[0]).Description;
 | 
						|
        }
 | 
						|
 | 
						|
        public static void Initialize()
 | 
						|
        {
 | 
						|
            List<SteamVR_Input_Sources> allSourcesList = new List<SteamVR_Input_Sources>();
 | 
						|
            string[] enumNames = System.Enum.GetNames(enumType);
 | 
						|
            inputSourceHandlesBySource = new ulong[enumNames.Length];
 | 
						|
            inputSourceSourcesByHandle = new Dictionary<ulong, SteamVR_Input_Sources>();
 | 
						|
 | 
						|
            for (int enumIndex = 0; enumIndex < enumNames.Length; enumIndex++)
 | 
						|
            {
 | 
						|
                string path = GetPath(enumNames[enumIndex]);
 | 
						|
 | 
						|
                ulong handle = 0;
 | 
						|
                EVRInputError err = OpenVR.Input.GetInputSourceHandle(path, ref handle);
 | 
						|
 | 
						|
                if (err != EVRInputError.None)
 | 
						|
                    Debug.LogError("<b>[SteamVR]</b> GetInputSourceHandle (" + path + ") error: " + err.ToString());
 | 
						|
 | 
						|
                if (enumNames[enumIndex] == SteamVR_Input_Sources.Any.ToString()) //todo: temporary hack
 | 
						|
                {
 | 
						|
                    inputSourceHandlesBySource[enumIndex] = 0;
 | 
						|
                    inputSourceSourcesByHandle.Add(0, (SteamVR_Input_Sources)enumIndex);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    inputSourceHandlesBySource[enumIndex] = handle;
 | 
						|
                    inputSourceSourcesByHandle.Add(handle, (SteamVR_Input_Sources)enumIndex);
 | 
						|
                }
 | 
						|
 | 
						|
                allSourcesList.Add((SteamVR_Input_Sources)enumIndex);
 | 
						|
            }
 | 
						|
 | 
						|
            allSources = allSourcesList.ToArray();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |