示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
        }