Created
October 24, 2018 08:33
-
-
Save joleeee/4c636a368e2cb1ec914f55616c1dcdbb to your computer and use it in GitHub Desktop.
Aseprite importer for monogame, very crude prototype.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Microsoft.Xna.Framework; | |
using Microsoft.Xna.Framework.Graphics; | |
using System; | |
using System.Linq; | |
using Newtonsoft.Json.Linq; | |
class Sprite | |
{ | |
public Vector2 position; | |
public Texture2D texture; | |
public JObject json; | |
public Frame[] frames; | |
public Point size; | |
public Animation[] animations; | |
public Animation currentAnimation; | |
public double ms = 0; | |
public int currentFrame; | |
public Sprite(Vector2 position, Texture2D texture, string pathToJson) | |
{ | |
this.position = position; | |
this.texture = texture; | |
this.json = JObject.Parse(System.IO.File.ReadAllText(pathToJson)); | |
string s = ""; | |
int i = 0; | |
frames = new Frame[json["frames"].Children().Count()]; | |
foreach (JProperty child in json["frames"]) | |
{ | |
s = child.Name; | |
size.X = int.Parse((string)json["frames"][s]["sourceSize"]["w"]); | |
size.Y = int.Parse((string)json["frames"][s]["sourceSize"]["h"]); | |
frames[i] = new Frame( | |
int.Parse((string)json["frames"][s]["frame"]["x"]), | |
int.Parse((string)json["frames"][s]["frame"]["y"]), | |
int.Parse((string)json["frames"][s]["duration"]) | |
); | |
i++; | |
} | |
JArray anims = (JArray)json["meta"]["frameTags"]; | |
animations = new Animation[anims.Count]; | |
for (int j = 0; j < anims.Count; j++) | |
{ | |
Animation an = new Animation((string)anims[j]["name"], (int)anims[j]["from"], (int)anims[j]["to"]); | |
animations[j] = an; | |
} | |
} | |
public virtual void Update(GameTime gameTime) | |
{ | |
ms += gameTime.ElapsedGameTime.TotalMilliseconds; | |
Console.WriteLine(ms); | |
if (ms >= frames[currentFrame].ms) | |
{ | |
Console.WriteLine(true); | |
ms = 0; | |
currentFrame++; | |
if (currentFrame > currentAnimation.to) | |
currentFrame = currentAnimation.from; | |
} | |
else | |
{ | |
Console.WriteLine(false); | |
} | |
} | |
public virtual bool SetAnimation(string name) | |
{ | |
foreach (Animation animation in animations) | |
{ | |
if (animation.name == name) | |
{ | |
currentAnimation = animation; | |
ms = 0; | |
return true; | |
} | |
} | |
return false; | |
} | |
public virtual void Draw(SpriteBatch spriteBatch) | |
{ | |
spriteBatch.Draw(texture, position, new Rectangle(frames[currentFrame].point, size), Color.White); | |
} | |
//public static bool Overlap(Sprite a, Sprite b, int scale = 2) | |
//{ | |
// Rectangle ar = new Rectangle((a.position * scale).ToPoint(), new Point(a.current.Size.X * scale, a.current.Size.Y * scale)); | |
// Rectangle ab = new Rectangle((b.position * scale).ToPoint(), new Point(b.current.Size.X * scale, b.current.Size.Y * scale)); | |
// return ar.Intersects(ab); | |
//} | |
} | |
struct Animation | |
{ | |
public string name; | |
public int from; | |
public int to; | |
public Animation(string name, int from, int to) | |
{ | |
this.name = name; | |
this.from = from; | |
this.to = to; | |
} | |
} | |
struct Frame | |
{ | |
public Point point; | |
public int ms; | |
public Frame(int x, int y, int ms) | |
{ | |
this.point = new Point(x, y); | |
this.ms = ms; | |
} | |
public Frame(Point point, int ms) | |
{ | |
this.point = point; | |
this.ms = ms; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment