Skip to content

Commit 647ed6f

Browse files
authored
Merge pull request #621 from dvsilch/master
add generic type UnityAction support & fix typo
2 parents 2e09174 + a51632c commit 647ed6f

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Factory.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,78 @@ public static UnityEngine.Events.UnityAction UnityAction<T>(T state, Func<T, Uni
184184
return () => asyncAction(state).Forget();
185185
}
186186

187+
/// <summary>
188+
/// Create async void(UniTaskVoid) UnityAction.
189+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T arg) => { /* */ } ))
190+
/// </summary>
191+
public static UnityEngine.Events.UnityAction<T> UnityAction<T>(Func<T, UniTaskVoid> asyncAction)
192+
{
193+
return (arg) => asyncAction(arg).Forget();
194+
}
195+
196+
/// <summary>
197+
/// Create async void(UniTaskVoid) UnityAction.
198+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1) => { /* */ } ))
199+
/// </summary>
200+
public static UnityEngine.Events.UnityAction<T0, T1> UnityAction<T0, T1>(Func<T0, T1, UniTaskVoid> asyncAction)
201+
{
202+
return (arg0, arg1) => asyncAction(arg0, arg1).Forget();
203+
}
204+
205+
/// <summary>
206+
/// Create async void(UniTaskVoid) UnityAction.
207+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1, T2 arg2) => { /* */ } ))
208+
/// </summary>
209+
public static UnityEngine.Events.UnityAction<T0, T1, T2> UnityAction<T0, T1, T2>(Func<T0, T1, T2, UniTaskVoid> asyncAction)
210+
{
211+
return (arg0, arg1, arg2) => asyncAction(arg0, arg1, arg2).Forget();
212+
}
213+
214+
/// <summary>
215+
/// Create async void(UniTaskVoid) UnityAction.
216+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1, T2 arg2, T3 arg3) => { /* */ } ))
217+
/// </summary>
218+
public static UnityEngine.Events.UnityAction<T0, T1, T2, T3> UnityAction<T0, T1, T2, T3>(Func<T0, T1, T2, T3, UniTaskVoid> asyncAction)
219+
{
220+
return (arg0, arg1, arg2, arg3) => asyncAction(arg0, arg1, arg2, arg3).Forget();
221+
}
222+
223+
// <summary>
224+
/// Create async void(UniTaskVoid) UnityAction.
225+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T arg, CancellationToken cancellationToken) => { /* */ } ))
226+
/// </summary>
227+
public static UnityEngine.Events.UnityAction<T> UnityAction<T>(Func<T, CancellationToken, UniTaskVoid> asyncAction, CancellationToken cancellationToken)
228+
{
229+
return (arg) => asyncAction(arg, cancellationToken).Forget();
230+
}
231+
232+
/// <summary>
233+
/// Create async void(UniTaskVoid) UnityAction.
234+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1, CancellationToken cancellationToken) => { /* */ } ))
235+
/// </summary>
236+
public static UnityEngine.Events.UnityAction<T0, T1> UnityAction<T0, T1>(Func<T0, T1, CancellationToken, UniTaskVoid> asyncAction, CancellationToken cancellationToken)
237+
{
238+
return (arg0, arg1) => asyncAction(arg0, arg1, cancellationToken).Forget();
239+
}
240+
241+
/// <summary>
242+
/// Create async void(UniTaskVoid) UnityAction.
243+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1, T2 arg2, CancellationToken cancellationToken) => { /* */ } ))
244+
/// </summary>
245+
public static UnityEngine.Events.UnityAction<T0, T1, T2> UnityAction<T0, T1, T2>(Func<T0, T1, T2, CancellationToken, UniTaskVoid> asyncAction, CancellationToken cancellationToken)
246+
{
247+
return (arg0, arg1, arg2) => asyncAction(arg0, arg1, arg2, cancellationToken).Forget();
248+
}
249+
250+
/// <summary>
251+
/// Create async void(UniTaskVoid) UnityAction.
252+
/// For example: onClick.AddListener(UniTask.UnityAction(async (T0 arg0, T1 arg1, T2 arg2, T3 arg3, CancellationToken cancellationToken) => { /* */ } ))
253+
/// </summary>
254+
public static UnityEngine.Events.UnityAction<T0, T1, T2, T3> UnityAction<T0, T1, T2, T3>(Func<T0, T1, T2, T3, CancellationToken, UniTaskVoid> asyncAction, CancellationToken cancellationToken)
255+
{
256+
return (arg0, arg1, arg2, arg3) => asyncAction(arg0, arg1, arg2, arg3, cancellationToken).Forget();
257+
}
258+
187259
#endif
188260

189261
/// <summary>

src/UniTask/Assets/Tests/AsyncTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class MyMyClass
145145
public int MyProperty { get; set; }
146146
}
147147

148-
class MyBoolenClass
148+
class MyBooleanClass
149149
{
150150
public bool MyProperty { get; set; }
151151
}
@@ -167,7 +167,7 @@ public IEnumerator WaitUntil() => UniTask.ToCoroutine(async () =>
167167
[UnityTest]
168168
public IEnumerator WaitUntilWithState() => UniTask.ToCoroutine(async () =>
169169
{
170-
var v = new MyBoolenClass { MyProperty = false };
170+
var v = new MyBooleanClass { MyProperty = false };
171171

172172
UniTask.DelayFrame(10, PlayerLoopTiming.PostLateUpdate).ContinueWith(() => v.MyProperty = true).Forget();
173173

@@ -195,7 +195,7 @@ public IEnumerator WaitWhile() => UniTask.ToCoroutine(async () =>
195195
[UnityTest]
196196
public IEnumerator WaitWhileWithState() => UniTask.ToCoroutine(async () =>
197197
{
198-
var v = new MyBoolenClass { MyProperty = true };
198+
var v = new MyBooleanClass { MyProperty = true };
199199

200200
UniTask.DelayFrame(10, PlayerLoopTiming.PostLateUpdate).ContinueWith(() => v.MyProperty = false).Forget();
201201

0 commit comments

Comments
 (0)