diff --git a/Assets/Scripts/Utilities.meta b/Assets/Scripts/Utilities.meta new file mode 100644 index 0000000..8d393d8 --- /dev/null +++ b/Assets/Scripts/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b747b5f210cbbc6468a91778523829fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs b/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs new file mode 100644 index 0000000..a100de6 --- /dev/null +++ b/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs @@ -0,0 +1,54 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.Events; + +public static class MonoBehaviourExtensions +{ + #region Public API + + public static Coroutine Wait(this MonoBehaviour monoBehaviour, float seconds) + { + return monoBehaviour.StartCoroutine(Wait(seconds)); + } + + public static Coroutine InvokeDelayed(this MonoBehaviour monoBehaviour, UnityAction action, float delayInSeconds) + { + return monoBehaviour.StartCoroutine(InnerInvokeDelayed(action, delayInSeconds)); + } + + public static Coroutine InvokeRepeated(this MonoBehaviour monoBehaviour, UnityAction action, float delayInSeconds, float repeatRateInSeconds) + { + return monoBehaviour.StartCoroutine(InnerInvokeRepeated(action, delayInSeconds, repeatRateInSeconds)); + } + + #endregion + + #region Private methods + private static IEnumerator Wait(float seconds) + { + yield return new WaitForSeconds(seconds); + } + + private static IEnumerator InnerInvokeDelayed(UnityAction action, float delayInSeconds) + { + yield return new WaitForSeconds(delayInSeconds); + action.Invoke(); + } + + private static IEnumerator InnerInvokeRepeated(UnityAction action, float delayInSeconds, float repeatRateInSeconds) + { + yield return new WaitForSeconds(delayInSeconds); + + action.Invoke(); + + while (true) + { + yield return new WaitForSeconds(repeatRateInSeconds); + + action.Invoke(); + } + } + + #endregion + +} diff --git a/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs.meta b/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs.meta new file mode 100644 index 0000000..4eed440 --- /dev/null +++ b/Assets/Scripts/Utilities/MonoBehaviourExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b2bb5e3d92589647b8c1d80f0ad7964 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs b/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs new file mode 100644 index 0000000..50bd990 --- /dev/null +++ b/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs @@ -0,0 +1,48 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.Events; + +public class MonoBehaviourExtensionsDemo : MonoBehaviour +{ + public int i = 0; + + private IEnumerator Start() + { + yield return (this.Wait(1)); + Debug.Log("done waiting"); + + UnityAction helloWorld1 = () => HelloWorld(); + yield return(this.InvokeDelayed(helloWorld1, 2)); //this will halt everything below until it finishes invoking + + UnityAction helloWorld2 = () => HelloWorld(2); + yield return(this.InvokeDelayed(helloWorld2, 2)); //this will halt everything below until it finishes invoking + + UnityAction helloWorld3= () => HelloWorld(200); + this.InvokeDelayed(helloWorld3, 2); //this will NOT halt everything below until it finishes invoking, it just invokes it with a delay + + UnityAction countedHelloWorld = () => CountedHelloWorld(); + var repeatedRoutine = this.InvokeRepeated(countedHelloWorld, 0, 0.5f); + + yield return (this.Wait(3)); + Debug.Log("stopping now"); + StopCoroutine(repeatedRoutine); + + } + + public void HelloWorld() + { + Debug.Log("hello world!"); + } + + public void HelloWorld(int num) + { + Debug.Log("hello world # " + num); + } + + public void CountedHelloWorld() + { + HelloWorld(i); + i++; + } + +} diff --git a/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs.meta b/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs.meta new file mode 100644 index 0000000..dac2603 --- /dev/null +++ b/Assets/Scripts/Utilities/MonoBehaviourExtensionsDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9571d698da2650b48a35c2844b3773d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: