using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace OpenVIII.Fields { /// /// Cameras /// /// /// /// /// /// public class Cameras : IReadOnlyList { #region Fields private const int AltSizeOfCamera = 0x26; private const int SizeOfCamera = 0x28; private readonly IReadOnlyList _cameras; #endregion Fields #region Constructors public Cameras(IReadOnlyList cameras) => _cameras = cameras; #endregion Constructors #region Properties public int Count => _cameras.Count; #endregion Properties #region Indexers public Camera this[int index] => _cameras[index]; #endregion Indexers #region Methods public static Cameras CreateInstance(byte[] idb) { if (idb == null || idb.Length == 0) return null; var sizeofCamera = SizeOfCamera; int count; if (idb.Length / SizeOfCamera > idb.Length / AltSizeOfCamera) count = idb.Length / SizeOfCamera; else { sizeofCamera = AltSizeOfCamera; count = idb.Length / sizeofCamera; } Debug.Assert(count >= 1); return new Cameras(Enumerable.Range(0, count).Select(x => Camera.CreateInstance(idb, x * sizeofCamera)).ToList() .AsReadOnly()); } public IEnumerator GetEnumerator() => _cameras.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_cameras).GetEnumerator(); #endregion Methods } }