SteamVR_Behaviour_Boolean.cs
8.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
using System;
using System.Collections.Generic;
using System.Linq;
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
using System.Text;
using UnityEngine;
using UnityEngine.Events;
namespace Valve.VR
{
/// <summary>
/// This component simplifies using boolean actions.
/// <para>Provides editor accessible events: OnPress, OnPressDown, OnPressUp, OnChange, and OnUpdate.</para>
/// <para>Provides script accessible events: OnPressEvent, OnPressDownEvent, OnPressUpEvent, OnChangeEvent, and OnUpdateEvent.</para>
/// </summary>
public class SteamVR_Behaviour_Boolean : MonoBehaviour
{
[Tooltip("The SteamVR boolean action that this component should use")]
public SteamVR_Action_Boolean booleanAction;
[Tooltip("The device this action should apply to. Any if the action is not device specific.")]
public SteamVR_Input_Sources inputSource;
/// <summary>This UnityEvent fires whenever a change happens in the action</summary>
public SteamVR_Behaviour_BooleanEvent onChange;
/// <summary>This C# event fires whenever a change happens in the action</summary>
public event ChangeHandler onChangeEvent;
/// <summary>This UnityEvent fires whenever the action is updated</summary>
public SteamVR_Behaviour_BooleanEvent onUpdate;
/// <summary>This C# event fires whenever the action is updated</summary>
public event UpdateHandler onUpdateEvent;
/// <summary>This UnityEvent will fire whenever the boolean action is true and gets updated</summary>
public SteamVR_Behaviour_BooleanEvent onPress;
/// <summary>This C# event will fire whenever the boolean action is true and gets updated</summary>
public event StateHandler onPressEvent;
/// <summary>This UnityEvent will fire whenever the boolean action has changed from false to true in the last update</summary>
public SteamVR_Behaviour_BooleanEvent onPressDown;
/// <summary>This C# event will fire whenever the boolean action has changed from false to true in the last update</summary>
public event StateDownHandler onPressDownEvent;
/// <summary>This UnityEvent will fire whenever the boolean action has changed from true to false in the last update</summary>
public SteamVR_Behaviour_BooleanEvent onPressUp;
/// <summary>This C# event will fire whenever the boolean action has changed from true to false in the last update</summary>
public event StateUpHandler onPressUpEvent;
/// <summary>Returns true if this action is currently bound and its action set is active</summary>
public bool isActive { get { return booleanAction[inputSource].active; } }
/// <summary>Returns the action set that this action is in.</summary>
public SteamVR_ActionSet actionSet { get { if (booleanAction != null) return booleanAction.actionSet; else return null; } }
protected virtual void OnEnable()
{
if (booleanAction == null)
{
Debug.LogError("[SteamVR] Boolean action not set.", this);
return;
}
AddHandlers();
}
protected virtual void OnDisable()
{
RemoveHandlers();
}
protected void AddHandlers()
{
booleanAction[inputSource].onUpdate += SteamVR_Behaviour_Boolean_OnUpdate;
booleanAction[inputSource].onChange += SteamVR_Behaviour_Boolean_OnChange;
booleanAction[inputSource].onState += SteamVR_Behaviour_Boolean_OnState;
booleanAction[inputSource].onStateDown += SteamVR_Behaviour_Boolean_OnStateDown;
booleanAction[inputSource].onStateUp += SteamVR_Behaviour_Boolean_OnStateUp;
}
protected void RemoveHandlers()
{
if (booleanAction != null)
{
booleanAction[inputSource].onUpdate -= SteamVR_Behaviour_Boolean_OnUpdate;
booleanAction[inputSource].onChange -= SteamVR_Behaviour_Boolean_OnChange;
booleanAction[inputSource].onState -= SteamVR_Behaviour_Boolean_OnState;
booleanAction[inputSource].onStateDown -= SteamVR_Behaviour_Boolean_OnStateDown;
booleanAction[inputSource].onStateUp -= SteamVR_Behaviour_Boolean_OnStateUp;
}
}
private void SteamVR_Behaviour_Boolean_OnStateUp(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
{
if (onPressUp != null)
{
onPressUp.Invoke(this, fromSource, false);
}
if (onPressUpEvent != null)
{
onPressUpEvent.Invoke(this, fromSource);
}
}
private void SteamVR_Behaviour_Boolean_OnStateDown(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
{
if (onPressDown != null)
{
onPressDown.Invoke(this, fromSource, true);
}
if (onPressDownEvent != null)
{
onPressDownEvent.Invoke(this, fromSource);
}
}
private void SteamVR_Behaviour_Boolean_OnState(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
{
if (onPress != null)
{
onPress.Invoke(this, fromSource, true);
}
if (onPressEvent != null)
{
onPressEvent.Invoke(this, fromSource);
}
}
private void SteamVR_Behaviour_Boolean_OnUpdate(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource, bool newState)
{
if (onUpdate != null)
{
onUpdate.Invoke(this, fromSource, newState);
}
if (onUpdateEvent != null)
{
onUpdateEvent.Invoke(this, fromSource, newState);
}
}
private void SteamVR_Behaviour_Boolean_OnChange(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource, bool newState)
{
if (onChange != null)
{
onChange.Invoke(this, fromSource, newState);
}
if (onChangeEvent != null)
{
onChangeEvent.Invoke(this, fromSource, newState);
}
}
/// <summary>
/// Gets the localized name of the device that the action corresponds to.
/// </summary>
/// <param name="localizedParts">
/// <list type="bullet">
/// <item><description>VRInputString_Hand - Which hand the origin is in. E.g. "Left Hand"</description></item>
/// <item><description>VRInputString_ControllerType - What kind of controller the user has in that hand.E.g. "Vive Controller"</description></item>
/// <item><description>VRInputString_InputSource - What part of that controller is the origin. E.g. "Trackpad"</description></item>
/// <item><description>VRInputString_All - All of the above. E.g. "Left Hand Vive Controller Trackpad"</description></item>
/// </list>
/// </param>
public string GetLocalizedName(params EVRInputStringBits[] localizedParts)
{
if (booleanAction != null)
return booleanAction.GetLocalizedOriginPart(inputSource, localizedParts);
return null;
}
public delegate void StateDownHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource);
public delegate void StateUpHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource);
public delegate void StateHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource);
public delegate void ActiveChangeHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource, bool active);
public delegate void ChangeHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource, bool newState);
public delegate void UpdateHandler(SteamVR_Behaviour_Boolean fromAction, SteamVR_Input_Sources fromSource, bool newState);
}
}