EduNetworkBuilder/EduNetworkBuilder/AnimationClass.cs

101 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
namespace EduNetworkBuilder
{
//Holds a little bit of information pertaining to the current animation.
[Serializable]
public class AnimationClass
{
Point ImageStartPoint = new Point();
Rectangle Where;
Size HowBig; //how big is each animation.
public DateTime NextAnimation;
int AnimationCount = 0;
int AnimationSpeed = 150; //ms between animations
int maxAnim = 12;
bool erased = true;
public bool AnimationDone { get { if (AnimationCount > 0) return false; return true; } }
public bool FinalErase = false;
public AnimationClass(AnimationName What, Rectangle where)
{
Where = where;
switch(What)
{
case AnimationName.Fire1:
ImageStartPoint = new Point(0,0);
HowBig = new Size(100, 100);
AnimationCount = 12;
maxAnim = 12;
AnimationSpeed = 100;
break;
case AnimationName.Explo1:
ImageStartPoint = new Point(0, 400);
HowBig = new Size(100, 100);
AnimationCount = 12;
maxAnim = 12;
AnimationSpeed = 100;
break;
case AnimationName.Smoke1:
ImageStartPoint = new Point(0, 200);
HowBig = new Size(100, 100);
AnimationCount = 6;
maxAnim = 6;
break;
case AnimationName.Spark1:
ImageStartPoint = new Point(0, 300);
HowBig = new Size(100, 100);
AnimationCount = 6;
maxAnim = 6;
break;
case AnimationName.Lightning1:
ImageStartPoint = new Point(0, 600);
HowBig = new Size(100, 100);
AnimationCount = 6;
maxAnim = 6;
break;
}
NextAnimation = DateTime.UtcNow.AddMilliseconds(AnimationSpeed);
}
public void DrawAnimation(Image TheNetworkImage, PictureBox myPB)
{
if (AnimationCount < 0) return;
if (!erased) return;
int sx = (maxAnim - AnimationCount) * HowBig.Width;
int sy = ImageStartPoint.Y;
if(sx >= Properties.Resources.Animations.Width)
{
sy = sy + HowBig.Height;
sx = sx - Properties.Resources.Animations.Width;
}
//Console.WriteLine("Anim: x:" + sx + " y:" + sy);
Rectangle AniminSnip = new Rectangle(sx, sy, HowBig.Width, HowBig.Height);
Graphics.FromImage(TheNetworkImage).DrawImage(Properties.Resources.Animations, Where, AniminSnip, GraphicsUnit.Pixel);
myPB.Invalidate(Where);
}
public void EraseAnimation(Image TheNetworkImage, PictureBox myPB, Image TheNetworkImageBackground)
{
if (DateTime.UtcNow >= NextAnimation)
{
//Console.WriteLine("\nThis happened at: " + DateTime.UtcNow.ToString("mm:ss.fff tt"));
if (TheNetworkImageBackground == null) return;//do nothing if no animation set
Graphics.FromImage(TheNetworkImage).DrawImage(TheNetworkImageBackground, Where, Where, GraphicsUnit.Pixel);
myPB.Invalidate(Where);
erased = true;
NextAnimation = DateTime.UtcNow.AddMilliseconds(AnimationSpeed);
//Console.WriteLine("next: "+ NextAnimation.ToString("mm:ss.fff tt"));
AnimationCount--;
}
}
}
}