From 931da1ced1d73b3fc98a432e1ec511bea3fc31db Mon Sep 17 00:00:00 2001 From: Flowaria Date: Wed, 16 Sep 2026 14:04:37 +0900 Subject: [PATCH] Added CoroutineDispatcher.StopCoroutine --- GTFO-API/Utilities/CoroutineDispatcher.cs | 17 +++++++++++------ .../Utilities/Impl/CoroutineDispatcher_Impl.cs | 10 ++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/GTFO-API/Utilities/CoroutineDispatcher.cs b/GTFO-API/Utilities/CoroutineDispatcher.cs index 31fb39d..e5141bb 100644 --- a/GTFO-API/Utilities/CoroutineDispatcher.cs +++ b/GTFO-API/Utilities/CoroutineDispatcher.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections; using GTFO.API.Utilities.Impl; using UnityEngine; @@ -33,5 +28,15 @@ public static Coroutine StartInLevelCoroutine(IEnumerator routine) { return CoroutineDispatcher_Impl.Instance.RunInLevelCoroutine(routine); } + + /// + /// Stop Coroutine (Both Persistent and InLevel allowed) + /// + /// Coroutine to Stop + public static void StopCoroutine(Coroutine routine) + { + CoroutineDispatcher_Impl.Instance.StopCoroutine(routine); + CoroutineDispatcher_Impl.Instance.RemoveInLevelCoroutine(routine); + } } } diff --git a/GTFO-API/Utilities/Impl/CoroutineDispatcher_Impl.cs b/GTFO-API/Utilities/Impl/CoroutineDispatcher_Impl.cs index f018eda..e20345b 100644 --- a/GTFO-API/Utilities/Impl/CoroutineDispatcher_Impl.cs +++ b/GTFO-API/Utilities/Impl/CoroutineDispatcher_Impl.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using BepInEx.Unity.IL2CPP.Utils; using Il2CppInterop.Runtime.Attributes; using UnityEngine; @@ -70,6 +71,15 @@ internal Coroutine RunInLevelCoroutine(IEnumerator routine) return coroutine; } + [HideFromIl2Cpp] + internal void RemoveInLevelCoroutine(Coroutine routine) + { + if (m_InLevelCoroutines.Remove(routine)) + { + m_HasInLevelCoroutines = m_InLevelCoroutines.Any(); + } + } + private bool m_HasInLevelCoroutines = false; private readonly List m_InLevelCoroutines = []; private static CoroutineDispatcher_Impl s_Instance = null;