using System.Xml.Serialization;
using Microsoft.Xna.Framework;
using Netcode;
namespace StardustCore.Animations
{
/// A custom class used to deal with custom animations/
public class Animation
{
/// The source rectangle on the texture to display.
public Rectangle sourceRectangle;
/// The duration of the frame in length.
public int frameDuration;
/// The duration until the next frame.
public int frameCountUntilNextAnimation;
[XmlIgnore]
public NetFields NetFields { get; } = new NetFields();
public Animation()
{
this.sourceRectangle = new Rectangle(0, 0, 16, 16);
this.frameCountUntilNextAnimation = -1;
this.frameDuration = -1;
}
public Animation(int xPos, int yPos, int width, int height)
{
this.sourceRectangle = new Rectangle(xPos, yPos, width, height);
this.frameCountUntilNextAnimation = -1;
this.frameDuration = -1;
}
public Animation(int xPos, int yPos, int width, int height,int existsForXFrames)
{
this.sourceRectangle = new Rectangle(xPos, yPos, width, height);
this.frameDuration = existsForXFrames;
}
/// Constructor that causes the animation frame count to be set to -1; This forces it to never change.
/// The draw source for this animation.
public Animation(Rectangle SourceRectangle)
{
this.sourceRectangle = SourceRectangle;
this.frameCountUntilNextAnimation = -1;
this.frameDuration = -1;
}
/// Construct an instance.
/// The draw source for this animation.
/// How many on screen frames this animation stays for. Every draw frame decrements an active animation by 1 frame. Set this to -1 to have it be on the screen infinitely.
public Animation(Rectangle SourceRectangle, int existForXFrames)
{
this.sourceRectangle = SourceRectangle;
this.frameDuration = existForXFrames;
}
/// Decrements the amount of frames this animation is on the screen for by 1.
public void tickAnimationFrame()
{
this.frameCountUntilNextAnimation--;
}
/// This sets the animation frame count to be the max duration. I.E restart the timer.
public void startAnimation()
{
this.frameCountUntilNextAnimation = this.frameDuration;
}
}
}