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