Skip to content

Instantly share code, notes, and snippets.

@klaszlo8207
Last active January 18, 2023 08:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save klaszlo8207/b5faa0e88089aef0c0eb505065579650 to your computer and use it in GitHub Desktop.
Save klaszlo8207/b5faa0e88089aef0c0eb505065579650 to your computer and use it in GitHub Desktop.
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
namespace _MyScripts.Utils
{
public static class CoroutineExtensions
{
public static IEnumerator PostCoroutine(this MonoBehaviour mono, IEnumerator coroutine)
{
mono.StartCoroutine(coroutine);
return coroutine;
}
public static IEnumerator PostDelayed(this MonoBehaviour mono, UnityAction action, float delay)
{
var x = ExecuteAction(delay, null, action);
mono.StartCoroutine(x);
return x;
}
public static IEnumerator PostDelayed(this MonoBehaviour mono, UnityAction actionPre, UnityAction actionPost,
float delay)
{
var x = ExecuteAction(delay, actionPre, actionPost);
mono.StartCoroutine(x);
return x;
}
private static IEnumerator ExecuteAction(float delay, UnityAction actionPre, UnityAction actionPost)
{
actionPre?.Invoke();
yield return new WaitForSecondsRealtime(delay);
actionPost.Invoke();
}
private static IEnumerator ExecuteAction(UnityAction action)
{
action?.Invoke();
yield return null;
}
public static void StopPostDelayed(this MonoBehaviour mono, IEnumerator x)
{
mono.StopCoroutine(x);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment