using System.Collections; using GFramework.Game.Abstractions.coroutine; namespace GFramework.Game.coroutine; /// /// 全局协程作用域管理器,提供全局唯一的协程执行环境 /// public static class GlobalCoroutineScope { private static CoroutineScope? _instance; /// /// 获取当前全局协程作用域是否已初始化 /// public static bool IsInitialized => _instance != null; /// /// 尝试获取当前全局协程作用域实例 /// /// 输出参数,如果初始化则返回协程作用域实例,否则返回null /// 如果全局协程作用域已初始化则返回true,否则返回false public static bool TryGetScope(out ICoroutineScope? scope) { scope = _instance; return _instance != null; } /// /// 初始化全局协程作用域 /// /// 用于执行协程的调度器 public static void Initialize(CoroutineScheduler scheduler) { _instance = new CoroutineScope(scheduler, "GlobalScope"); } /// /// 在全局协程作用域中启动一个协程 /// /// 要执行的协程枚举器 /// 协程句柄,用于控制和监控协程执行 /// 当全局协程作用域未初始化时抛出 public static ICoroutineHandle Launch(IEnumerator routine) { return _instance == null ? throw new InvalidOperationException("GlobalCoroutineScope not initialized. Call Initialize() first.") : _instance.Launch(routine); } }