using System.Collections;
namespace PkmnLib.Dynamic.ScriptHandling;
///
/// Iterator to figure out the scripts to run.
///
public class ScriptIterator : IEnumerable
{
private readonly IReadOnlyList> _scripts;
///
public ScriptIterator(IReadOnlyList> scripts)
{
_scripts = scripts;
}
private IEnumerable GetAsEnumerable()
{
foreach (var enumerable in _scripts)
{
if (enumerable is IScriptSet set)
{
// We can't assume that the set remains the same size, so we need to iterate through it
// with a for loop.
for (var j = 0; j < set.Count; j++)
{
var script = set.At(j);
// We can ignore empty scripts.
if (script.IsEmpty)
continue;
yield return script;
}
}
else
{
foreach (var script in enumerable)
{
// We can ignore empty scripts.
if (script.IsEmpty)
continue;
yield return script;
}
}
}
}
///
public IEnumerator GetEnumerator() => GetAsEnumerable().GetEnumerator();
///
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}