Advertisement
Guest User

Animated sprite extension for Delta Engine.

a guest
Feb 16th, 2013
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.50 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using DeltaEngine.Core;
  7. using DeltaEngine.Datatypes;
  8. using DeltaEngine.Graphics;
  9. using DeltaEngine.Rendering;
  10.  
  11. namespace DeltaExtensions
  12. {
  13.     public class AnimatedSprite : Sprite
  14.     {
  15.         private readonly Image _image; //the sprite sheet
  16.  
  17.         private readonly int _height; //height of one sprite in the sprite sheet
  18.         private readonly int _width; //width of one sprite in the sprite sheet
  19.  
  20.         private readonly Point[] _frames;
  21.         private float _currentFrameDelta;
  22.         private int _currentFrameNumber;
  23.         private readonly int _targetFps;
  24.         private readonly float _frameLength;
  25.  
  26.         /// <summary>
  27.         ///
  28.         /// </summary>
  29.         /// <param name="image"></param>
  30.         /// <param name="initalDrawArea"></param>
  31.         /// <param name="color"></param>
  32.         /// <param name="height"></param>
  33.         /// <param name="width"></param>
  34.         /// <param name="targetFps"></param>
  35.         /// <param name="frames"></param>
  36.         public AnimatedSprite(Image image, Rectangle initalDrawArea, Color color, int width, int height, int targetFps, Point[] frames)
  37.             : base(image, initalDrawArea, color)
  38.         {
  39.             _image = image;
  40.             _height = height;
  41.             _width = width;
  42.             _targetFps = targetFps;
  43.             _frameLength = (1 / (float)_targetFps);
  44.             _frames = frames;
  45.         }
  46.  
  47.         protected override void Render(Renderer renderer, Time time)
  48.         {
  49.             DrawImage(time, renderer.Screen);
  50.         }
  51.  
  52.         private Point GetCurrentFrame(Time time)
  53.         {
  54.             _currentFrameDelta += time.CurrentDelta;
  55.             if (_currentFrameDelta > _frameLength)
  56.             {
  57.                 _currentFrameNumber = (_currentFrameNumber + 1) % _frames.Length;
  58.                 _currentFrameDelta = 0;
  59.             }
  60.             return _frames[_currentFrameNumber];
  61.         }
  62.  
  63.         private void DrawImage(Time time, ScreenSpace screen)
  64.         {
  65.             var currentImage = GetCurrentFrame(time);
  66.             var heightPercentage = 1 / _image.PixelSize.Height * _height;
  67.             var widthPercentage = 1 / _image.PixelSize.Width * _width;
  68.  
  69.             var topLeft = new Point(currentImage.X * widthPercentage, currentImage.Y * heightPercentage);
  70.             var topRight = new Point((currentImage.X+1) * widthPercentage, currentImage.Y * heightPercentage);
  71.             var botLeft = new Point(currentImage.X * widthPercentage, (currentImage.Y + 1) * heightPercentage);
  72.             var botRight = new Point((currentImage.X + 1) * widthPercentage, (currentImage.Y + 1) * heightPercentage);
  73.  
  74.             var vertices = new[]
  75.             {
  76.                 GetVertex(DrawArea.TopLeft, topLeft, screen),
  77.                 GetVertex(DrawArea.TopRight, topRight, screen),
  78.                 GetVertex(DrawArea.BottomRight, botRight, screen),
  79.                 GetVertex(DrawArea.BottomLeft, botLeft, screen)
  80.             };
  81.             _image.Draw(vertices);
  82.         }
  83.  
  84.         private VertexPositionColorTextured GetVertex(Point position, Point uv, ScreenSpace screen)
  85.         {
  86.             if (Flip == FlipMode.Horizontal)
  87.                 uv.X = 1.0f - uv.X;
  88.             if (Flip == FlipMode.Vertical)
  89.                 uv.Y = 1.0f - uv.Y;
  90.             return new VertexPositionColorTextured(screen.ToPixelSpaceRounded(position), Color, uv);
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement