/// <summary> /// Get the /// </summary> /// <param name="angle"></param> /// <returns></returns> public SpriteAnimationDirection GetDirection(Angle angle) { if (_Directions.ContainsKey(angle)) { return(_Directions[angle]); } else { Angle mindA = Angle.Complete; SpriteAnimationDirection closest = null; foreach (var entry in Directions) { Angle dA = (angle - entry.Key).Normalize(); if (dA.Abs() < mindA.Abs()) { closest = entry.Value; mindA = dA; } } return(closest); } }
/// <summary> /// Load sprite data from a sprite sheet /// </summary> /// <param name="filePath"></param> /// <param name="textureLoader"></param> /// <returns></returns> public SpriteDataCollection LoadSpriteSheet(FilePath filePath, ITextureLoader textureLoader) { var result = new SpriteDataCollection(); using (var br = new StreamReader(filePath)) { //Read line-by-line: SpriteData currentSprite = null; SpriteAnimation currentAnimation = null; SpriteAnimationDirection currentDirection = null; ITexture image = null; String line = br.ReadLine(); if (line != null) { //First line gives image filename image = textureLoader.GetTexture(filePath.Directory + line); } while (line != null) { line = br.ReadLine(); if (string.IsNullOrWhiteSpace(line)) { //Store and clear current sprite data: if (currentSprite != null) { result.Add(currentSprite); } currentSprite = null; currentAnimation = null; } else { String[] splitLine = line.Split('\t'); // Split on tabs if (currentSprite == null) { //Initialise sprite: currentSprite = new SpriteData(); currentSprite.Name = line; //currentSprite.Texture(image); } else if (currentAnimation == null || !splitLine.IsNumeric()) { currentAnimation = new SpriteAnimation(); currentSprite.Animations.Add(line, currentAnimation); currentDirection = null; } else if (currentDirection == null || splitLine.Length <= 1) { currentDirection = new SpriteAnimationDirection(); currentAnimation.Directions.Add(double.Parse(line), currentDirection); } else { TextureBrush frame = new TextureBrush(image, splitLine); currentDirection.Frames.Add(frame); } } } } return(result); }