TiledMapModel.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. namespace MonoGame.Extended.Tiled.Renderers
  6. {
  7. public class TiledMapModel : IDisposable
  8. {
  9. private readonly TiledMap _map;
  10. private readonly Dictionary<TiledMapTileset, List<TiledMapTilesetAnimatedTile>> _animatedTilesByTileset;
  11. public TiledMapModel(TiledMap map, Dictionary<TiledMapLayer, TiledMapLayerModel[]> layersOfLayerModels)
  12. {
  13. _map = map;
  14. LayersOfLayerModels = layersOfLayerModels;
  15. _animatedTilesByTileset = _map.Tilesets
  16. .ToDictionary(i => i, i => i.Tiles.OfType<TiledMapTilesetAnimatedTile>()
  17. .ToList());
  18. }
  19. public void Dispose()
  20. {
  21. foreach (var layerModel in LayersOfLayerModels)
  22. foreach (var model in layerModel.Value)
  23. model.Dispose();
  24. }
  25. public ReadOnlyCollection<TiledMapTileset> Tilesets => _map.Tilesets;
  26. public ReadOnlyCollection<TiledMapLayer> Layers => _map.Layers;
  27. // each layer has many models
  28. public Dictionary<TiledMapLayer, TiledMapLayerModel[]> LayersOfLayerModels { get; }
  29. public IEnumerable<TiledMapTilesetAnimatedTile> GetAnimatedTiles(int tilesetIndex)
  30. {
  31. var tileset = _map.Tilesets[tilesetIndex];
  32. return _animatedTilesByTileset[tileset];
  33. }
  34. }
  35. }