using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using MonoGame.Extended.TextureAtlases; namespace MonoGame.Extended.Animations.SpriteSheets { public class SpriteSheetAnimationFactory { private readonly Dictionary _animationDataDictionary; public SpriteSheetAnimationFactory(TextureAtlas textureAtlas) : this(textureAtlas.Regions) { } public SpriteSheetAnimationFactory(IEnumerable frames) { _animationDataDictionary = new Dictionary(); Frames = new ReadOnlyCollection(frames.ToArray()); } public ReadOnlyCollection Frames { get; } public void Add(string name, SpriteSheetAnimationData data) { _animationDataDictionary.Add(name, data); } public void Remove(string name) { _animationDataDictionary.Remove(name); } public SpriteSheetAnimation Create(string name) { if (_animationDataDictionary.TryGetValue(name, out var data)) { var keyFrames = data.FrameIndicies .Select(i => Frames[i]) .ToArray(); return new SpriteSheetAnimation(name, keyFrames, data); } return null; } } }