Code/Stallers/WaitForCoroutine.cs
using System.Collections.Generic;
using static Sandbox.GameObjectSystem;
namespace Coroutines.Stallers;
/// <summary>
/// Pauses a coroutine until another coroutine is completed.
/// </summary>
public sealed class WaitForCoroutine : ICoroutineStaller
{
/// <inheritdoc/>
public bool IsComplete { get; private set; }
/// <inheritdoc/>
public Stage PollingStage { get; }
/// <summary>
/// The coroutine to wait for.
/// </summary>
private IEnumerator<ICoroutineStaller> CoroutineToWaitFor { get; }
/// <summary>
/// Initializes a new instance of <see cref="WaitForCoroutine"/>.
/// </summary>
/// <param name="coroutine">The coroutine to wait for.</param>
/// <param name="pollingStage">The way for the coroutine to wait for completion.</param>
public WaitForCoroutine( IEnumerator<ICoroutineStaller> coroutine, Stage pollingStage = Coroutine.PreservePollingStage )
{
CoroutineToWaitFor = coroutine;
PollingStage = pollingStage;
}
/// <inheritdoc/>
public void Update()
{
IsComplete = Coroutine.IsComplete( CoroutineToWaitFor );
}
}