Restructured Solution Layout

Moved several enums and helper classes into the QURO library for flexibility and potential reuse.

Also solved desync in animations by making AnimatedSprites reset their timer every time a new animation is loaded.
This commit is contained in:
quinnvoker
2018-11-17 20:54:01 -08:00
parent fb85769677
commit 9a25f068fc
9 changed files with 40 additions and 13 deletions
+88
View File
@@ -0,0 +1,88 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using QURO;
namespace QURO.AnimationLibrary
{
public class AnimatedSprite
{
public Texture2D SpriteSheet { get; set; }
private Animation currentAnimation;
public Animation CurrentAnimation
{
get { return currentAnimation; }
set
{
currentAnimation = value;
finishedPlaying = false;
CurrentFrameIndex = 0;
timer = CurrentFrame.Delay;
}
}
public int CurrentFrameIndex { get; set; }
public Frame CurrentFrame => CurrentAnimation.Frames[CurrentFrameIndex];
private float timer;
private bool finishedPlaying;
public AnimatedSprite() { }
public AnimatedSprite(Texture2D spriteSheet, Animation startingAnimation)
{
SpriteSheet = spriteSheet;
CurrentAnimation = startingAnimation;
timer = CurrentFrame.Delay;
finishedPlaying = false;
}
public void Reset()
{
CurrentFrameIndex = 0;
finishedPlaying = false;
timer = CurrentFrame.Delay;
}
public void Update(GameTime gameTime)
{
if (!CurrentAnimation.IsStillImage && !finishedPlaying)
{
if (timer <= 0)
{
if (CurrentFrameIndex < CurrentAnimation.Frames.Length - 1)
{
CurrentFrameIndex++;
}
else
{
if (CurrentAnimation.IsLooping)
{
CurrentFrameIndex = 0;
}
else
{
finishedPlaying = true;
}
}
timer = CurrentFrame.Delay;
}
else
{
timer -= (float)gameTime.ElapsedGameTime.TotalSeconds;
}
}
}
public void Draw(SpriteBatch spriteBatch, Vector2 position, Color tint)
{
spriteBatch.Draw(SpriteSheet, position, CurrentFrame.SourceRect, tint);
}
public void Draw(SpriteBatch spriteBatch, Vector2 position, Vector2 spriteOffset, Color tint)
{
Rectangle sourceRect = CurrentFrame.SourceRect;
sourceRect.Offset(spriteOffset);
spriteBatch.Draw(SpriteSheet, position, sourceRect, tint);
}
}
}