Skip to content
This repository was archived by the owner on Mar 9, 2023. It is now read-only.

Commit 9130365

Browse files
committed
Add RxVRTK_InteractableObject that provide interactive events as Rx Stream
1 parent 8ad14c4 commit 9130365

File tree

3 files changed

+192
-0
lines changed

3 files changed

+192
-0
lines changed

Assets/RxVRTK/Scripts/Components.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
using UniRx;
2+
using VRTK;
3+
4+
namespace RxVRTK
5+
{
6+
public class RxVRTK_InteractableObject : VRTK_InteractableObject
7+
{
8+
#region StartTouching
9+
10+
Subject<VRTK_InteractTouch> onStartTouching;
11+
12+
public override void StartTouching(VRTK_InteractTouch currentTouchingObject = null)
13+
{
14+
base.StartTouching(currentTouchingObject);
15+
if (onStartTouching != null) onStartTouching.OnNext(currentTouchingObject);
16+
}
17+
18+
/// <summary>
19+
/// Observable StartTouching event
20+
/// </summary>
21+
/// <returns></returns>
22+
public IObservable<VRTK_InteractTouch> StartTouchingAsObservable()
23+
{
24+
return onStartTouching ?? (onStartTouching = new Subject<VRTK_InteractTouch>());
25+
}
26+
27+
#endregion
28+
29+
30+
#region StopTouching
31+
32+
Subject<VRTK_InteractTouch> onStopTouching;
33+
34+
public override void StopTouching(VRTK_InteractTouch currentTouchingObject = null)
35+
{
36+
base.StopTouching(currentTouchingObject);
37+
if (onStopTouching != null) onStopTouching.OnNext(currentTouchingObject);
38+
}
39+
40+
/// <summary>
41+
/// Observable StopTouching event
42+
/// </summary>
43+
/// <returns></returns>
44+
public IObservable<VRTK_InteractTouch> StopTouchingAsObservable()
45+
{
46+
return onStopTouching ?? (onStopTouching = new Subject<VRTK_InteractTouch>());
47+
}
48+
49+
#endregion
50+
51+
52+
#region Grabbed
53+
54+
Subject<VRTK_InteractGrab> onGrabbed;
55+
56+
public override void Grabbed(VRTK_InteractGrab currentTouchingObject = null)
57+
{
58+
base.Grabbed(currentTouchingObject);
59+
if (onGrabbed != null) onGrabbed.OnNext(currentTouchingObject);
60+
}
61+
62+
/// <summary>
63+
/// Observable Grabbed event
64+
/// </summary>
65+
/// <returns></returns>
66+
public IObservable<VRTK_InteractGrab> GrabbedAsObservable()
67+
{
68+
return onGrabbed ?? (onGrabbed = new Subject<VRTK_InteractGrab>());
69+
}
70+
71+
#endregion
72+
73+
74+
#region Ungrabbed
75+
76+
Subject<VRTK_InteractGrab> onUngrabbed;
77+
78+
public override void Ungrabbed(VRTK_InteractGrab currentTouchingObject = null)
79+
{
80+
base.Ungrabbed(currentTouchingObject);
81+
if (onUngrabbed != null) onUngrabbed.OnNext(currentTouchingObject);
82+
}
83+
84+
/// <summary>
85+
/// Observable Ungrabbed event
86+
/// </summary>
87+
/// <returns></returns>
88+
public IObservable<VRTK_InteractGrab> UngrabbedAsObservable()
89+
{
90+
return onUngrabbed ?? (onUngrabbed = new Subject<VRTK_InteractGrab>());
91+
}
92+
93+
#endregion
94+
95+
96+
#region StartUsing
97+
98+
Subject<VRTK_InteractUse> onStartUsing;
99+
100+
public override void StartUsing(VRTK_InteractUse currentTouchingObject = null)
101+
{
102+
base.StartUsing(currentTouchingObject);
103+
if (onStartUsing != null) onStartUsing.OnNext(currentTouchingObject);
104+
}
105+
106+
/// <summary>
107+
/// Observable StartUsing event
108+
/// </summary>
109+
/// <returns></returns>
110+
public IObservable<VRTK_InteractUse> StartUsingAsObservable()
111+
{
112+
return onStartUsing ?? (onStartUsing = new Subject<VRTK_InteractUse>());
113+
}
114+
115+
#endregion
116+
117+
118+
#region StopUsing
119+
120+
Subject<VRTK_InteractUse> onStopUsing;
121+
122+
public override void StopUsing(VRTK_InteractUse currentTouchingObject = null)
123+
{
124+
base.StopUsing(currentTouchingObject);
125+
if (onStopUsing != null) onStopUsing.OnNext(currentTouchingObject);
126+
}
127+
128+
/// <summary>
129+
/// Observable StopUsing event
130+
/// </summary>
131+
/// <returns></returns>
132+
public IObservable<VRTK_InteractUse> StopUsingAsObservable()
133+
{
134+
return onStopUsing ?? (onStopUsing = new Subject<VRTK_InteractUse>());
135+
}
136+
137+
#endregion
138+
139+
140+
void OnDestroy()
141+
{
142+
if (onStartTouching != null)
143+
{
144+
onStartTouching.OnCompleted();
145+
}
146+
147+
if (onStopTouching != null)
148+
{
149+
onStopTouching.OnCompleted();
150+
}
151+
152+
if (onGrabbed != null)
153+
{
154+
onGrabbed.OnCompleted();
155+
}
156+
157+
if (onUngrabbed != null)
158+
{
159+
onUngrabbed.OnCompleted();
160+
}
161+
162+
if (onStartUsing != null)
163+
{
164+
onStartUsing.OnCompleted();
165+
}
166+
167+
if (onStopUsing != null)
168+
{
169+
onStopUsing.OnCompleted();
170+
}
171+
}
172+
}
173+
}

Assets/RxVRTK/Scripts/Components/RxVRTK_InteractableObject.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)