mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 修改CoroutineHandle中的协程执行逻辑,实现每帧只推进一步的机制, 避免单帧内过度执行导致的性能问题 - 修复yield null处理逻辑,正确处理等待一帧后继续执行的情况 - 改进嵌套协程处理,确保子协程完成后正确返回到父协程 - 优化WaitUntil条件检查逻辑,确保状态转换正确性 - 在定时任务扩展中添加yield break确保协程正确结束 - 调整协程调度器的更新顺序,先添加新协程再执行更新
33 lines
878 B
C#
33 lines
878 B
C#
using GFramework.Core.Abstractions.coroutine;
|
|
|
|
namespace GFramework.Core.coroutine;
|
|
|
|
/// <summary>
|
|
/// 等待直到指定条件满足的协程等待指令
|
|
/// </summary>
|
|
/// <param name="predicate">用于判断等待是否完成的条件函数</param>
|
|
public class WaitUntil(Func<bool> predicate) : IYieldInstruction
|
|
{
|
|
/// <summary>
|
|
/// 获取当前等待指令是否已完成
|
|
/// </summary>
|
|
public bool IsDone { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 更新等待状态
|
|
/// </summary>
|
|
/// <param name="deltaTime">时间增量</param>
|
|
public void Update(float deltaTime)
|
|
{
|
|
// 每次更新都重新评估条件,但一旦完成就保持完成状态
|
|
if (!IsDone) IsDone = predicate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重置等待指令状态
|
|
/// </summary>
|
|
public void Reset()
|
|
{
|
|
IsDone = false;
|
|
}
|
|
} |