Stardew_Valley_Mods/GeneralMods/StardustCore/Animations/Animation.cs

81 lines
2.5 KiB
C#

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
{
/// <summary>
/// A custom class used to deal with custom animations/
/// </summary>
public class Animation
{
/// <summary>
/// The source rectangle on the texture to display.
/// </summary>
public Rectangle sourceRectangle;
/// <summary>
/// The duration of the frame in length.
/// </summary>
public int frameDuration;
/// <summary>
/// The duration until the next frame.
/// </summary>
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;
}
/// <summary>
/// Constructor that causes the animation frame count to be set to -1; This forces it to never change.
/// </summary>
/// <param name="SourceRectangle">The draw source for this animation.</param>
public Animation(Rectangle SourceRectangle)
{
sourceRectangle = SourceRectangle;
this.frameCountUntilNextAnimation = -1;
frameDuration = -1;
}
/// <summary>
/// Constructor.
/// </summary>
/// <param name="SourceRectangle">The draw source for this animation.</param>
/// <param name="existForXFrames">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.</param>
public Animation(Rectangle SourceRectangle,int existForXFrames)
{
sourceRectangle = SourceRectangle;
frameDuration = existForXFrames;
}
/// <summary>
/// Decrements the amount of frames this animation is on the screen for by 1.
/// </summary>
public void tickAnimationFrame()
{
frameCountUntilNextAnimation--;
}
/// <summary>
/// This sets the animation frame count to be the max duration. I.E restart the timer.
/// </summary>
public void startAnimation()
{
frameCountUntilNextAnimation = frameDuration;
}
}
}