//============= Copyright (c) Ludic GmbH, All rights reserved. ============== // // Purpose: Part of the My Behaviour Tree Code // //============================================================================= using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MyBT { [System.Serializable] public class NodeList : IEnumerator, IEnumerable { [SerializeField] List array = new List(); public NodeList(List nArray) { for (int i = 0; i < nArray.Count; i++) { array.Add(nArray[i]); } } public NodeList() { } public Node this[int param] { get { if ((param < array.Count) && (param >= 0)) return array[param]; Debug.LogError($"TaskController.this: invalid index {param.ToString()} in {((array != null) ? array.Count.ToString() : "undefined")}"); return null; } set { array[param] = value; } } public int Count { get { return array.Count; } } public void Add(Node t) { array.Add(t); } int position = -1; public bool MoveNext() { position++; return (position < array.Count); } public void Reset() { position = -1; } public void Clear() { Destroy(); } public void Destroy() { array = new List(); Reset(); } object IEnumerator.Current { get { return Current; } } public Node Current { get { try { return array[position]; } catch (IndexOutOfRangeException) { throw new InvalidOperationException(); } } } IEnumerator IEnumerable.GetEnumerator() { return (IEnumerator)GetEnumerator(); } public NodeList GetEnumerator() { return new NodeList(array); } public NodeList Copy() { List newArray = new List(); ExtensionMethods.DeepCopy>(array, ref newArray); return new NodeList(newArray); } } }