94 lines
3.2 KiB
C#
94 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace MrAG
|
|
{
|
|
public partial class Gui
|
|
{
|
|
public class ImageBoxAnimated : Base
|
|
{
|
|
public Color BorderColor = Color.Black;
|
|
public Color ImageColor = Color.White;
|
|
public Texture2D Texture;
|
|
public int BorderSize;
|
|
public bool Playing = true;
|
|
|
|
public bool FlipTextureH = false;
|
|
public bool FlipTextureV = false;
|
|
|
|
Dictionary<string, List<Vector2>> FrameList = new Dictionary<string,List<Vector2>>();
|
|
int speed;
|
|
int curcolom;
|
|
string curframe = "";
|
|
double lastanichange;
|
|
|
|
public void SetFrameData(Dictionary<string, List<Vector2>> data, int speed, string animation) {
|
|
this.FrameList = data;
|
|
this.speed = speed;
|
|
this.curframe = animation;
|
|
|
|
this.curcolom = 0;
|
|
}
|
|
|
|
public void SetAnimationSpeed(int interval) {
|
|
this.speed = interval;
|
|
lastanichange = DateTime.Now.TimeOfDay.TotalMilliseconds;
|
|
}
|
|
|
|
public void SetAnimation(string name) {
|
|
if (!this.FrameList.ContainsKey(name))
|
|
return;
|
|
|
|
this.curframe = name;
|
|
if (curcolom > this.FrameList[curframe].Count - 1) {
|
|
curcolom = 0;
|
|
}
|
|
}
|
|
|
|
public void AddAnimation(string name, Vector2 offset) {
|
|
if (!this.FrameList.ContainsKey(name))
|
|
this.FrameList[name] = new List<Vector2>();
|
|
|
|
this.FrameList[name].Add(offset);
|
|
}
|
|
|
|
public override void Update() {
|
|
base.Update();
|
|
|
|
if (!this.Playing)
|
|
return;
|
|
|
|
if (this.curframe == "")
|
|
return;
|
|
|
|
double curtime = DateTime.Now.TimeOfDay.TotalMilliseconds;
|
|
if (Math.Abs(curtime - lastanichange) > speed) {
|
|
lastanichange = curtime;
|
|
curcolom++;
|
|
if (curcolom > this.FrameList[curframe].Count - 1) {
|
|
curcolom = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Draw()
|
|
{
|
|
if (this.curframe == "")
|
|
return;
|
|
|
|
MrAG.Draw.SpriteBatch.Draw(this.Texture, new Vector2(this.X + this.BorderSize, this.Y + this.BorderSize), new Rectangle((int)this.FrameList[this.curframe][this.curcolom].X, (int)this.FrameList[this.curframe][this.curcolom].Y, this.Width - (this.BorderSize * 2), this.Height - (this.BorderSize * 2)),
|
|
this.ImageColor, 0, new Vector2(0, 0),
|
|
1, this.FlipTextureH ? SpriteEffects.FlipHorizontally : this.FlipTextureV ? SpriteEffects.FlipVertically : SpriteEffects.None, 1);
|
|
|
|
MrAG.Draw.OutlinedBox(this.X, this.Y, this.Width, this.Height, this.BorderSize, this.BorderColor);
|
|
|
|
base.Draw();
|
|
}
|
|
}
|
|
}
|
|
}
|