Skip to content

Commit c9d9539

Browse files
authored
Merge pull request #1104 from ValveSoftware/beta
Merging beta to main for v2.8.0
2 parents 9442d7d + acac54f commit c9d9539

33 files changed

+648
-106
lines changed

Assets/SteamVR/Editor/SteamVR_Update.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ namespace Valve.VR
1818
[InitializeOnLoad]
1919
public class SteamVR_Update : EditorWindow
2020
{
21-
const string currentVersion = "2.1";
22-
const string versionUrl = "http://media.steampowered.com/apps/steamvr/unitypluginversion.txt";
23-
const string notesUrl = "http://media.steampowered.com/apps/steamvr/unityplugin-v{0}.txt";
24-
const string pluginUrl = "http://u3d.as/content/valve-corporation/steam-vr-plugin";
21+
const string currentVersion = "2.8";
22+
const string versionUrl = "https://media.steampowered.com/apps/steamvr/unitypluginversion.txt";
23+
const string notesUrl = "https://media.steampowered.com/apps/steamvr/unityplugin-v{0}.txt";
24+
const string pluginUrl = "https://u3d.as/content/valve-corporation/steam-vr-plugin";
2525
const string doNotShowKey = "SteamVR.DoNotShow.v{0}";
2626

2727
static bool gotVersion = false;

Assets/SteamVR/Input/Editor/SteamVR_CopyExampleInputFiles.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public class SteamVR_CopyExampleInputFiles : Editor
1616

1717
[UnityEditor.Callbacks.DidReloadScripts]
1818
private static void OnReloadScripts()
19+
{
20+
EditorApplication.update += Update;
21+
}
22+
23+
private static void Update()
1924
{
25+
EditorApplication.update -= Update;
2026
SteamVR_Input.CheckOldLocation();
2127
CopyFiles();
2228
}

Assets/SteamVR/Input/SteamVR_ActionSet_Manager.cs

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,32 @@ namespace Valve.VR
1515
/// </summary>
1616
public static class SteamVR_ActionSet_Manager
1717
{
18-
public static VRActiveActionSet_t[] rawActiveActionSetArray;
18+
public static VRActiveActionSet_t[] rawActiveActionSetArray
19+
{
20+
get
21+
{
22+
if (currentArraySize <= 0)
23+
return null;
24+
else
25+
return poolActiveActionSetArrays[currentArraySize];
26+
}
27+
}
1928

2029
[NonSerialized]
2130
private static uint activeActionSetSize;
2231

32+
[NonSerialized]
2333
private static bool changed = false;
2434

35+
[NonSerialized]
36+
private static int currentArraySize;
37+
[NonSerialized]
38+
private static Dictionary<int, VRActiveActionSet_t[]> poolActiveActionSetArrays;
39+
2540
public static void Initialize()
2641
{
2742
activeActionSetSize = (uint)(Marshal.SizeOf(typeof(VRActiveActionSet_t)));
43+
poolActiveActionSetArrays = new Dictionary<int, VRActiveActionSet_t[]>();
2844
}
2945

3046
/// <summary>
@@ -74,10 +90,38 @@ public static void SetChanged()
7490
changed = true;
7591
}
7692

93+
private static int GetNewArraySize()
94+
{
95+
int size = 0;
96+
97+
SteamVR_Input_Sources[] sources = SteamVR_Input_Source.GetAllSources();
98+
for (int actionSetIndex = 0; actionSetIndex < SteamVR_Input.actionSets.Length; actionSetIndex++)
99+
{
100+
SteamVR_ActionSet set = SteamVR_Input.actionSets[actionSetIndex];
101+
102+
for (int sourceIndex = 0; sourceIndex < sources.Length; sourceIndex++)
103+
{
104+
SteamVR_Input_Sources source = sources[sourceIndex];
105+
106+
if (set.ReadRawSetActive(source))
107+
{
108+
size++;
109+
}
110+
}
111+
}
112+
113+
return size;
114+
}
115+
77116
private static void UpdateActionSetsArray()
78117
{
79-
List<VRActiveActionSet_t> activeActionSetsList = new List<VRActiveActionSet_t>();
118+
int newArraySize = GetNewArraySize();
119+
if (poolActiveActionSetArrays.ContainsKey(newArraySize) == false)
120+
{
121+
poolActiveActionSetArrays[newArraySize] = new VRActiveActionSet_t[newArraySize];
122+
}
80123

124+
int arrayIndex = 0;
81125
SteamVR_Input_Sources[] sources = SteamVR_Input_Source.GetAllSources();
82126

83127
for (int actionSetIndex = 0; actionSetIndex < SteamVR_Input.actionSets.Length; actionSetIndex++)
@@ -90,25 +134,17 @@ private static void UpdateActionSetsArray()
90134

91135
if (set.ReadRawSetActive(source))
92136
{
93-
VRActiveActionSet_t activeSet = new VRActiveActionSet_t();
94-
activeSet.ulActionSet = set.handle;
95-
activeSet.nPriority = set.ReadRawSetPriority(source);
96-
activeSet.ulRestrictedToDevice = SteamVR_Input_Source.GetHandle(source);
97-
98-
int insertionIndex = 0;
99-
for (insertionIndex = 0; insertionIndex < activeActionSetsList.Count; insertionIndex++)
100-
{
101-
if (activeActionSetsList[insertionIndex].nPriority > activeSet.nPriority)
102-
break;
103-
}
104-
activeActionSetsList.Insert(insertionIndex, activeSet);
137+
poolActiveActionSetArrays[newArraySize][arrayIndex].ulActionSet = set.handle;
138+
poolActiveActionSetArrays[newArraySize][arrayIndex].nPriority = set.ReadRawSetPriority(source);
139+
poolActiveActionSetArrays[newArraySize][arrayIndex].ulRestrictedToDevice = SteamVR_Input_Source.GetHandle(source);
140+
141+
arrayIndex++;
105142
}
106143
}
107144
}
108145

109146
changed = false;
110-
111-
rawActiveActionSetArray = activeActionSetsList.ToArray();
147+
currentArraySize = newArraySize;
112148

113149
if (Application.isEditor || updateDebugTextInBuilds)
114150
UpdateDebugText();

Assets/SteamVR/Input/SteamVR_Action_Boolean.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,30 @@ public void RemoveAllListeners()
378378
foreach (Delegate existingDelegate in delegates)
379379
onState -= (SteamVR_Action_Boolean.StateHandler)existingDelegate;
380380
}
381+
382+
if (onChange != null)
383+
{
384+
delegates = onChange.GetInvocationList();
385+
if (delegates != null)
386+
foreach (Delegate existingDelegate in delegates)
387+
onChange -= (SteamVR_Action_Boolean.ChangeHandler)existingDelegate;
388+
}
389+
390+
if (onUpdate != null)
391+
{
392+
delegates = onUpdate.GetInvocationList();
393+
if (delegates != null)
394+
foreach (Delegate existingDelegate in delegates)
395+
onUpdate -= (SteamVR_Action_Boolean.UpdateHandler)existingDelegate;
396+
}
397+
398+
if (onActiveChange != null)
399+
{
400+
delegates = onActiveChange.GetInvocationList();
401+
if (delegates != null)
402+
foreach (Delegate existingDelegate in delegates)
403+
onActiveChange -= (SteamVR_Action_Boolean.ActiveChangeHandler)existingDelegate;
404+
}
381405
}
382406

383407
/// <summary><strong>[Should not be called by user code]</strong>

Assets/SteamVR/Input/SteamVR_Action_Pose.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,14 @@ public virtual void RemoveAllListeners()
569569
onActiveChange -= (SteamVR_Action_Pose.ActiveChangeHandler)existingDelegate;
570570
}
571571

572+
if (onActiveBindingChange != null)
573+
{
574+
delegates = onActiveBindingChange.GetInvocationList();
575+
if (delegates != null)
576+
foreach (Delegate existingDelegate in delegates)
577+
onActiveBindingChange -= (SteamVR_Action_Pose.ActiveChangeHandler)existingDelegate;
578+
}
579+
572580
if (onChange != null)
573581
{
574582
delegates = onChange.GetInvocationList();
@@ -618,7 +626,7 @@ public override void UpdateValue()
618626
UpdateValue(false);
619627
}
620628

621-
public static float framesAhead = 2;
629+
public static float framesAhead = -1;
622630

623631
/// <summary><strong>[Should not be called by user code]</strong>
624632
/// Updates the data for this action and this input source. Sends related events.
@@ -634,10 +642,10 @@ public virtual void UpdateValue(bool skipStateAndEventUpdates)
634642

635643
EVRInputError err;
636644

637-
if (framesAhead == 0)
645+
if (framesAhead == -1)
638646
err = OpenVR.Input.GetPoseActionDataForNextFrame(handle, universeOrigin, ref poseActionData, poseActionData_size, inputSourceHandle);
639647
else
640-
err = OpenVR.Input.GetPoseActionDataRelativeToNow(handle, universeOrigin, framesAhead * (Time.timeScale / SteamVR.instance.hmd_DisplayFrequency), ref poseActionData, poseActionData_size, inputSourceHandle);
648+
err = OpenVR.Input.GetPoseActionDataRelativeToNow(handle, universeOrigin, framesAhead * (1 / SteamVR.instance.hmd_DisplayFrequency), ref poseActionData, poseActionData_size, inputSourceHandle);
641649

642650
if (err != EVRInputError.None)
643651
{

Assets/SteamVR/Input/SteamVR_Action_Single.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,22 @@ public void RemoveAllListeners()
318318
foreach (Delegate existingDelegate in delegates)
319319
onChange -= (SteamVR_Action_Single.ChangeHandler)existingDelegate;
320320
}
321+
322+
if (onActiveChange != null)
323+
{
324+
delegates = onActiveChange.GetInvocationList();
325+
if (delegates != null)
326+
foreach (Delegate existingDelegate in delegates)
327+
onActiveChange -= (SteamVR_Action_Single.ActiveChangeHandler)existingDelegate;
328+
}
329+
330+
if (onActiveBindingChange != null)
331+
{
332+
delegates = onActiveBindingChange.GetInvocationList();
333+
if (delegates != null)
334+
foreach (Delegate existingDelegate in delegates)
335+
onActiveBindingChange -= (SteamVR_Action_Single.ActiveChangeHandler)existingDelegate;
336+
}
321337
}
322338

323339
/// <summary><strong>[Should not be called by user code]</strong>

Assets/SteamVR/Input/SteamVR_Action_Skeleton.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,14 @@ public override void RemoveAllListeners()
904904
onActiveChange -= (SteamVR_Action_Skeleton.ActiveChangeHandler)existingDelegate;
905905
}
906906

907+
if (onActiveBindingChange != null)
908+
{
909+
delegates = onActiveBindingChange.GetInvocationList();
910+
if (delegates != null)
911+
foreach (Delegate existingDelegate in delegates)
912+
onActiveBindingChange -= (SteamVR_Action_Skeleton.ActiveChangeHandler)existingDelegate;
913+
}
914+
907915
if (onChange != null)
908916
{
909917
delegates = onChange.GetInvocationList();

Assets/SteamVR/Input/SteamVR_Action_Vector2.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,22 @@ public void RemoveAllListeners()
327327
foreach (Delegate existingDelegate in delegates)
328328
onChange -= (SteamVR_Action_Vector2.ChangeHandler)existingDelegate;
329329
}
330+
331+
if (onActiveChange != null)
332+
{
333+
delegates = onActiveChange.GetInvocationList();
334+
if (delegates != null)
335+
foreach (Delegate existingDelegate in delegates)
336+
onActiveChange -= (SteamVR_Action_Vector2.ActiveChangeHandler)existingDelegate;
337+
}
338+
339+
if (onActiveBindingChange != null)
340+
{
341+
delegates = onActiveBindingChange.GetInvocationList();
342+
if (delegates != null)
343+
foreach (Delegate existingDelegate in delegates)
344+
onActiveBindingChange -= (SteamVR_Action_Vector2.ActiveChangeHandler)existingDelegate;
345+
}
330346
}
331347

332348
/// <summary><strong>[Should not be called by user code]</strong>

Assets/SteamVR/Input/SteamVR_Action_Vector3.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,22 @@ public void RemoveAllListeners()
323323
foreach (Delegate existingDelegate in delegates)
324324
onChange -= (SteamVR_Action_Vector3.ChangeHandler)existingDelegate;
325325
}
326+
327+
if (onActiveChange != null)
328+
{
329+
delegates = onActiveChange.GetInvocationList();
330+
if (delegates != null)
331+
foreach (Delegate existingDelegate in delegates)
332+
onActiveChange -= (SteamVR_Action_Vector3.ActiveChangeHandler)existingDelegate;
333+
}
334+
335+
if (onActiveBindingChange != null)
336+
{
337+
delegates = onActiveBindingChange.GetInvocationList();
338+
if (delegates != null)
339+
foreach (Delegate existingDelegate in delegates)
340+
onActiveBindingChange -= (SteamVR_Action_Vector3.ActiveChangeHandler)existingDelegate;
341+
}
326342
}
327343

328344
/// <summary><strong>[Should not be called by user code]</strong>

Assets/SteamVR/Input/SteamVR_Action_Vibration.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ public void RemoveOnExecuteListener(ExecuteHandler functionToStopCalling, SteamV
100100
sourceMap[inputSource].onExecute -= functionToStopCalling;
101101
}
102102

103+
/// <summary>
104+
/// Removes all listeners, useful for dispose pattern
105+
/// </summary>
106+
public void RemoveAllListeners(SteamVR_Input_Sources input_Sources)
107+
{
108+
sourceMap[input_Sources].RemoveAllListeners();
109+
}
110+
103111
/// <summary>
104112
/// Returns the last time this action was executed
105113
/// </summary>
@@ -183,6 +191,38 @@ public override void Preinitialize(SteamVR_Action wrappingAction, SteamVR_Input_
183191
vibrationAction = (SteamVR_Action_Vibration)wrappingAction;
184192
}
185193

194+
/// <summary>
195+
/// Removes all listeners, useful for dispose pattern
196+
/// </summary>
197+
public void RemoveAllListeners()
198+
{
199+
Delegate[] delegates;
200+
201+
if (onActiveBindingChange != null)
202+
{
203+
delegates = onActiveBindingChange.GetInvocationList();
204+
if (delegates != null)
205+
foreach (Delegate existingDelegate in delegates)
206+
onActiveBindingChange -= (SteamVR_Action_Vibration.ActiveChangeHandler)existingDelegate;
207+
}
208+
209+
if (onActiveChange != null)
210+
{
211+
delegates = onActiveChange.GetInvocationList();
212+
if (delegates != null)
213+
foreach (Delegate existingDelegate in delegates)
214+
onActiveChange -= (SteamVR_Action_Vibration.ActiveChangeHandler)existingDelegate;
215+
}
216+
217+
if (onExecute != null)
218+
{
219+
delegates = onExecute.GetInvocationList();
220+
if (delegates != null)
221+
foreach (Delegate existingDelegate in delegates)
222+
onExecute -= (SteamVR_Action_Vibration.ExecuteHandler)existingDelegate;
223+
}
224+
}
225+
186226

187227
/// <summary>
188228
/// Trigger the haptics at a certain time for a certain length

0 commit comments

Comments
 (0)