#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2020 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; using System.Collections; using System.Collections.Generic; #endregion namespace Microsoft.Xna.Framework.Input.Touch { // https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.touchcollection.aspx public struct TouchCollection : IList, ICollection, IEnumerable, IEnumerable { #region Public Properties public int Count { get { return touches.Count; } } public bool IsConnected { get { return TouchPanel.TouchDeviceExists; } } public bool IsReadOnly { get { return true; } } public TouchLocation this[int index] { get { return touches[index]; } set { // This will cause a runtime exception touches[index] = value; } } #endregion #region Private Variables private readonly List touches; #endregion #region Public Constructor public TouchCollection(TouchLocation[] touches) { this.touches = new List(touches); } #endregion #region Public Methods /* Since the collection is always readonly, using any * method that attempts to modify touches will result * in a System.NotSupportedException at runtime. */ public void Add(TouchLocation item) { touches.Add(item); } public void Clear() { touches.Clear(); } public bool Contains(TouchLocation item) { return touches.Contains(item); } public void CopyTo(TouchLocation[] array, int arrayIndex) { touches.CopyTo(array, arrayIndex); } public bool FindById(int id, out TouchLocation touchLocation) { foreach (TouchLocation touch in touches) { if (touch.Id == id) { touchLocation = touch; return true; } } touchLocation = new TouchLocation( -1, TouchLocationState.Invalid, Vector2.Zero ); return false; } public Enumerator GetEnumerator() { return new Enumerator(this); } public int IndexOf(TouchLocation item) { return touches.IndexOf(item); } public void Insert(int index, TouchLocation item) { touches.Insert(index, item); } public bool Remove(TouchLocation item) { return touches.Remove(item); } public void RemoveAt(int index) { touches.RemoveAt(index); } #endregion #region IEnumerator Methods IEnumerator System.Collections.IEnumerable.GetEnumerator() { return new Enumerator(this); } IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() { return new Enumerator(this); } #endregion #region Enumerator // https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.touchcollection.enumerator.aspx public struct Enumerator : IEnumerator, IDisposable, IEnumerator { private TouchCollection collection; private int position; internal Enumerator(TouchCollection collection) { this.collection = collection; position = -1; } public TouchLocation Current { get { return collection[position]; } } public bool MoveNext() { position += 1; return (position < collection.Count); } public void Dispose() { } object IEnumerator.Current { get { return collection[position]; } } void IEnumerator.Reset() { position = -1; } } #endregion } }