Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- namespace ShootEmUp.Animations
- {
- class Animation
- {
- public Texture2D GetSpriteSheet { get; }
- public Rectangle GetSourceRectangle { get; set; }
- public Point GetSpriteCount { get; private set; }
- private Point mySpriteSize;
- private float myElapsedTime;
- private float myTimeBetweenFrames;
- public Animation(Texture2D aSpriteSheet, Point someSpriteSize, Point someSpriteCount, float someTimeBetweenFrames)
- {
- GetSpriteSheet = aSpriteSheet;
- mySpriteSize = someSpriteSize;
- GetSpriteCount = someSpriteCount;
- myTimeBetweenFrames = someTimeBetweenFrames;
- }
- public void Update(GameTime someGameTime)
- {
- if (GetSpriteCount.X * GetSpriteCount.Y == 1)
- {
- GetSourceRectangle = new Rectangle(0, 0, mySpriteSize.X, mySpriteSize.Y);
- return;
- }
- int tempTargetSpriteIndex = GetTargetSpriteIndex(someGameTime);
- Point tempTargetImage = GetTargetImage(tempTargetSpriteIndex);
- Point tempTargetImagePosition = new Point(tempTargetImage.X * mySpriteSize.X, tempTargetImage.Y * mySpriteSize.Y);
- Rectangle tempTargetRectangle = new Rectangle(tempTargetImagePosition.X, tempTargetImagePosition.Y, mySpriteSize.X, mySpriteSize.Y);
- GetSourceRectangle = tempTargetRectangle;
- }
- private int GetTargetSpriteIndex(GameTime someGameTime)
- {
- int tempTargetSpriteIndex = 0;
- do
- {
- tempTargetSpriteIndex = (int)(myElapsedTime / (myTimeBetweenFrames <= 0 ? 1 : myTimeBetweenFrames));
- myElapsedTime += (float)someGameTime.ElapsedGameTime.TotalSeconds;
- if (tempTargetSpriteIndex >= GetSpriteCount.X * GetSpriteCount.Y)
- {
- myElapsedTime = 0;
- }
- } while (tempTargetSpriteIndex >= GetSpriteCount.X * GetSpriteCount.Y);
- return tempTargetSpriteIndex;
- }
- private Point GetTargetImage(int someTargetSpriteIndex)
- {
- return new Point(someTargetSpriteIndex % GetSpriteCount.X, (int)(someTargetSpriteIndex / GetSpriteCount.X));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement