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
}
}