using Microsoft.Xna.Framework;
using Netcode;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
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;
}
///
/// 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)
{
sourceRectangle = SourceRectangle;
this.frameCountUntilNextAnimation = -1;
frameDuration = -1;
}
///
/// Constructor.
///
/// 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)
{
sourceRectangle = SourceRectangle;
frameDuration = existForXFrames;
}
///
/// Decrements the amount of frames this animation is on the screen for by 1.
///
public void tickAnimationFrame()
{
frameCountUntilNextAnimation--;
}
///
/// This sets the animation frame count to be the max duration. I.E restart the timer.
///
public void startAnimation()
{
frameCountUntilNextAnimation = frameDuration;
}
}
}