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);
}
}