Tiles.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. namespace OpenVIII.Fields
  8. {
  9. public partial class Background
  10. {
  11. #region Classes
  12. public class Tiles : IList<Tile>
  13. {
  14. #region Fields
  15. private List<Tile> tiles;
  16. #endregion Fields
  17. #region Constructors
  18. public Tiles() => tiles = new List<Tile>();
  19. public Tiles(List<Tile> tiles) => this.tiles = tiles;
  20. #endregion Constructors
  21. #region Properties
  22. public Point BottomRight => new Point(tiles.Max(tile => tile.X) + Tile.size, tiles.Max(tile => tile.Y) + Tile.size);
  23. public int Count => ((IList<Tile>)tiles).Count;
  24. public int Height => Math.Abs(TopLeft.Y) + BottomRight.Y;
  25. public bool IsReadOnly => ((IList<Tile>)tiles).IsReadOnly;
  26. public Point TopLeft => new Point(tiles.Min(tile => tile.X), tiles.Min(tile => tile.Y));
  27. public int Width => Math.Abs(TopLeft.X) + BottomRight.X;
  28. #endregion Properties
  29. #region Indexers
  30. public Tile this[int index] { get => ((IList<Tile>)tiles)[index]; set => ((IList<Tile>)tiles)[index] = value; }
  31. #endregion Indexers
  32. #region Methods
  33. public static Tiles Load(byte[] mapb, byte textureType)
  34. {
  35. Tiles tiles = new Tiles();
  36. //128x256
  37. //using (BinaryReader pbsmim = new BinaryReader(new MemoryStream(mimb))
  38. using (BinaryReader pbsmap = new BinaryReader(new MemoryStream(mapb)))
  39. while (pbsmap.BaseStream.Position + 16 < pbsmap.BaseStream.Length)
  40. {
  41. Tile tile = Tile.Load(pbsmap, tiles.Count, textureType);
  42. if (tile != null)
  43. tiles.Add(tile);
  44. }
  45. return tiles;
  46. }
  47. public void Add(Tile item) => ((IList<Tile>)tiles).Add(item);
  48. public void Clear() => ((IList<Tile>)tiles).Clear();
  49. public bool Contains(Tile item) => ((IList<Tile>)tiles).Contains(item);
  50. public void CopyTo(Tile[] array, int arrayIndex) => ((IList<Tile>)tiles).CopyTo(array, arrayIndex);
  51. public IEnumerator<Tile> GetEnumerator() => ((IList<Tile>)tiles).GetEnumerator();
  52. IEnumerator IEnumerable.GetEnumerator() => ((IList<Tile>)tiles).GetEnumerator();
  53. public int IndexOf(Tile item) => ((IList<Tile>)tiles).IndexOf(item);
  54. public void Insert(int index, Tile item) => ((IList<Tile>)tiles).Insert(index, item);
  55. public bool Remove(Tile item) => ((IList<Tile>)tiles).Remove(item);
  56. public void RemoveAt(int index) => ((IList<Tile>)tiles).RemoveAt(index);
  57. #endregion Methods
  58. }
  59. #endregion Classes
  60. }
  61. }