123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650 |
-
- using UnityEngine;
- using System.Collections;
- using System;
- using Valve.VR;
- using System.Runtime.InteropServices;
- using System.Collections.Generic;
- using System.Text;
- namespace Valve.VR
- {
-
-
-
- [Serializable]
- public class SteamVR_ActionSet : IEquatable<SteamVR_ActionSet>, ISteamVR_ActionSet, ISerializationCallbackReceiver
- {
- public SteamVR_ActionSet() { }
- [SerializeField]
- private string actionSetPath;
- [NonSerialized]
- protected SteamVR_ActionSet_Data setData;
-
- public SteamVR_Action[] allActions
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.allActions;
- }
- }
-
- public ISteamVR_Action_In[] nonVisualInActions
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.nonVisualInActions;
- }
- }
-
- public ISteamVR_Action_In[] visualActions
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.visualActions;
- }
- }
-
- public SteamVR_Action_Pose[] poseActions
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.poseActions;
- }
- }
-
- public SteamVR_Action_Skeleton[] skeletonActions
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.skeletonActions;
- }
- }
-
- public ISteamVR_Action_Out[] outActionArray
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.outActionArray;
- }
- }
-
- public string fullPath
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.fullPath;
- }
- }
- public string usage
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.usage;
- }
- }
- public ulong handle
- {
- get
- {
- if (initialized == false)
- Initialize();
- return setData.handle;
- }
- }
- [NonSerialized]
- protected bool initialized = false;
- public static CreateType Create<CreateType>(string newSetPath) where CreateType : SteamVR_ActionSet, new()
- {
- CreateType actionSet = new CreateType();
- actionSet.PreInitialize(newSetPath);
- return actionSet;
- }
- public static CreateType CreateFromName<CreateType>(string newSetName) where CreateType : SteamVR_ActionSet, new()
- {
- CreateType actionSet = new CreateType();
- actionSet.PreInitialize(SteamVR_Input_ActionFile_ActionSet.GetPathFromName(newSetName));
- return actionSet;
- }
- public void PreInitialize(string newActionPath)
- {
- actionSetPath = newActionPath;
- setData = new SteamVR_ActionSet_Data();
- setData.fullPath = actionSetPath;
- setData.PreInitialize();
- initialized = true;
- }
- public virtual void FinishPreInitialize()
- {
- setData.FinishPreInitialize();
- }
-
-
-
- public virtual void Initialize(bool createNew = false, bool throwErrors = true)
- {
- if (createNew)
- {
- setData.Initialize();
- }
- else
- {
- setData = SteamVR_Input.GetActionSetDataFromPath(actionSetPath);
- if (setData == null)
- {
- #if UNITY_EDITOR
- if (throwErrors)
- {
- if (string.IsNullOrEmpty(actionSetPath))
- {
- Debug.LogError("<b>[SteamVR]</b> Action has not been assigned.");
- }
- else
- {
- Debug.LogError("<b>[SteamVR]</b> Could not find action with path: " + actionSetPath);
- }
- }
- #endif
- }
- }
- initialized = true;
- }
- public string GetPath()
- {
- return actionSetPath;
- }
-
-
-
-
- public bool IsActive(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any)
- {
- return setData.IsActive(source);
- }
-
-
-
-
- public float GetTimeLastChanged(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any)
- {
- return setData.GetTimeLastChanged(source);
- }
-
-
-
-
-
-
- public void Activate(SteamVR_Input_Sources activateForSource = SteamVR_Input_Sources.Any, int priority = 0, bool disableAllOtherActionSets = false)
- {
- setData.Activate(activateForSource, priority, disableAllOtherActionSets);
- }
-
-
-
- public void Deactivate(SteamVR_Input_Sources forSource = SteamVR_Input_Sources.Any)
- {
- setData.Deactivate(forSource);
- }
-
- public string GetShortName()
- {
- return setData.GetShortName();
- }
-
-
-
-
-
- public bool ShowBindingHints(ISteamVR_Action_In originToHighlight = null)
- {
- if (originToHighlight == null)
- return SteamVR_Input.ShowBindingHints(this);
- else
- return SteamVR_Input.ShowBindingHints(originToHighlight);
- }
- public bool ReadRawSetActive(SteamVR_Input_Sources inputSource)
- {
- return setData.ReadRawSetActive(inputSource);
- }
- public float ReadRawSetLastChanged(SteamVR_Input_Sources inputSource)
- {
- return setData.ReadRawSetLastChanged(inputSource);
- }
- public int ReadRawSetPriority(SteamVR_Input_Sources inputSource)
- {
- return setData.ReadRawSetPriority(inputSource);
- }
- public SteamVR_ActionSet_Data GetActionSetData()
- {
- return setData;
- }
- public CreateType GetCopy<CreateType>() where CreateType : SteamVR_ActionSet, new()
- {
- if (SteamVR_Input.ShouldMakeCopy())
- {
- CreateType actionSet = new CreateType();
- actionSet.actionSetPath = this.actionSetPath;
- actionSet.setData = this.setData;
- actionSet.initialized = true;
- return actionSet;
- }
- else
- {
- return (CreateType)this;
- }
- }
- public bool Equals(SteamVR_ActionSet other)
- {
- if (ReferenceEquals(null, other))
- return false;
- return this.actionSetPath == other.actionSetPath;
- }
- public override bool Equals(object other)
- {
- if (ReferenceEquals(null, other))
- {
- if (string.IsNullOrEmpty(this.actionSetPath))
- return true;
- return false;
- }
- if (ReferenceEquals(this, other))
- return true;
- if (other is SteamVR_ActionSet)
- return this.Equals((SteamVR_ActionSet)other);
- return false;
- }
- public override int GetHashCode()
- {
- if (actionSetPath == null)
- return 0;
- else
- return actionSetPath.GetHashCode();
- }
- public static bool operator !=(SteamVR_ActionSet set1, SteamVR_ActionSet set2)
- {
- return !(set1 == set2);
- }
- public static bool operator ==(SteamVR_ActionSet set1, SteamVR_ActionSet set2)
- {
- bool set1null = (ReferenceEquals(null, set1) || string.IsNullOrEmpty(set1.actionSetPath) || set1.GetActionSetData() == null);
- bool set2null = (ReferenceEquals(null, set2) || string.IsNullOrEmpty(set2.actionSetPath) || set2.GetActionSetData() == null);
- if (set1null && set2null)
- return true;
- else if (set1null != set2null)
- return false;
- return set1.Equals(set2);
- }
- void ISerializationCallbackReceiver.OnBeforeSerialize()
- {
- }
- void ISerializationCallbackReceiver.OnAfterDeserialize()
- {
- if (setData != null)
- {
- if (setData.fullPath != actionSetPath)
- {
- setData = SteamVR_Input.GetActionSetDataFromPath(actionSetPath);
- }
- }
- if (initialized == false)
- Initialize(false, false);
- }
- }
-
-
-
- public class SteamVR_ActionSet_Data : ISteamVR_ActionSet
- {
- public SteamVR_ActionSet_Data() { }
-
- public SteamVR_Action[] allActions { get; set; }
-
- public ISteamVR_Action_In[] nonVisualInActions { get; set; }
-
- public ISteamVR_Action_In[] visualActions { get; set; }
-
- public SteamVR_Action_Pose[] poseActions { get; set; }
-
- public SteamVR_Action_Skeleton[] skeletonActions { get; set; }
-
- public ISteamVR_Action_Out[] outActionArray { get; set; }
-
- public string fullPath { get; set; }
- public string usage { get; set; }
- public ulong handle { get; set; }
- protected bool[] rawSetActive = new bool[SteamVR_Input_Source.numSources];
- protected float[] rawSetLastChanged = new float[SteamVR_Input_Source.numSources];
- protected int[] rawSetPriority = new int[SteamVR_Input_Source.numSources];
- protected bool initialized = false;
- public void PreInitialize()
- {
- }
- public void FinishPreInitialize()
- {
- List<SteamVR_Action> allActionsList = new List<SteamVR_Action>();
- List<ISteamVR_Action_In> nonVisualInActionsList = new List<ISteamVR_Action_In>();
- List<ISteamVR_Action_In> visualActionsList = new List<ISteamVR_Action_In>();
- List<SteamVR_Action_Pose> poseActionsList = new List<SteamVR_Action_Pose>();
- List<SteamVR_Action_Skeleton> skeletonActionsList = new List<SteamVR_Action_Skeleton>();
- List<ISteamVR_Action_Out> outActionList = new List<ISteamVR_Action_Out>();
- if (SteamVR_Input.actions == null)
- {
- Debug.LogError("<b>[SteamVR Input]</b> Actions not initialized!");
- return;
- }
- for (int actionIndex = 0; actionIndex < SteamVR_Input.actions.Length; actionIndex++)
- {
- SteamVR_Action action = SteamVR_Input.actions[actionIndex];
- if (action.actionSet.GetActionSetData() == this)
- {
- allActionsList.Add(action);
- if (action is ISteamVR_Action_Boolean || action is ISteamVR_Action_Single || action is ISteamVR_Action_Vector2 || action is ISteamVR_Action_Vector3)
- {
- nonVisualInActionsList.Add((ISteamVR_Action_In)action);
- }
- else if (action is SteamVR_Action_Pose)
- {
- visualActionsList.Add((ISteamVR_Action_In)action);
- poseActionsList.Add((SteamVR_Action_Pose)action);
- }
- else if (action is SteamVR_Action_Skeleton)
- {
- visualActionsList.Add((ISteamVR_Action_In)action);
- skeletonActionsList.Add((SteamVR_Action_Skeleton)action);
- }
- else if (action is ISteamVR_Action_Out)
- {
- outActionList.Add((ISteamVR_Action_Out)action);
- }
- else
- {
- Debug.LogError("<b>[SteamVR Input]</b> Action doesn't implement known interface: " + action.fullPath);
- }
- }
- }
- allActions = allActionsList.ToArray();
- nonVisualInActions = nonVisualInActionsList.ToArray();
- visualActions = visualActionsList.ToArray();
- poseActions = poseActionsList.ToArray();
- skeletonActions = skeletonActionsList.ToArray();
- outActionArray = outActionList.ToArray();
- }
- public void Initialize()
- {
- ulong newHandle = 0;
- EVRInputError err = OpenVR.Input.GetActionSetHandle(fullPath.ToLower(), ref newHandle);
- handle = newHandle;
- if (err != EVRInputError.None)
- Debug.LogError("<b>[SteamVR]</b> GetActionSetHandle (" + fullPath + ") error: " + err.ToString());
- initialized = true;
- }
-
-
-
-
- public bool IsActive(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any)
- {
- int sourceIndex = (int)source;
- if (initialized)
- return rawSetActive[sourceIndex] || rawSetActive[0];
- return false;
- }
-
-
-
-
- public float GetTimeLastChanged(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any)
- {
- int sourceIndex = (int)source;
- if (initialized)
- return rawSetLastChanged[sourceIndex];
- return 0;
- }
-
-
-
-
-
-
- public void Activate(SteamVR_Input_Sources activateForSource = SteamVR_Input_Sources.Any, int priority = 0, bool disableAllOtherActionSets = false)
- {
- int sourceIndex = (int)activateForSource;
- if (disableAllOtherActionSets)
- SteamVR_ActionSet_Manager.DisableAllActionSets();
- if (rawSetActive[sourceIndex] == false)
- {
- rawSetActive[sourceIndex] = true;
- SteamVR_ActionSet_Manager.SetChanged();
- rawSetLastChanged[sourceIndex] = Time.realtimeSinceStartup;
- }
- if (rawSetPriority[sourceIndex] != priority)
- {
- rawSetPriority[sourceIndex] = priority;
- SteamVR_ActionSet_Manager.SetChanged();
- rawSetLastChanged[sourceIndex] = Time.realtimeSinceStartup;
- }
- }
-
-
-
- public void Deactivate(SteamVR_Input_Sources forSource = SteamVR_Input_Sources.Any)
- {
- int sourceIndex = (int)forSource;
- if (rawSetActive[sourceIndex] != false)
- {
- rawSetLastChanged[sourceIndex] = Time.realtimeSinceStartup;
- SteamVR_ActionSet_Manager.SetChanged();
- }
- rawSetActive[sourceIndex] = false;
- rawSetPriority[sourceIndex] = 0;
- }
- private string cachedShortName;
-
- public string GetShortName()
- {
- if (cachedShortName == null)
- {
- cachedShortName = SteamVR_Input_ActionFile.GetShortName(fullPath);
- }
- return cachedShortName;
- }
- public bool ReadRawSetActive(SteamVR_Input_Sources inputSource)
- {
- int sourceIndex = (int)inputSource;
- return rawSetActive[sourceIndex];
- }
- public float ReadRawSetLastChanged(SteamVR_Input_Sources inputSource)
- {
- int sourceIndex = (int)inputSource;
- return rawSetLastChanged[sourceIndex];
- }
- public int ReadRawSetPriority(SteamVR_Input_Sources inputSource)
- {
- int sourceIndex = (int)inputSource;
- return rawSetPriority[sourceIndex];
- }
- }
-
-
-
- public interface ISteamVR_ActionSet
- {
-
- SteamVR_Action[] allActions { get; }
-
- ISteamVR_Action_In[] nonVisualInActions { get; }
-
- ISteamVR_Action_In[] visualActions { get; }
-
- SteamVR_Action_Pose[] poseActions { get; }
-
- SteamVR_Action_Skeleton[] skeletonActions { get; }
-
- ISteamVR_Action_Out[] outActionArray { get; }
-
- string fullPath { get; }
-
- string usage { get; }
- ulong handle { get; }
- bool ReadRawSetActive(SteamVR_Input_Sources inputSource);
- float ReadRawSetLastChanged(SteamVR_Input_Sources inputSource);
- int ReadRawSetPriority(SteamVR_Input_Sources inputSource);
-
-
-
-
- bool IsActive(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any);
-
-
-
-
- float GetTimeLastChanged(SteamVR_Input_Sources source = SteamVR_Input_Sources.Any);
-
-
-
-
-
-
- void Activate(SteamVR_Input_Sources activateForSource = SteamVR_Input_Sources.Any, int priority = 0, bool disableAllOtherActionSets = false);
-
- void Deactivate(SteamVR_Input_Sources forSource = SteamVR_Input_Sources.Any);
-
- string GetShortName();
- }
- }
|