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; } } }